]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Display entry offset for .debug_names
authorTom Tromey <tom@tromey.com>
Fri, 14 Feb 2025 00:47:23 +0000 (17:47 -0700)
committerTom Tromey <tom@tromey.com>
Tue, 4 Mar 2025 04:04:07 +0000 (21:04 -0700)
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: <0><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=<0x0>

Here you can see that DW_IDX_parent=0 refers to "circular1: <0>".

binutils/dwarf.c

index fcf32ec6703cc2db1edc438bbd0323304b37292a..08bb623e405876d2f4fcd53d6cd30bac8ebf1def 100644 (file)
@@ -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<%#" 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;