PR27311, (symbol from plugin): undefined reference, hidden sym
authorAlan Modra <amodra@gmail.com>
Thu, 4 Feb 2021 03:26:34 +0000 (13:56 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 4 Feb 2021 03:39:51 +0000 (14:09 +1030)
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.

bfd/ChangeLog
bfd/elflink.c
ld/ChangeLog
ld/testsuite/ld-plugin/lto.exp
ld/testsuite/ld-plugin/pr27311d.c [new file with mode: 0644]

index 99987a26402a78f010dead298738a0599b12ff1b..d40aa5028b3e15311c7357e33ee796f8b24af9f4 100644 (file)
@@ -1,3 +1,10 @@
+2021-02-04  Alan Modra  <amodra@gmail.com>
+
+       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.
+
 2021-02-03  Alan Modra  <amodra@gmail.com>
 
        PR 27311
index b8c29250a2c41d0c20d79e93159d46245e4eda00..291cec0df25003966ebad260a72c50322c33bb34 100644 (file)
@@ -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
index e5f9beaabf0b5576b36392a723f63b9573ace99c..cf5217b6c70adea4531ceee4f47fe476672cede6 100644 (file)
@@ -1,3 +1,9 @@
+2021-02-04  Alan Modra  <amodra@gmail.com>
+
+       * 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.
+
 2021-02-03  Alan Modra  <amodra@gmail.com>
 
        * testsuite/ld-ifunc/ifunc.exp (libpr16467b.so, libpr16467bn.so):
index 324adcd00ceb4aa08aa8eb7c3861e174080f1db7..c96617f9e9ec8d1cd7bf221a856f61cd5c4e9868 100644 (file)
@@ -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 (file)
index 0000000..11e4ba4
--- /dev/null
@@ -0,0 +1,5 @@
+__attribute__((visibility("hidden"))) void inlib1(void) {}
+int main()
+{
+  return 0;
+}