[binutils-gdb] x86-64: Add a test for hidden undefined symbol
H.J. Lu
hjl@sourceware.org
Fri Nov 1 21:31:15 GMT 2024
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=360f74a101937d1c26e5e0b341043bac6e2d299d
commit 360f74a101937d1c26e5e0b341043bac6e2d299d
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Sat Nov 2 05:19:35 2024 +0800
x86-64: Add a test for hidden undefined symbol
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>
Diff:
---
ld/testsuite/ld-x86-64/hidden6.d | 3 +++
ld/testsuite/ld-x86-64/hidden6.s | 7 +++++++
ld/testsuite/ld-x86-64/x86-64.exp | 1 +
3 files changed, 11 insertions(+)
diff --git a/ld/testsuite/ld-x86-64/hidden6.d b/ld/testsuite/ld-x86-64/hidden6.d
new file mode 100644
index 00000000000..c4c843bd346
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/hidden6.d
@@ -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
index 00000000000..807422bf52f
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/hidden6.s
@@ -0,0 +1,7 @@
+ .text
+.globl bar
+ .type bar, @function
+bar:
+ mov foo(%rip), %eax
+ .size bar, .-bar
+ .hidden foo
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index bd7574d6965..2a1657da6c7 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -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"
More information about the Binutils-cvs
mailing list