mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
Display symbol version when dumping dynrelocs
Both readelf/objdump know how to get symbol version string for dynamic symbols. This patch extracts this functionality into a separate function and uses it to add symbol version string to versioned symbol names when dumping dynamic relocations. bfd/ PR binutils/16496 * elf-bfd.h (bfd_elf_get_symbol_version_string): New. * elf.c (bfd_elf_get_symbol_version_string): New. Extracted from bfd_elf_print_symbol. (bfd_elf_print_symbol): Use it. binutils/ PR binutils/16496 * objdump.c (objdump_print_symname): Call bfd_elf_get_symbol_version_string to get ELF symbol version string. Append version string if needed. * readelf.c (versioned_symbol_info): New enum. (get_symbol_version_string): New. Extracted from process_symbol_table. (dump_relocations): Add a new argument to indicate if dynamic symbol table is used. Use get_symbol_version_string to get symbol version string for dynamic symbol. Append version string if needed. (process_relocs): Updated dump_relocations call. (process_symbol_table): Use get_symbol_version_string. ld/testsuite/ PR binutils/16496 * ld-cris/weakref3.d: Add symbol version string to versioned symbol names in dynamic relocation. * ld-cris/weakref4.d: Likewise. * ld-elfvers/vers24.rd: Likewise. * ld-elf/pr16496a.c: New file. * ld-elf/pr16496a.map: Likewise. * ld-elf/pr16496b.c: Likewise. * ld-elf/pr16496b.od: Likewise. * ld-elf/shared.exp (build_tests): Add libpr16496a.so and libpr16496b.so tests.
This commit is contained in:
@ -795,7 +795,8 @@ objdump_print_symname (bfd *abfd, struct disassemble_info *inf,
|
||||
asymbol *sym)
|
||||
{
|
||||
char *alloc;
|
||||
const char *name;
|
||||
const char *name, *version_string = NULL;
|
||||
bfd_boolean hidden = FALSE;
|
||||
|
||||
alloc = NULL;
|
||||
name = bfd_asymbol_name (sym);
|
||||
@ -807,10 +808,26 @@ objdump_print_symname (bfd *abfd, struct disassemble_info *inf,
|
||||
name = alloc;
|
||||
}
|
||||
|
||||
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
|
||||
version_string = bfd_elf_get_symbol_version_string (abfd, sym,
|
||||
&hidden);
|
||||
|
||||
if (bfd_is_und_section (bfd_get_section (sym)))
|
||||
hidden = TRUE;
|
||||
|
||||
if (inf != NULL)
|
||||
(*inf->fprintf_func) (inf->stream, "%s", name);
|
||||
{
|
||||
(*inf->fprintf_func) (inf->stream, "%s", name);
|
||||
if (version_string && *version_string != '\0')
|
||||
(*inf->fprintf_func) (inf->stream, hidden ? "@%s" : "@@%s",
|
||||
version_string);
|
||||
}
|
||||
else
|
||||
printf ("%s", name);
|
||||
{
|
||||
printf ("%s", name);
|
||||
if (version_string && *version_string != '\0')
|
||||
printf (hidden ? "@%s" : "@@%s", version_string);
|
||||
}
|
||||
|
||||
if (alloc != NULL)
|
||||
free (alloc);
|
||||
|
Reference in New Issue
Block a user