mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 02:50:08 +08:00
Also check GOT PLT for R_X86_64_PLTOFF64
Since "-z now" replaces PLT with GOT PLT, we should also check GOT PLT for R_X86_64_PLTOFF64 relocation. bfd/ PR ld/20800 * elf64-x86-64.c (elf_x86_64_relocate_section): Also check plt_got.offset for R_X86_64_PLTOFF64. ld/ PR ld/20800 * testsuite/ld-x86-64/pr20800a.S: New file. * testsuite/ld-x86-64/pr20800b.S: Likewise. * testsuite/ld-x86-64/x86-64.exp: Run PR ld/20800 test.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2016-11-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/20800
|
||||||
|
* elf64-x86-64.c (elf_x86_64_relocate_section): Also check
|
||||||
|
plt_got.offset for R_X86_64_PLTOFF64.
|
||||||
|
|
||||||
2016-11-14 Nick Clifton <nickc@redhat.com>
|
2016-11-14 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* coffcode.h (coff_slurp_symbol_table): Fix typo: Faal -> Fall.
|
* coffcode.h (coff_slurp_symbol_table): Fix typo: Faal -> Fall.
|
||||||
|
@ -4693,10 +4693,17 @@ do_ifunc_pointer:
|
|||||||
symbols it's the symbol itself relative to GOT. */
|
symbols it's the symbol itself relative to GOT. */
|
||||||
if (h != NULL
|
if (h != NULL
|
||||||
/* See PLT32 handling. */
|
/* See PLT32 handling. */
|
||||||
&& h->plt.offset != (bfd_vma) -1
|
&& (h->plt.offset != (bfd_vma) -1
|
||||||
|
|| eh->plt_got.offset != (bfd_vma) -1)
|
||||||
&& htab->elf.splt != NULL)
|
&& htab->elf.splt != NULL)
|
||||||
{
|
{
|
||||||
if (htab->plt_bnd != NULL)
|
if (eh->plt_got.offset != (bfd_vma) -1)
|
||||||
|
{
|
||||||
|
/* Use the GOT PLT. */
|
||||||
|
resolved_plt = htab->plt_got;
|
||||||
|
plt_offset = eh->plt_got.offset;
|
||||||
|
}
|
||||||
|
else if (htab->plt_bnd != NULL)
|
||||||
{
|
{
|
||||||
resolved_plt = htab->plt_bnd;
|
resolved_plt = htab->plt_bnd;
|
||||||
plt_offset = eh->plt_bnd.offset;
|
plt_offset = eh->plt_bnd.offset;
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2016-11-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/20800
|
||||||
|
* testsuite/ld-x86-64/pr20800a.S: New file.
|
||||||
|
* testsuite/ld-x86-64/pr20800b.S: Likewise.
|
||||||
|
* testsuite/ld-x86-64/x86-64.exp: Run PR ld/20800 test.
|
||||||
|
|
||||||
2016-11-14 Nick Clifton <nickc@redhat.com>
|
2016-11-14 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* lexsup.c (parse_args): Add break at end of default case.
|
* lexsup.c (parse_args): Add break at end of default case.
|
||||||
|
17
ld/testsuite/ld-x86-64/pr20800a.S
Normal file
17
ld/testsuite/ld-x86-64/pr20800a.S
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
.text
|
||||||
|
.globl main
|
||||||
|
.type main, @function
|
||||||
|
main:
|
||||||
|
.L2:
|
||||||
|
leaq .L2(%rip), %rax
|
||||||
|
movabsq $_GLOBAL_OFFSET_TABLE_-.L2, %r11
|
||||||
|
movabsq $bar@PLTOFF, %rdx
|
||||||
|
pushq %r15
|
||||||
|
addq %r11, %rax
|
||||||
|
movq %rax, %r15
|
||||||
|
addq %rax, %rdx
|
||||||
|
call *%rdx
|
||||||
|
xorl %eax, %eax
|
||||||
|
popq %r15
|
||||||
|
ret
|
||||||
|
.size main, .-main
|
21
ld/testsuite/ld-x86-64/pr20800b.S
Normal file
21
ld/testsuite/ld-x86-64/pr20800b.S
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
.section .rodata.str1.1,"aMS",@progbits,1
|
||||||
|
.LC0:
|
||||||
|
.string "PASS\n"
|
||||||
|
.text
|
||||||
|
.globl bar
|
||||||
|
.type bar, @function
|
||||||
|
bar:
|
||||||
|
.L2:
|
||||||
|
leaq .L2(%rip), %rdx
|
||||||
|
movabsq $_GLOBAL_OFFSET_TABLE_-.L2, %r11
|
||||||
|
movabsq $.LC0@GOTOFF, %rax
|
||||||
|
pushq %r15
|
||||||
|
movabsq $printf@PLTOFF, %rcx
|
||||||
|
addq %r11, %rdx
|
||||||
|
popq %r15
|
||||||
|
leaq (%rdx,%rax), %rdi
|
||||||
|
addq %rdx, %rcx
|
||||||
|
xorl %eax, %eax
|
||||||
|
jmp *%rcx
|
||||||
|
.size bar, .-bar
|
||||||
|
.section .note.GNU-stack,"",@progbits
|
@ -991,6 +991,14 @@ if { [isnative] && [which $CC] != 0 } {
|
|||||||
"plt-main.out" \
|
"plt-main.out" \
|
||||||
"-fPIC" \
|
"-fPIC" \
|
||||||
] \
|
] \
|
||||||
|
[list \
|
||||||
|
"Run pr20800" \
|
||||||
|
"-pie -z now" \
|
||||||
|
"" \
|
||||||
|
{ pr20800a.S pr20800b.S } \
|
||||||
|
"pr20800" \
|
||||||
|
"pass.out" \
|
||||||
|
] \
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user