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.
This commit is contained in:
H.J. Lu
2017-02-15 10:55:51 -08:00
parent f98d33be3a
commit a5def14f1c
8 changed files with 65 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2017-02-15 H.J. Lu <hongjiu.lu@intel.com>
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.
2017-02-15 Maciej W. Rozycki <macro@imgtec.com>
* elf32-ppc.c (ppc_elf_check_relocs): Use `%H:' rather than

View File

@ -4355,7 +4355,7 @@ r_386_got32:
const char *name;
disallow_got32:
if (h == NULL)
if (h == NULL || h->root.root.string == NULL)
name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
NULL);
else

View File

@ -1,3 +1,13 @@
2017-02-15 H.J. Lu <hongjiu.lu@intel.com>
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.
2017-02-15 Maciej W. Rozycki <macro@imgtec.com>
* ldmisc.c (vfinfo): Don't print the function name again either

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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