elf: Add -z unique-symbol to avoid duplicated local symbol names
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 12 Sep 2020 12:37:30 +0000 (05:37 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 12 Sep 2020 12:37:43 +0000 (05:37 -0700)
commit496afd17055aeb7d8f45e01715c475664f2b73bd
tree221e0db337f288cbced1e5e4189463c23733a1a1
parente71774ed24cc6890285b174cb95caf79a7622466
elf: Add -z unique-symbol to avoid duplicated local symbol names

The symbol string table in the .symtab section is optional and cosmetic.
The contents of the .symtab section have no impact on run-time execution.
The symbol names in the symbol string table help distinguish addresses at
different locations.  Add a linker option, -z unique-symbol, to avoid
duplicated local symbol names in the symbol string table.

This feature was well received by the livepatch maintainers.  It not only
solves the duplicated local symbol name problem, but also would allow
livepatch to more precisely locate duplicate symbols in general for
patching.

bfd/

PR ld/26391
* elflink.c (elf_final_link_info): Add local_hash_table.
(local_hash_entry): New.
(local_hash_newfunc): Likewise.
(elf_link_output_symstrtab): Append ".COUNT" to duplicated local
symbols.
(bfd_elf_final_link): Initialize and free local_hash_table for
"-z unique-symbol".

include/

PR ld/26391
* bfdlink.h (bfd_link_info): Add unique_symbol.

ld/

PR ld/26391
* NEWS: Mention "-z unique-symbol".
* emultempl/elf.em (gld${EMULATION_NAME}_handle_option): Handle
"-z unique-symbol" and "-z nounique-symbol".
* ld.texi: Document "-z unique-symbol" and "-z nounique-symbol".
* lexsup.c (elf_static_list_options): Add "-z unique-symbol" and
"-z nounique-symbol".
* testsuite/ld-elf/elf.exp: Add PR ld/26391 tests.
* testsuite/ld-elf/pr26391.nd: New file.
* testsuite/ld-elf/pr26391.out: Likewise.
* testsuite/ld-elf/pr26391a.c: Likewise.
* testsuite/ld-elf/pr26391b.c: Likewise.
* testsuite/ld-elf/pr26391c.c: Likewise.
* testsuite/ld-elf/pr26391d.c: Likewise.
16 files changed:
bfd/ChangeLog
bfd/elflink.c
include/ChangeLog
include/bfdlink.h
ld/ChangeLog
ld/NEWS
ld/emultempl/elf.em
ld/ld.texi
ld/lexsup.c
ld/testsuite/ld-elf/elf.exp
ld/testsuite/ld-elf/pr26391.nd [new file with mode: 0644]
ld/testsuite/ld-elf/pr26391.out [new file with mode: 0644]
ld/testsuite/ld-elf/pr26391a.c [new file with mode: 0644]
ld/testsuite/ld-elf/pr26391b.c [new file with mode: 0644]
ld/testsuite/ld-elf/pr26391c.c [new file with mode: 0644]
ld/testsuite/ld-elf/pr26391d.c [new file with mode: 0644]