Obsolete R_X86_64_GOTPLT64 and treat it the same as R_X86_64_GOT64.
bfd/
PR gas/17598
* elf64-x86-64.c (elf_x86_64_check_relocs): Treat
R_X86_64_GOTPLT64 the same as R_X86_64_GOT64.
(elf_x86_64_relocate_section): Likewise.
gas/
PR gas/17598
* config/tc-i386.c (reloc): Support BFD_RELOC_X86_64_GOTPLT64.
gas/testsuite/
PR gas/17598
* gas/i386/reloc64.s: Add @gotplt check.
* gas/i386/reloc64.d: Updated.
* gas/i386/reloc64.l: Likewise.
ld/testsuite/
PR gas/17598
* ld-x86-64/x86-64.exp: Run gotplt1.
* ld-x86-64/gotplt1.d: New file.
* ld-x86-64/gotplt1.s: Likewise.
+2014-11-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/17598
+ * elf64-x86-64.c (elf_x86_64_check_relocs): Treat
+ R_X86_64_GOTPLT64 the same as R_X86_64_GOT64.
+ (elf_x86_64_relocate_section): Likewise.
+
2014-11-13 Nick Clifton <nickc@redhat.com>
PR binutils/17512
if (h != NULL)
{
- if (r_type == R_X86_64_GOTPLT64)
- {
- /* This relocation indicates that we also need
- a PLT entry, as this is a function. We don't need
- a PLT entry for local symbols. */
- h->needs_plt = 1;
- h->plt.refcount += 1;
- }
h->got.refcount += 1;
old_tls_type = elf_x86_64_hash_entry (h)->tls_type;
}
case R_X86_64_GOTPLT64:
if (h != NULL)
{
- if (r_type == R_X86_64_GOTPLT64 && h->plt.refcount > 0)
- h->plt.refcount -= 1;
if (h->got.refcount > 0)
h->got.refcount -= 1;
if (h->type == STT_GNU_IFUNC)
case R_X86_64_GOTPCREL64:
/* Use global offset table entry as symbol value. */
case R_X86_64_GOTPLT64:
- /* This is the same as GOT64 for relocation purposes, but
- indicates the existence of a PLT entry. The difficulty is,
- that we must calculate the GOT slot offset from the PLT
- offset, if this symbol got a PLT entry (it was global).
- Additionally if it's computed from the PLT entry, then that
- GOT offset is relative to .got.plt, not to .got. */
+ /* This is obsolete and treated the the same as GOT64. */
base_got = htab->elf.sgot;
if (htab->elf.sgot == NULL)
+2014-11-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/17598
+ * config/tc-i386.c (reloc): Support BFD_RELOC_X86_64_GOTPLT64.
+
2014-11-13 Nick Clifton <nickc@redhat.com>
PR binutils/17512
case BFD_RELOC_X86_64_GOT32:
return BFD_RELOC_X86_64_GOT64;
break;
+ case BFD_RELOC_X86_64_GOTPLT64:
+ return BFD_RELOC_X86_64_GOTPLT64;
+ break;
case BFD_RELOC_X86_64_PLTOFF64:
return BFD_RELOC_X86_64_PLTOFF64;
break;
+2014-11-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/17598
+ * gas/i386/reloc64.s: Add @gotplt check.
+
+ * gas/i386/reloc64.d: Updated.
+ * gas/i386/reloc64.l: Likewise.
+
2014-11-07 H.J. Lu <hongjiu.lu@intel.com>
PR ld/17482
.*[ ]+R_X86_64_TPOFF32[ ]+xtrn
.*[ ]+R_X86_64_TPOFF32[ ]+xtrn
.*[ ]+R_X86_64_TPOFF32[ ]+xtrn
+.*[ ]+R_X86_64_GOTPLT64[ ]+xtrn
Disassembly of section \.data:
#...
.*[ ]+R_X86_64_64[ ]+xtrn
.*[ ]+R_X86_64_PC8[ ]+xtrn
.*[ ]+R_X86_64_GOT32[ ]+xtrn-0x4
.*[ ]+R_X86_64_GOT32[ ]+xtrn\+0x4
+.*[ ]+R_X86_64_GOTPLT64[ ]+xtrn
.*:195: Error: .*
.*:196: Error: .*
.*:197: Error: .*
+.*:208: Error: .*
+.*:209: Error: .*
+.*:210: Error: .*
+.*:211: Error: .*
+.*:212: Error: .*
+.*:213: Error: .*
+.*:214: Error: .*
+.*:218: Error: .*
+.*:219: Error: .*
+.*:220: Error: .*
.data
.long xtrn@got - 4
.long xtrn@got + 4
+
+ .text
+ movabs $xtrn@gotplt, %rax
+bad add $xtrn@gotplt, %rax
+bad mov $xtrn@gotplt, %eax
+bad mov $xtrn@gotplt, %ax
+bad mov $xtrn@gotplt, %al
+bad mov xtrn@gotplt(%rbx), %eax
+bad mov xtrn@gotplt(%ebx), %eax
+bad call xtrn@gotplt
+
+ .data
+ .quad xtrn@gotplt
+bad .long xtrn@gotplt
+bad .word xtrn@gotplt
+bad .byte xtrn@gotplt
+2014-11-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/17598
+ * ld-x86-64/x86-64.exp: Run gotplt1.
+
+ * ld-x86-64/gotplt1.d: New file.
+ * ld-x86-64/gotplt1.s: Likewise.
+
2014-11-11 Jiong Wang <jiong.wang@arm.com>
* lib/ld-lib.exp (run_ld_link_exec_tests): Append board_cflags if gcc
--- /dev/null
+#as: --64
+#ld: -shared -melf_x86_64
+#readelf: -r --wide
+
+#...
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_GLOB_DAT +[0-9a-f]+ +foo \+ 0
--- /dev/null
+ .globl _start
+ .type _start, @function
+_start:
+ movabsq $foo@GOTPLT, %rax
+ .size _start, .-_start
run_dump_test "pr12570b"
run_dump_test "pr14215"
run_dump_test "pr14207"
+run_dump_test "gotplt1"
if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
return