From 6063c216d5e19fc416ff709461b21e8b810da0dc Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Fri, 26 Feb 2010 12:48:18 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 10 ++++++++++ gdb/dwarf2loc.c | 24 ++++++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6a5be14baf..7dfad69368 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2010-02-26 Ulrich Weigand + + * 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 Tom Tromey diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index 1c4d057d00..20ede3e047 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 (SYMBOL_TYPE (var), &pieced_value_funcs, c); -- 2.34.1