Add a compile-time test for PR ld/22269
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 20 Oct 2017 16:47:08 +0000 (09:47 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 20 Oct 2017 16:47:08 +0000 (09:47 -0700)
This compile-time test requires a target C compiler to run.  It fails
on many targets where ELF backend linkers fail to check undefined weak
symbol in static PIE via UNDEFWEAK_NO_DYNAMIC_RELOC.

PR ld/22269
* testsuite/ld-elf/pr22269-1.rd: New file.
* testsuite/ld-elf/pr22269-1.c: Likewise.
* testsuite/ld-elf/shared.exp: Run pr22269-1.

ld/ChangeLog
ld/testsuite/ld-elf/pr22269-1.c [new file with mode: 0644]
ld/testsuite/ld-elf/pr22269-1.rd [new file with mode: 0644]
ld/testsuite/ld-elf/shared.exp

index 586420a..7cd9e7c 100644 (file)
@@ -1,3 +1,10 @@
+2017-10-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/22269
+       * testsuite/ld-elf/pr22269-1.rd: New file.
+       * testsuite/ld-elf/pr22269-1.c: Likewise.
+       * testsuite/ld-elf/shared.exp: Run pr22269-1.
+
 2017-10-19  Palmer Dabbelt  <palmer@dabbelt.com>
 
        * emultempl/riscvelf.em (riscv_elf_before_allocation): Add a
diff --git a/ld/testsuite/ld-elf/pr22269-1.c b/ld/testsuite/ld-elf/pr22269-1.c
new file mode 100644 (file)
index 0000000..8197687
--- /dev/null
@@ -0,0 +1,8 @@
+extern int foo __attribute ((weak));
+
+int
+_start (void)
+{
+  if (&foo)
+    return foo;
+}
diff --git a/ld/testsuite/ld-elf/pr22269-1.rd b/ld/testsuite/ld-elf/pr22269-1.rd
new file mode 100644 (file)
index 0000000..9df3c38
--- /dev/null
@@ -0,0 +1,5 @@
+# NONE relocs are not needed in a PIE.
+#failif
+#...
+[0-9a-f]+ +[0-9a-f]+ +R_.*_NONE.*
+#pass
index 6e091c9..640d324 100644 (file)
@@ -465,6 +465,19 @@ set build_tests {
 
 run_cc_link_tests $build_tests
 
+run_ld_link_tests [list \
+    [list \
+       "Build pr22269-1" \
+       "-pie -e _start --no-dynamic-linker -z text" \
+       "" \
+       "" \
+       { pr22269-1.c } \
+       {{readelf -rW pr22269-1.rd}} \
+       "pr22269-1" \
+       "-fPIE -O2" \
+    ] \
+]
+
 set run_tests [list \
     [list "Run normal with libfoo.so" \
      "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" "" \