PR27311, (symbol from plugin): undefined reference, hidden sym

Message ID 20210204062027.GG5348@bubble.grove.modra.org
State New
Headers show
Series
  • PR27311, (symbol from plugin): undefined reference, hidden sym
Related show

Commit Message

Nick Clifton via Binutils Feb. 4, 2021, 6:20 a.m.
After LTO recompilation we more or less want to ignore IR symbols.

bfd/
	PR 27311
	* elflink.c (elf_link_add_object_symbols): Don't pull in as-needed
	libraries for IR references on pass over libraries after LTO
	recompilation.
ld/
	* testsuite/ld-plugin/pr27311d.c: New test.
	* testsuite/ld-plugin/lto.exp: Rename pr27311 to pr27311-1, compile
	and link new test as pr27311-2.


-- 
Alan Modra
Australia Development Lab, IBM

Patch

diff --git a/bfd/elflink.c b/bfd/elflink.c
index b8c29250a2c..291cec0df25 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -5279,6 +5279,7 @@  elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 		   && h->ref_regular_nonweak)
 		  || (old_bfd != NULL
 		      && (old_bfd->flags & BFD_PLUGIN) != 0
+		      && !info->lto_all_symbols_read
 		      && bind != STB_WEAK)
 		  || (h->ref_dynamic_nonweak
 		      && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
index 324adcd00ce..c96617f9e9e 100644
--- a/ld/testsuite/ld-plugin/lto.exp
+++ b/ld/testsuite/ld-plugin/lto.exp
@@ -424,9 +424,15 @@  set lto_link_elf_tests [list \
   [list {pr27311c.o} \
    {} {-flto} \
    {pr27311c.c} {} {} {c}] \
-  [list {pr27311} \
+  [list {pr27311d.o} \
+   {} {-flto} \
+   {pr27311d.c} {} {} {c}] \
+  [list {pr27311-1} \
    {tmpdir/pr27311c.o -Wl,--no-as-needed,--rpath-link=. tmpdir/pr27311b.so} {} \
-   {dummy.c} {{readelf {--dyn-syms --wide} pr27311.d}} {pr27311}] \
+   {dummy.c} {{readelf {--dyn-syms --wide} pr27311.d}} {pr27311-1}] \
+  [list {pr27311-2} \
+   {tmpdir/pr27311d.o -Wl,--no-as-needed,--rpath-link=. tmpdir/pr27311b.so} {} \
+   {dummy.c} {{readelf {--dyn-syms --wide} pr27311.d}} {pr27311-2}] \
 ]
 
 # PR 14918 checks that libgcc is not spuriously included in a shared link of
diff --git a/ld/testsuite/ld-plugin/pr27311d.c b/ld/testsuite/ld-plugin/pr27311d.c
new file mode 100644
index 00000000000..11e4ba4d6dd
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr27311d.c
@@ -0,0 +1,5 @@ 
+__attribute__((visibility("hidden"))) void inlib1(void) {}
+int main()
+{
+  return 0;
+}