aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-elf/pr26391c.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2020-09-12 05:37:30 -0700
committerH.J. Lu <hjl.tools@gmail.com>2020-09-12 05:37:43 -0700
commit496afd17055aeb7d8f45e01715c475664f2b73bd (patch)
tree221e0db337f288cbced1e5e4189463c23733a1a1 /ld/testsuite/ld-elf/pr26391c.c
parente71774ed24cc6890285b174cb95caf79a7622466 (diff)
downloadgdb-496afd17055aeb7d8f45e01715c475664f2b73bd.zip
gdb-496afd17055aeb7d8f45e01715c475664f2b73bd.tar.gz
gdb-496afd17055aeb7d8f45e01715c475664f2b73bd.tar.bz2
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.
Diffstat (limited to 'ld/testsuite/ld-elf/pr26391c.c')
-rw-r--r--ld/testsuite/ld-elf/pr26391c.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/ld/testsuite/ld-elf/pr26391c.c b/ld/testsuite/ld-elf/pr26391c.c
new file mode 100644
index 0000000..e5bf1c1
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr26391c.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+
+static void
+bar (void)
+{
+ printf ("bar 2\n");
+}
+
+void *
+bar2_p (void)
+{
+ return bar;
+}