* dwarf2loc.c (struct piece_closure): Remove ARCH member,
authorUlrich Weigand <uweigand@de.ibm.com>
Fri, 26 Feb 2010 12:48:18 +0000 (12:48 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Fri, 26 Feb 2010 12:48:18 +0000 (12:48 +0000)
add ADDR_SIZE member.
(allocate_piece_closure): Update.
(copy_pieced_value_closure): Likewise.
(dwarf2_evaluate_loc_desc): Likewise.
(read_pieced_value): Use DWARF address size instead of
GDB's gdbarch_addr_bit as size of values on the DWARF stack.

gdb/ChangeLog
gdb/dwarf2loc.c

index 6a5be14baff6f5e96761982893c98e9a20217365..7dfad6936886d64978243d20d5db13130d14fedf 100644 (file)
@@ -1,3 +1,13 @@
+2010-02-26  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * dwarf2loc.c (struct piece_closure): Remove ARCH member,
+       add ADDR_SIZE member.
+       (allocate_piece_closure): Update.
+       (copy_pieced_value_closure): Likewise.
+       (dwarf2_evaluate_loc_desc): Likewise.
+       (read_pieced_value): Use DWARF address size instead of
+       GDB's gdbarch_addr_bit as size of values on the DWARF stack.
+
 2010-02-26  Phil Muldoon  <pmuldoon@redhat.com>
             Tom Tromey  <tromey@redhat.com>
 
index 1c4d057d0049c4d7cb315dd38cdc275a6021b1fb..20ede3e04743ba01d6b6cfe1d0a8f4b1c6e7d601 100644 (file)
@@ -232,8 +232,8 @@ struct piece_closure
   /* The number of pieces used to describe this variable.  */
   int n_pieces;
 
-  /* The architecture, used only for DWARF_VALUE_STACK.  */
-  struct gdbarch *arch;
+  /* The target address size, used only for DWARF_VALUE_STACK.  */
+  int addr_size;
 
   /* The pieces themselves.  */
   struct dwarf_expr_piece *pieces;
@@ -244,12 +244,12 @@ struct piece_closure
 
 static struct piece_closure *
 allocate_piece_closure (int n_pieces, struct dwarf_expr_piece *pieces,
-                       struct gdbarch *arch)
+                       int addr_size)
 {
   struct piece_closure *c = XZALLOC (struct piece_closure);
 
   c->n_pieces = n_pieces;
-  c->arch = arch;
+  c->addr_size = addr_size;
   c->pieces = XCALLOC (n_pieces, struct dwarf_expr_piece);
 
   memcpy (c->pieces, pieces, n_pieces * sizeof (struct dwarf_expr_piece));
@@ -298,13 +298,12 @@ read_pieced_value (struct value *v)
 
        case DWARF_VALUE_STACK:
          {
-           size_t n;
-           int addr_size = gdbarch_addr_bit (c->arch) / 8;
-           n = p->size;
-           if (n > addr_size)
-             n = addr_size;
+           struct gdbarch *gdbarch = get_type_arch (value_type (v));
+           size_t n = p->size;
+           if (n > c->addr_size)
+             n = c->addr_size;
            store_unsigned_integer (contents + offset, n,
-                                   gdbarch_byte_order (c->arch),
+                                   gdbarch_byte_order (gdbarch),
                                    p->v.expr.value);
          }
          break;
@@ -377,7 +376,7 @@ copy_pieced_value_closure (struct value *v)
 {
   struct piece_closure *c = (struct piece_closure *) value_computed_closure (v);
   
-  return allocate_piece_closure (c->n_pieces, c->pieces, c->arch);
+  return allocate_piece_closure (c->n_pieces, c->pieces, c->addr_size);
 }
 
 static void
@@ -439,7 +438,8 @@ dwarf2_evaluate_loc_desc (struct symbol *var, struct frame_info *frame,
       struct piece_closure *c;
       struct frame_id frame_id = get_frame_id (frame);
 
-      c = allocate_piece_closure (ctx->num_pieces, ctx->pieces, ctx->gdbarch);
+      c = allocate_piece_closure (ctx->num_pieces, ctx->pieces,
+                                 ctx->addr_size);
       retval = allocate_computed_value (SYMBOL_TYPE (var),
                                        &pieced_value_funcs,
                                        c);