diff options
author | Randolph Chung <tausq@debian.org> | 2005-11-19 13:43:35 +0000 |
---|---|---|
committer | Randolph Chung <tausq@debian.org> | 2005-11-19 13:43:35 +0000 |
commit | 9c23835799161e27e2223564295f53c0a97d5689 (patch) | |
tree | 035fcbd2a7eabc98c0be3787a30b3af953ef8a23 /gdb/dwarf2loc.c | |
parent | 27b08a0cb4326dc559294bf0e0fd739719d091bf (diff) | |
download | fsf-binutils-gdb-9c23835799161e27e2223564295f53c0a97d5689.zip fsf-binutils-gdb-9c23835799161e27e2223564295f53c0a97d5689.tar.gz fsf-binutils-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.c | 23 |
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 |