[PATCH] Display entry offset for .debug_names
Tom Tromey
tom@tromey.com
Thu Feb 20 18:36:39 GMT 2025
Since commit ad6dde5aaae ("gdb/dwarf: write offset to parent entry for
DW_IDX_parent"), gdb now emits a .debug_names where the DW_IDX_parent
attribute refers to the parent entry's offset -- previously, due to
some confusion in the standard, gdb used the index of the parent's
name table entry.
This patch changes the .debug_names display code to display each
entry's offset. This makes it easy to refer from a DW_IDX_parent to
the correct entry.
The new output looks like this:
[...]
Symbol table:
[ 1] circular1: <0x0><1> DW_TAG_module DW_IDX_compile_unit=1 DW_IDX_die_offset=<0x19> DW_IDX_GNU_language=19
[...]
[ 6] found: <0x28><2> DW_TAG_subprogram DW_IDX_compile_unit=1 DW_IDX_die_offset=<0x38> DW_IDX_GNU_language=19 DW_IDX_parent=0
Here you can see that DW_IDX_parent=0 refers to "circular1: <0x0>".
---
binutils/dwarf.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index fcf32ec6703..62fe919a41c 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -10828,6 +10828,7 @@ display_debug_names (struct dwarf_section *section, void *file)
uint64_t abbrev_tag;
uint64_t dwarf_tag;
const struct abbrev_lookup_entry *entry;
+ uint64_t this_entry = entryptr - entry_pool;
READ_ULEB (abbrev_tag, entryptr, unit_end);
if (tagno == -1)
@@ -10840,9 +10841,9 @@ display_debug_names (struct dwarf_section *section, void *file)
if (abbrev_tag == 0)
break;
if (tagno >= 0)
- printf ("%s<%" PRIu64 ">",
+ printf ("%s<0x%" PRIx64 "><%" PRIu64 ">",
(tagno == 0 && second_abbrev_tag == 0 ? " " : "\n\t"),
- abbrev_tag);
+ this_entry, abbrev_tag);
for (entry = abbrev_lookup;
entry < abbrev_lookup + abbrev_lookup_used;
--
2.46.1
More information about the Binutils
mailing list