]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86-64: Add a test for hidden undefined symbol
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 1 Nov 2024 21:19:35 +0000 (05:19 +0800)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 1 Nov 2024 21:27:48 +0000 (05:27 +0800)
Linker should report an error for hidden undefined symbol when building
a shared library without the "recompile with -fPIC" message:

$ cat x.c
extern int foo __attribute__ ((visibility ("hidden")));

int
func (void)
{
  return foo;
}
$ gcc -c -fPIC -O2 x.c
$ objdump -dwr x.o

x.o:     file format elf64-x86-64

Disassembly of section .text:

0000000000000000 <func>:
   0: 8b 05 00 00 00 00     mov    0x0(%rip),%eax        # 6 <func+0x6> 2: R_X86_64_PC32 foo-0x4
   6: c3                    ret
$ ld -shared -o x.so x.o
ld: x.o: in function `func':
x.c:(.text+0x2): undefined reference to `foo'
ld: x.o: relocation R_X86_64_PC32 against undefined hidden symbol `foo' can not be used when making a shared object
ld: final link failed: bad value
$

since -fPIC has been used.

* testsuite/ld-x86-64/hidden6.d: New file.
* testsuite/ld-x86-64/hidden6.s: Likewise.
* testsuite/ld-x86-64/x86-64.exp: Run hidden6.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
ld/testsuite/ld-x86-64/hidden6.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/hidden6.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp

diff --git a/ld/testsuite/ld-x86-64/hidden6.d b/ld/testsuite/ld-x86-64/hidden6.d
new file mode 100644 (file)
index 0000000..c4c843b
--- /dev/null
@@ -0,0 +1,3 @@
+#as: --64
+#ld: -shared -melf_x86_64
+#error: .*relocation R_X86_64_PC32 against undefined hidden symbol `foo' can not be used when making a shared object
diff --git a/ld/testsuite/ld-x86-64/hidden6.s b/ld/testsuite/ld-x86-64/hidden6.s
new file mode 100644 (file)
index 0000000..807422b
--- /dev/null
@@ -0,0 +1,7 @@
+       .text
+.globl bar
+       .type   bar, @function
+bar:
+       mov     foo(%rip), %eax
+       .size   bar, .-bar
+       .hidden foo
index bd7574d6965850084bf902e4327d78a37905ed1f..2a1657da6c7fae8fa2e7695058c3c76a84ea2f27 100644 (file)
@@ -321,6 +321,7 @@ run_dump_test "hidden2"
 run_dump_test "hidden3"
 run_dump_test "hidden4"
 run_dump_test "hidden5"
+run_dump_test "hidden6"
 run_dump_test "protected1"
 run_dump_test "protected2"
 run_dump_test "protected3"