elf: Keep only one '@' for undefined versioned symbols
The symbol string table in the .symtab section is optional and cosmetic. Keep only one '@' for undefined versioned symbols, which are defined in shared objects, in the symbol string table. Update "nm -D" to display only one '@' for undefined versioned symbols. bfd/ PR ld/26382 * elflink.c (elf_link_output_symstrtab): Keep only one '@' for versioned symbols, which are defined in shared objects, in symbol string table. binutils/ PR ld/26382 * nm.c (print_symname): Display only one '@' for undefined versioned symbols. * doc/binutils.texi: Update nm version information. ld/ PR ld/26382 * testsuite/ld-elf/pr26302.nd: Updated. * testsuite/ld-elf/pr26302.rd: New file. * testsuite/ld-elf/shared.exp: Add a test for readelf -sW.
This commit is contained in:
parent
d19c3068ab
commit
3f2e969923
@ -1,3 +1,10 @@
|
||||
2020-08-22 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/26382
|
||||
* elflink.c (elf_link_output_symstrtab): Keep only one '@' for
|
||||
versioned symbols, which are defined in shared objects, in
|
||||
symbol string table.
|
||||
|
||||
2020-08-21 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* elfnn-aarch64.c (_bfd_aarch64_erratum_835769_scan): Only sort
|
||||
|
||||
@ -9642,9 +9642,29 @@ elf_link_output_symstrtab (struct elf_final_link_info *flinfo,
|
||||
{
|
||||
/* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
|
||||
to get the final offset for st_name. */
|
||||
char *versioned_name = (char *) name;
|
||||
if (h != NULL && h->versioned == versioned && h->def_dynamic)
|
||||
{
|
||||
/* Keep only one '@' for versioned symbols defined in shared
|
||||
objects. */
|
||||
char *version = strrchr (name, ELF_VER_CHR);
|
||||
char *base_end = strchr (name, ELF_VER_CHR);
|
||||
if (version != base_end)
|
||||
{
|
||||
size_t base_len;
|
||||
size_t len = strlen (name);
|
||||
versioned_name = bfd_alloc (flinfo->output_bfd, len);
|
||||
if (versioned_name == NULL)
|
||||
return 0;
|
||||
base_len = base_end - name;
|
||||
memcpy (versioned_name, name, base_len);
|
||||
memcpy (versioned_name + base_len, version,
|
||||
len - base_len);
|
||||
}
|
||||
}
|
||||
elfsym->st_name
|
||||
= (unsigned long) _bfd_elf_strtab_add (flinfo->symstrtab,
|
||||
name, FALSE);
|
||||
versioned_name, FALSE);
|
||||
if (elfsym->st_name == (unsigned long) -1)
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1,3 +1,10 @@
|
||||
2020-08-22 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/26382
|
||||
* nm.c (print_symname): Display only one '@' for undefined
|
||||
versioned symbols.
|
||||
* doc/binutils.texi: Update nm version information.
|
||||
|
||||
2020-08-21 Mark Wielaard <mark@klomp.org>
|
||||
|
||||
* testsuite/binutils-all/readelf.exp (readelf_wi_test): Also
|
||||
|
||||
@ -924,7 +924,13 @@ The symbol type is unknown, or object file format specific.
|
||||
@end table
|
||||
|
||||
@item
|
||||
The symbol name.
|
||||
The symbol name. If a symbol has version information associated with it,
|
||||
then the version information is displayed as well. If the versioned
|
||||
symbol is undefined or hidden from linker, the version string is displayed
|
||||
as a suffix to the symbol name, preceded by an @@ character. For example
|
||||
@samp{foo@@VER_1}. If the version is the default version to be used when
|
||||
resolving unversioned references to the symbol, then it is displayed as a
|
||||
suffix preceded by two @@ characters. For example @samp{foo@@@@VER_2}.
|
||||
@end itemize
|
||||
|
||||
@c man end
|
||||
|
||||
@ -421,7 +421,10 @@ print_symname (const char *form, struct extended_symbol_info *info,
|
||||
= bfd_get_symbol_version_string (abfd, &info->elfinfo->symbol,
|
||||
FALSE, &hidden);
|
||||
if (version_string && version_string[0])
|
||||
printf ("%s%s", hidden ? "@" : "@@", version_string);
|
||||
printf ("%s%s",
|
||||
(hidden || bfd_is_und_section (info->elfinfo->symbol.section)
|
||||
? "@" : "@@"),
|
||||
version_string);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,3 +1,10 @@
|
||||
2020-08-22 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/26382
|
||||
* testsuite/ld-elf/pr26302.nd: Updated.
|
||||
* testsuite/ld-elf/pr26302.rd: New file.
|
||||
* testsuite/ld-elf/shared.exp: Add a test for readelf -sW.
|
||||
|
||||
2020-08-20 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR 26428
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
#...
|
||||
+U foo@@FOO
|
||||
+U foo@FOO
|
||||
#pass
|
||||
|
||||
12
ld/testsuite/ld-elf/pr26302.rd
Normal file
12
ld/testsuite/ld-elf/pr26302.rd
Normal file
@ -0,0 +1,12 @@
|
||||
#...
|
||||
Symbol table '\.dynsym' contains [0-9]+ entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
#...
|
||||
+[0-9]+: +[a-f0-9]+ +0 +FUNC +GLOBAL +DEFAULT +UND +foo@FOO \([0-9]+\)
|
||||
#...
|
||||
|
||||
Symbol table '\.symtab' contains [0-9]+ entries:
|
||||
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||
#...
|
||||
+[0-9]+: +[a-f0-9]+ +0 +FUNC +GLOBAL +DEFAULT +UND +foo@FOO
|
||||
#pass
|
||||
@ -856,7 +856,8 @@ run_cc_link_tests [list \
|
||||
"-shared -Wl,--no-as-needed tmpdir/pr26302a.so" \
|
||||
"-fPIC" \
|
||||
{pr26302b.c} \
|
||||
{{nm {-u} pr26302.nd} \
|
||||
{{readelf {-sW} pr26302.rd} \
|
||||
{nm {-u} pr26302.nd} \
|
||||
{nm {-u -D} pr26302.nd} \
|
||||
{nm {-u -D --with-symbol-versions} pr26302.nd}} \
|
||||
"pr26302b.so" \
|
||||
|
||||
Loading…
Reference in New Issue
Block a user