aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2loc.c
diff options
context:
space:
mode:
authorRandolph Chung <tausq@debian.org>2005-11-19 13:43:35 +0000
committerRandolph Chung <tausq@debian.org>2005-11-19 13:43:35 +0000
commit9c23835799161e27e2223564295f53c0a97d5689 (patch)
tree035fcbd2a7eabc98c0be3787a30b3af953ef8a23 /gdb/dwarf2loc.c
parent27b08a0cb4326dc559294bf0e0fd739719d091bf (diff)
downloadgdb-9c23835799161e27e2223564295f53c0a97d5689.zip
gdb-9c23835799161e27e2223564295f53c0a97d5689.tar.gz
gdb-9c23835799161e27e2223564295f53c0a97d5689.tar.bz2
2005-11-19 Randolph Chung <tausq@debian.org>
* dwarf2loc.c (dwarf2_tracepoint_var_ref): Remove extra add for DW_OP_fbreg. Handle DW_OP_breg0 through DW_OP_breg31. Print DWARF opcode for unsupported case.
Diffstat (limited to 'gdb/dwarf2loc.c')
-rw-r--r--gdb/dwarf2loc.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index 8a3e99f..1005fa7 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -477,13 +477,30 @@ dwarf2_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
ax_const_l (ax, frame_offset);
ax_simple (ax, aop_add);
- ax_const_l (ax, frame_offset);
+ value->kind = axs_lvalue_memory;
+ }
+ else if (data[0] >= DW_OP_breg0
+ && data[0] <= DW_OP_breg31)
+ {
+ unsigned int reg;
+ LONGEST offset;
+ gdb_byte *buf_end;
+
+ reg = data[0] - DW_OP_breg0;
+ buf_end = read_sleb128 (data + 1, data + size, &offset);
+ if (buf_end != data + size)
+ error (_("Unexpected opcode after DW_OP_breg%u for symbol \"%s\"."),
+ reg, SYMBOL_PRINT_NAME (symbol));
+
+ ax_reg (ax, reg);
+ ax_const_l (ax, offset);
ax_simple (ax, aop_add);
+
value->kind = axs_lvalue_memory;
}
else
- error (_("Unsupported DWARF opcode in the location of \"%s\"."),
- SYMBOL_PRINT_NAME (symbol));
+ error (_("Unsupported DWARF opcode 0x%x in the location of \"%s\"."),
+ data[0], SYMBOL_PRINT_NAME (symbol));
}
/* Return the value of SYMBOL in FRAME using the DWARF-2 expression