[binutils-gdb] ELF: Hide symbols defined in discarded input sections
H.J.Lu
hjl@sourceware.org
Thu Oct 25 01:14:00 GMT 2018
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0a640d719684f25bdb88ae60148c6978e6131701
commit 0a640d719684f25bdb88ae60148c6978e6131701
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Wed Oct 24 18:08:13 2018 -0700
ELF: Hide symbols defined in discarded input sections
When assigning symbol version, we should hide debug symbols defined in
discarded sections from IR objects so that they can be removed later.
bfd/
PR ld/23818
* elflink.c (_bfd_elf_link_assign_sym_version): Hide symbols
defined in discarded input sections.
ld/
PR ld/23818
* testsuite/ld-plugin/lto.exp: Run PR ld/23818 test.
* testsuite/ld-plugin/pr23818.d: New file.
* testsuite/ld-plugin/pr23818.t: Likewise.
* testsuite/ld-plugin/pr23818a.c: Likewise.
* testsuite/ld-plugin/pr23818b.c: Likewise.
Diff:
---
bfd/ChangeLog | 6 ++++++
bfd/elflink.c | 12 ++++++++++--
ld/ChangeLog | 9 +++++++++
ld/testsuite/ld-plugin/lto.exp | 6 ++++++
ld/testsuite/ld-plugin/pr23818.d | 4 ++++
ld/testsuite/ld-plugin/pr23818.t | 4 ++++
ld/testsuite/ld-plugin/pr23818a.c | 4 ++++
ld/testsuite/ld-plugin/pr23818b.c | 7 +++++++
8 files changed, 50 insertions(+), 2 deletions(-)
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 7e9fb68..0959688 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2018-10-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/23818
+ * elflink.c (_bfd_elf_link_assign_sym_version): Hide symbols
+ defined in discarded input sections.
+
2018-10-24 Alan Modra <amodra@gmail.com>
* elf32-arm.c (elf32_arm_size_stubs): Ignore as-needed libs that
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 87440db..4eca389 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -2359,13 +2359,21 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
return FALSE;
}
+ bed = get_elf_backend_data (info->output_bfd);
+
/* We only need version numbers for symbols defined in regular
objects. */
if (!h->def_regular)
- return TRUE;
+ {
+ /* Hide symbols defined in discarded input sections. */
+ if ((h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && discarded_section (h->root.u.def.section))
+ (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+ return TRUE;
+ }
hide = FALSE;
- bed = get_elf_backend_data (info->output_bfd);
p = strchr (h->root.root.string, ELF_VER_CHR);
if (p != NULL && h->verinfo.vertree == NULL)
{
diff --git a/ld/ChangeLog b/ld/ChangeLog
index f0a373d..6026575 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,12 @@
+2018-10-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/23818
+ * testsuite/ld-plugin/lto.exp: Run PR ld/23818 test.
+ * testsuite/ld-plugin/pr23818.d: New file.
+ * testsuite/ld-plugin/pr23818.t: Likewise.
+ * testsuite/ld-plugin/pr23818a.c: Likewise.
+ * testsuite/ld-plugin/pr23818b.c: Likewise.
+
2018-10-23 Alan Modra <amodra@gmail.com>
* testsuite/ld-elf/shared.exp: Don't build pr19073 test on alpha.
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
index 18829fd..008bde7 100644
--- a/ld/testsuite/ld-plugin/lto.exp
+++ b/ld/testsuite/ld-plugin/lto.exp
@@ -219,6 +219,12 @@ set lto_link_tests [list \
[list "Build pr22751.a" \
"$plug_opt" "-flto $lto_no_fat $INT128_CFLAGS" \
{pr22751.c} {} "pr22751.a"] \
+ [list "Build libpr23818.so" \
+ "-shared -flto -g -Wl,-version-script,pr23818.t" \
+ "-g -flto $lto_fat" \
+ {pr23818a.c pr23818b.c} \
+ {{"readelf" {-s --wide} "pr23818.d"}} \
+ "libpr23818.so"] \
]
if { [at_least_gcc_version 4 7] } {
diff --git a/ld/testsuite/ld-plugin/pr23818.d b/ld/testsuite/ld-plugin/pr23818.d
new file mode 100644
index 0000000..5753cd6
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr23818.d
@@ -0,0 +1,4 @@
+#failif
+#...
+.*0+ +[A-Z]+ +GLOBAL +DEFAULT +ABS foo
+#...
diff --git a/ld/testsuite/ld-plugin/pr23818.t b/ld/testsuite/ld-plugin/pr23818.t
new file mode 100644
index 0000000..45bca55
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr23818.t
@@ -0,0 +1,4 @@
+{
+ global: bar;
+ local: *;
+};
diff --git a/ld/testsuite/ld-plugin/pr23818a.c b/ld/testsuite/ld-plugin/pr23818a.c
new file mode 100644
index 0000000..5b5ccbf
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr23818a.c
@@ -0,0 +1,4 @@
+void
+foo ()
+{
+}
diff --git a/ld/testsuite/ld-plugin/pr23818b.c b/ld/testsuite/ld-plugin/pr23818b.c
new file mode 100644
index 0000000..d4be333
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr23818b.c
@@ -0,0 +1,7 @@
+void foo (void);
+
+void
+bar (void)
+{
+ foo ();
+}
More information about the Binutils-cvs
mailing list