aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2loc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/dwarf2loc.c')
-rw-r--r--gdb/dwarf2loc.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index 4f4c0ca..4f3612e 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -116,11 +116,12 @@ static CORE_ADDR
dwarf_expr_read_reg (void *baton, int dwarf_regnum)
{
struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
+ struct gdbarch *gdbarch = get_frame_arch (debaton->frame);
CORE_ADDR result;
int regnum;
- regnum = gdbarch_dwarf2_reg_to_regnum (current_gdbarch, dwarf_regnum);
- result = address_from_register (builtin_type_void_data_ptr,
+ regnum = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_regnum);
+ result = address_from_register (builtin_type (gdbarch)->builtin_data_ptr,
regnum, debaton->frame);
return result;
}
@@ -459,11 +460,13 @@ locexpr_describe_location (struct symbol *symbol, struct ui_file *stream)
&& dlbaton->data[0] >= DW_OP_reg0
&& dlbaton->data[0] <= DW_OP_reg31)
{
- int regno = gdbarch_dwarf2_reg_to_regnum
- (current_gdbarch, dlbaton->data[0] - DW_OP_reg0);
+ struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu);
+ struct gdbarch *gdbarch = get_objfile_arch (objfile);
+ int regno = gdbarch_dwarf2_reg_to_regnum (gdbarch,
+ dlbaton->data[0] - DW_OP_reg0);
fprintf_filtered (stream,
"a variable in register %s",
- gdbarch_register_name (current_gdbarch, regno));
+ gdbarch_register_name (gdbarch, regno));
return 1;
}