commit 96c23bfd2863bcca7388653a7bc4c9f8a64a03be Author: Ulrich Weigand Date: Fri Feb 26 12:48:17 2010 +0000 * 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. diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index 1c4d057..20ede3e 100644 --- a/gdb/dwarf2loc.c +++ b/gdb/dwarf2loc.c @@ -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 (type, &pieced_value_funcs, c); VALUE_FRAME_ID (retval) = frame_id; }