This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch] Fix `info addr' for complex DWARF
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Tue, 25 Jan 2011 18:06:02 +0100
- Subject: [patch] Fix `info addr' for complex DWARF
Hi,
readelf says:
<68> DW_AT_name : _s
<70> DW_AT_location : 2 byte block: 91 4c (DW_OP_fbreg: -52)
GDB HEAD says:
(gdb) info addr _s
Symbol "_s" is a complex DWARF expression:
1: DW_OP_fbreg 18446744073709551564
.
patched GDB HEAD sasys:
->
Symbol "_s" is a complex DWARF expression:
1: DW_OP_fbreg -52
.
No regressions on {x86_64,x86_64-m32,i686}-fedora14-linux-gnu.
I made only a brief overlook and fixed those sleb128 I found. I will check it
in in some time.
Thanks,
Jan
gdb/
2011-01-25 Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2loc.c (disassemble_dwarf_expression) <DW_OP_breg[0-9]+>: Use
L and plongest.
(disassemble_dwarf_expression) <DW_OP_bregx>: Drop variable offset,
use L and plongest.
(disassemble_dwarf_expression) <DW_OP_fbreg>: Use L and plongest.
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -2440,27 +2440,23 @@ disassemble_dwarf_expression (struct ui_file *stream,
case DW_OP_breg29:
case DW_OP_breg30:
case DW_OP_breg31:
- data = read_sleb128 (data, end, &ul);
- fprintf_filtered (stream, " %s [$%s]", pulongest (ul),
+ data = read_sleb128 (data, end, &l);
+ fprintf_filtered (stream, " %s [$%s]", plongest (l),
gdbarch_register_name (arch, op - DW_OP_breg0));
break;
case DW_OP_bregx:
- {
- ULONGEST offset;
-
- data = read_uleb128 (data, end, &ul);
- data = read_sleb128 (data, end, &offset);
- fprintf_filtered (stream, " register %s [$%s] offset %s",
- pulongest (ul),
- gdbarch_register_name (arch, (int) ul),
- pulongest (offset));
- }
+ data = read_uleb128 (data, end, &ul);
+ data = read_sleb128 (data, end, &l);
+ fprintf_filtered (stream, " register %s [$%s] offset %s",
+ pulongest (ul),
+ gdbarch_register_name (arch, (int) ul),
+ plongest (l));
break;
case DW_OP_fbreg:
- data = read_sleb128 (data, end, &ul);
- fprintf_filtered (stream, " %s", pulongest (ul));
+ data = read_sleb128 (data, end, &l);
+ fprintf_filtered (stream, " %s", plongest (l));
break;
case DW_OP_xderef_size: