diff options
author | Jim Blandy <jimb@codesourcery.com> | 2004-08-24 17:31:49 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 2004-08-24 17:31:49 +0000 |
commit | 4db4e42d5ade764f5adf317bf7e7869ce176f7a7 (patch) | |
tree | d58910cb8a6aac52418e62d6e11c33df2c90baa1 /gdb/dwarf2loc.c | |
parent | e3017343ad29ef9dc8911b8956bac9bbacdb20d1 (diff) | |
download | gdb-4db4e42d5ade764f5adf317bf7e7869ce176f7a7.tar.gz |
* 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.
Diffstat (limited to 'gdb/dwarf2loc.c')
-rw-r--r-- | gdb/dwarf2loc.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index cdbeb10acf4..3e7cdd60408 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); |