From 07a9e709114151550177c45dbdc04641dc547189 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 24 Oct 2023 12:35:08 +0200 Subject: [PATCH] [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: ... Tested on x86_64-linux. Approved-By: Jan Beulich --- binutils/ChangeLog | 4 ++++ binutils/dwarf.c | 19 ++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index ecd2154a685..5833ec048e9 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,7 @@ +2023-10-24 Tom de Vries + + * dwarf.c (display_gdb_index): Handle unknown name of main. + 2023-10-10 Tom de Vries * dwarf.c (display_lang): New function, factored out of ... diff --git a/binutils/dwarf.c b/binutils/dwarf.c index 584c737b9ec..544ba6dff50 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 (_("\n")); + else { - printf (_("\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 (_("\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; -- 2.30.2