+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
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
+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
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"
--- /dev/null
+ .text
+ .globl _start
+ .type _start, @function
+_start:
+ mov ifunc@GOT, %eax
+ ret
+ .type ifunc, @gnu_indirect_function
+ifunc:
+ mov $0xbadbeef, %eax
+ ret
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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