aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2023-10-24 12:35:08 +0200
committerTom de Vries <tdevries@suse.de>2023-10-24 12:35:08 +0200
commit07a9e709114151550177c45dbdc04641dc547189 (patch)
tree7214d88cbfcb3f2d655614b6de5610840fa4c819 /binutils
parentf87cf663af71e5d78c8d647fa48562102f3b0615 (diff)
downloadgdb-07a9e709114151550177c45dbdc04641dc547189.zip
gdb-07a9e709114151550177c45dbdc04641dc547189.tar.gz
gdb-07a9e709114151550177c45dbdc04641dc547189.tar.bz2
[readelf] Handle unknown name of main in .gdb_index section
When compiling hello world and adding a v9 .gdb-index section: ... $ gcc -g hello.c $ gdb-add-index a.out ... readelf shows it as: ... Shortcut table: Language of main: unknown: 0 Name of main: ^A ... The documentation of gdb says about the "Name of main" that: ... This value must be ignored if the value for the language of main is zero. ... Implement this approach in display_gdb_index, such that we have instead: ... Shortcut table: Language of main: unknown: 0 Name of main: <unknown> ... Tested on x86_64-linux. Approved-By: Jan Beulich <jbeulich@suse.com>
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog4
-rw-r--r--binutils/dwarf.c19
2 files changed, 16 insertions, 7 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index ecd2154..5833ec0 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,7 @@
+2023-10-24 Tom de Vries <tdevries@suse.de>
+
+ * dwarf.c (display_gdb_index): Handle unknown name of main.
+
2023-10-10 Tom de Vries <tdevries@suse.de>
* dwarf.c (display_lang): New function, factored out of ...
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index 584c737..544ba6d 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -10949,16 +10949,21 @@ display_gdb_index (struct dwarf_section *section,
display_lang (lang);
printf ("\n");
- uint32_t name_offset = byte_get_little_endian (shortcut_table + 4, 4);
printf (_("Name of main: "));
- if (name_offset >= section->size - constant_pool_offset)
+ if (lang == 0)
+ printf (_("<unknown>\n"));
+ else
{
- printf (_("<corrupt offset: %x>\n"), name_offset);
- warn (_("Corrupt name offset of 0x%x found for name of main\n"),
- name_offset);
+ uint32_t name_offset = byte_get_little_endian (shortcut_table + 4, 4);
+ if (name_offset >= section->size - constant_pool_offset)
+ {
+ printf (_("<corrupt offset: %x>\n"), name_offset);
+ warn (_("Corrupt name offset of 0x%x found for name of main\n"),
+ name_offset);
+ }
+ else
+ printf ("%s\n", constant_pool + name_offset);
}
- else
- printf ("%s\n", constant_pool + name_offset);
}
return 1;