aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-i386
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-02-15 10:55:51 -0800
committerH.J. Lu <hjl.tools@gmail.com>2017-02-15 11:11:40 -0800
commita5def14f1ca70e14d9433cb229c9369fa3051598 (patch)
treefb14176e5377b05dc9ac4bb6119f8095c868a2a4 /ld/testsuite/ld-i386
parentf98d33be3af3a8d788aaef37e8fef167b59c81b2 (diff)
Add a test for R_386_GOT32/R_386_GOT32X IFUNC reloc error
bfd/ PR ld/20244 * elf32-i386.c (elf_i386_relocate_section): Properly get IFUNC symbol name when reporting R_386_GOT32/R_386_GOT32X relocation error against local IFUNC symbol without a base register for PIC. ld/ PR ld/20244 * testsuite/ld-i386/i386.exp: Run pr20244-4a, pr20244-4b and pr20244-4c. * testsuite/ld-i386/pr20244-4.s: New file. * testsuite/ld-i386/pr20244-4a.d: Likewise. * testsuite/ld-i386/pr20244-4b.d: Likewise. * testsuite/ld-i386/pr20244-4c.d: Likewise.
Diffstat (limited to 'ld/testsuite/ld-i386')
-rw-r--r--ld/testsuite/ld-i386/i386.exp3
-rw-r--r--ld/testsuite/ld-i386/pr20244-4.s10
-rw-r--r--ld/testsuite/ld-i386/pr20244-4a.d18
-rw-r--r--ld/testsuite/ld-i386/pr20244-4b.d11
-rw-r--r--ld/testsuite/ld-i386/pr20244-4c.d4
5 files changed, 46 insertions, 0 deletions
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index 43cb3c56fb..7680ff5bc9 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -408,6 +408,9 @@ run_dump_test "pr20244-2a"
run_dump_test "pr20244-2b"
run_dump_test "pr20244-2c"
run_dump_test "pr20244-2d"
+run_dump_test "pr20244-4a"
+run_dump_test "pr20244-4b"
+run_dump_test "pr20244-4c"
run_dump_test "pr20253-3"
run_dump_test "pr20253-4a"
run_dump_test "pr20253-4b"
diff --git a/ld/testsuite/ld-i386/pr20244-4.s b/ld/testsuite/ld-i386/pr20244-4.s
new file mode 100644
index 0000000000..0197256e49
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr20244-4.s
@@ -0,0 +1,10 @@
+ .text
+ .globl _start
+ .type _start, @function
+_start:
+ mov ifunc@GOT, %eax
+ ret
+ .type ifunc, @gnu_indirect_function
+ifunc:
+ mov $0xbadbeef, %eax
+ ret
diff --git a/ld/testsuite/ld-i386/pr20244-4a.d b/ld/testsuite/ld-i386/pr20244-4a.d
new file mode 100644
index 0000000000..420d179a60
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr20244-4a.d
@@ -0,0 +1,18 @@
+#source: pr20244-4.s
+#as: --32
+#ld: -m elf_i386
+#objdump: -dw
+#notarget: i?86-*-nacl* x86_64-*-nacl*
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+804807c <_start>:
+ +[a-f0-9]+: 8b 05 8c 90 04 08 mov 0x804908c,%eax
+ +[a-f0-9]+: c3 ret
+
+0+8048083 <ifunc>:
+ +[a-f0-9]+: b8 ef be ad 0b mov \$0xbadbeef,%eax
+ +[a-f0-9]+: c3 ret
+#pass
diff --git a/ld/testsuite/ld-i386/pr20244-4b.d b/ld/testsuite/ld-i386/pr20244-4b.d
new file mode 100644
index 0000000000..16e524353a
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr20244-4b.d
@@ -0,0 +1,11 @@
+#source: pr20244-4.s
+#as: --32
+#ld: -m elf_i386
+#objdump: -s -j .got
+#notarget: i?86-*-nacl* x86_64-*-nacl*
+
+.*: +file format .*
+
+Contents of section .got:
+ 804908c 83800408 +.... +
+#pass
diff --git a/ld/testsuite/ld-i386/pr20244-4c.d b/ld/testsuite/ld-i386/pr20244-4c.d
new file mode 100644
index 0000000000..07b2b196fe
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr20244-4c.d
@@ -0,0 +1,4 @@
+#source: pr20244-4.s
+#as: --32
+#ld: -pie -m elf_i386
+#error: direct GOT relocation R_386_GOT32X against `ifunc' without base register can not be used when making a shared object