Add tiny memory model GD test cases.
[deliverable/binutils-gdb.git] / gdb / dwarf2loc.c
index bdb2160aed519148b36e7f68cc5da10e78466d4c..aa569eee6d264b7453477c748a0370a2fbf0d2c7 100644 (file)
@@ -41,7 +41,7 @@
 
 extern int dwarf2_always_disassemble;
 
-static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs;
+extern const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs;
 
 static struct value *dwarf2_evaluate_loc_desc_full (struct type *type,
                                                    struct frame_info *frame,
@@ -2151,7 +2151,7 @@ static const struct lval_funcs pieced_value_funcs = {
 
 /* Virtual method table for dwarf2_evaluate_loc_desc_full below.  */
 
-static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs =
+const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs =
 {
   dwarf_expr_read_addr_from_reg,
   dwarf_expr_get_reg_value,
@@ -2461,7 +2461,8 @@ dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
 
 int
 dwarf2_evaluate_property (const struct dynamic_prop *prop,
-                         CORE_ADDR address, CORE_ADDR *value)
+                         struct property_addr_info *addr_stack,
+                         CORE_ADDR *value)
 {
   if (prop == NULL)
     return 0;
@@ -2472,7 +2473,8 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
       {
        const struct dwarf2_property_baton *baton = prop->data.baton;
 
-       if (dwarf2_locexpr_baton_eval (&baton->locexpr, address, value))
+       if (dwarf2_locexpr_baton_eval (&baton->locexpr, addr_stack->addr,
+                                      value))
          {
            if (baton->referenced_type)
              {
@@ -2511,6 +2513,23 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
     case PROP_CONST:
       *value = prop->data.const_val;
       return 1;
+
+    case PROP_ADDR_OFFSET:
+      {
+       struct dwarf2_property_baton *baton = prop->data.baton;
+       struct property_addr_info *pinfo;
+       struct value *val;
+
+       for (pinfo = addr_stack; pinfo != NULL; pinfo = pinfo->next)
+         if (pinfo->type == baton->referenced_type)
+           break;
+       if (pinfo == NULL)
+         error (_("cannot find reference address for offset property"));
+       val = value_at (baton->offset_info.type,
+                       pinfo->addr + baton->offset_info.offset);
+       *value = value_as_address (val);
+       return 1;
+      }
     }
 
   return 0;
This page took 0.02572 seconds and 4 git commands to generate.