ld: Restore PR ld/15146 tests
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 4 Feb 2021 13:11:37 +0000 (05:11 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 4 Feb 2021 13:11:49 +0000 (05:11 -0800)
commit 7d409ac001cce916661d345bff01ed589991e762
Author: Alan Modra <amodra@gmail.com>
Date:   Thu Feb 4 13:56:34 2021 +1030

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

fixed PR ld/15146.  Restore PR ld/15146 tests.

PR ld/15146
* testsuite/ld-plugin/lto.exp: Run PR ld/15146 tests.
* testsuite/ld-plugin/pr15146.d: Restored.
* testsuite/ld-plugin/pr15146a.c: Likewise.
* testsuite/ld-plugin/pr15146b.c: Likewise.
* testsuite/ld-plugin/pr15146c.c: Likewise.
* testsuite/ld-plugin/pr15146d.c: Likewise.

ld/ChangeLog
ld/testsuite/ld-plugin/lto.exp
ld/testsuite/ld-plugin/pr15146.d [new file with mode: 0644]
ld/testsuite/ld-plugin/pr15146a.c [new file with mode: 0644]
ld/testsuite/ld-plugin/pr15146b.c [new file with mode: 0644]
ld/testsuite/ld-plugin/pr15146c.c [new file with mode: 0644]
ld/testsuite/ld-plugin/pr15146d.c [new file with mode: 0644]

index cf5217b6c70adea4531ceee4f47fe476672cede6..3cd2be0add534fef9ffd87c5d74db4f1d57f0ca9 100644 (file)
@@ -1,3 +1,13 @@
+2021-02-04  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/15146
+       * testsuite/ld-plugin/lto.exp: Run PR ld/15146 tests.
+       * testsuite/ld-plugin/pr15146.d: Restored.
+       * testsuite/ld-plugin/pr15146a.c: Likewise.
+       * testsuite/ld-plugin/pr15146b.c: Likewise.
+       * testsuite/ld-plugin/pr15146c.c: Likewise.
+       * testsuite/ld-plugin/pr15146d.c: Likewise.
+
 2021-02-04  Alan Modra  <amodra@gmail.com>
 
        * testsuite/ld-plugin/pr27311d.c: New test.
index c96617f9e9ec8d1cd7bf221a856f61cd5c4e9868..33e5c19a2304919d7b044af5fbd35cfe3094c2f3 100644 (file)
@@ -304,6 +304,21 @@ set lto_link_elf_tests [list \
   [list "PR ld/13244" \
    "-shared -O2 -fPIC -flto -fuse-linker-plugin -nostdlib" "-O2 -fno-early-inlining -flto" \
    {pr13244.c} {{"readelf" {-s --wide} "pr13244.d"}} "pr13244.so" "c"] \
+  [list "Build libpr15146a.a" \
+   "$plug_opt" "-flto -O2" \
+   {pr15146a.c} {} "lib15146a.a"] \
+  [list "Build pr15146b.so" \
+   "-shared" "-O2 -fpic" \
+   {pr15146b.c} {} "pr15146b.so" "c"] \
+  [list "Build pr15146c.so" \
+   "-shared -Wl,--no-as-needed tmpdir/pr15146b.so" "-O2 -fpic $no_lto" \
+   {pr15146c.c} {} "pr15146c.so" "c"] \
+  [list "PR ld/15146 (1)" \
+   "-O2 -flto -fuse-linker-plugin -Wl,-rpath-link,. -Wl,--no-copy-dt-needed-entries -Wl,--no-as-needed tmpdir/pr15146a.o tmpdir/pr15146c.so" "" \
+   {dummy.c} {{"readelf" {-d} "pr15146.d"}} "pr15146a.exe"] \
+  [list "Build libpr15146d.a" \
+   "$plug_opt" "-flto -O2" \
+   {pr15146d.c} {} "lib15146d.a"] \
   [list "Build libpr16746a.a" \
    "" "" \
    {pr16746a.c pr16746b.c} {} "lib15146a.a"] \
@@ -637,6 +652,13 @@ run_cc_link_tests $lto_compile_elf_tests
 # Restrict these to ELF targets that support shared libs and PIC.
 if { [is_elf_format] && [check_lto_shared_available] } {
     run_cc_link_tests $lto_link_elf_tests
+    set testname "PR ld/15146 (2)"
+    set exec_output [run_host_cmd "$CC" "-O2 -flto -fuse-linker-plugin -Wl,-rpath-link,. -Wl,--no-copy-dt-needed-entries -Wl,--no-as-needed tmpdir/pr15146d.o tmpdir/pr15146c.so"]
+    if { [ regexp "undefined reference to symbol '\\.?xxx'" $exec_output ] } {
+       pass $testname
+    } {
+       fail $testname
+    }
     set testname "PR ld/16746 (3)"
     set exec_output [run_host_cmd "$CC" "-O2 -flto -fuse-linker-plugin tmpdir/pr16746b.o tmpdir/pr16746d.o"]
     if { [ regexp "warning: \\.?foobar" $exec_output ] && ![ regexp "symbol from plugin" $exec_output ] } {
diff --git a/ld/testsuite/ld-plugin/pr15146.d b/ld/testsuite/ld-plugin/pr15146.d
new file mode 100644 (file)
index 0000000..48d4b85
--- /dev/null
@@ -0,0 +1,4 @@
+#failif
+#...
+ +0x[0-9a-f]+ +\(NEEDED\) +Shared library: +\[.*pr15146b.so\]
+#...
diff --git a/ld/testsuite/ld-plugin/pr15146a.c b/ld/testsuite/ld-plugin/pr15146a.c
new file mode 100644 (file)
index 0000000..d85fe97
--- /dev/null
@@ -0,0 +1,13 @@
+extern int xxx;
+
+int
+bar (void)
+{
+  return xxx;
+}
+
+int
+main ()
+{
+  return 0;
+}
diff --git a/ld/testsuite/ld-plugin/pr15146b.c b/ld/testsuite/ld-plugin/pr15146b.c
new file mode 100644 (file)
index 0000000..90eb21e
--- /dev/null
@@ -0,0 +1 @@
+int xxx = 3;
diff --git a/ld/testsuite/ld-plugin/pr15146c.c b/ld/testsuite/ld-plugin/pr15146c.c
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ld/testsuite/ld-plugin/pr15146d.c b/ld/testsuite/ld-plugin/pr15146d.c
new file mode 100644 (file)
index 0000000..3986ff6
--- /dev/null
@@ -0,0 +1,7 @@
+extern int xxx;
+
+int
+main ()
+{
+  return xxx;
+}