81 lines
2.7 KiB
Diff
81 lines
2.7 KiB
Diff
commit 96c23bfd2863bcca7388653a7bc4c9f8a64a03be
|
|
Author: Ulrich Weigand <uweigand@de.ibm.com>
|
|
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;
|
|
}
|