[PATCH] [readelf] Handle unknown name of main in .gdb_index section
Tom de Vries
tdevries@suse.de
Tue Oct 24 08:01:32 GMT 2023
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.
---
binutils/dwarf.c | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
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 (_("<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;
base-commit: 8bf3b48f72728208ad09989edfac9e010a62a703
--
2.35.3
More information about the Binutils
mailing list