diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/dwarf2loc.c | 11 |
2 files changed, 12 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 25cac87..219ed9a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2004-08-24 Jim Blandy <jimb@redhat.com> + + * dwarf2loc.c (dwarf2_evaluate_loc_desc): Wait to fetch the top of + the stack until we've decided what sort of result the evaluation + has produced. Use separate variables, with more specific names. + 2004-08-23 Richard Earnshaw <rearnsha@arm.com> * armnbsd-tdep.c (arm_nbsd_arm_be_breakpoint): Define. diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index cdbeb10..3e7cdd6 100644 --- a/gdb/dwarf2loc.c +++ b/gdb/dwarf2loc.c @@ -205,7 +205,6 @@ dwarf2_evaluate_loc_desc (struct symbol *var, struct frame_info *frame, unsigned char *data, unsigned short size, struct objfile *objfile) { - CORE_ADDR result; struct value *retval; struct dwarf_expr_baton baton; struct dwarf_expr_context *ctx; @@ -228,21 +227,23 @@ dwarf2_evaluate_loc_desc (struct symbol *var, struct frame_info *frame, ctx->get_tls_address = dwarf_expr_tls_address; dwarf_expr_eval (ctx, data, size); - result = dwarf_expr_fetch (ctx, 0); if (ctx->in_reg) { - int regnum = DWARF2_REG_TO_REGNUM (result); - retval = value_from_register (SYMBOL_TYPE (var), regnum, frame); + CORE_ADDR dwarf_regnum = dwarf_expr_fetch (ctx, 0); + int gdb_regnum = DWARF2_REG_TO_REGNUM (dwarf_regnum); + retval = value_from_register (SYMBOL_TYPE (var), gdb_regnum, frame); } else { + CORE_ADDR address = dwarf_expr_fetch (ctx, 0); + retval = allocate_value (SYMBOL_TYPE (var)); VALUE_BFD_SECTION (retval) = SYMBOL_BFD_SECTION (var); VALUE_LVAL (retval) = lval_memory; VALUE_LAZY (retval) = 1; - VALUE_ADDRESS (retval) = result; + VALUE_ADDRESS (retval) = address; } free_dwarf_expr_context (ctx); |