* 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.
This commit is contained in:
Jim Blandy 2004-08-24 17:31:49 +00:00
parent 8f94ae4da3
commit 5ca2e3275d
2 changed files with 12 additions and 5 deletions

View File

@ -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.

View File

@ -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);