mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-12-04 02:02:22 +00: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:
parent
35fd2ddeb1
commit
9d734efa10
@ -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>
|
||||
|
||||
* 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. */
|
||||
if (h != NULL
|
||||
/* 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)
|
||||
{
|
||||
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;
|
||||
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>
|
||||
|
||||
* 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" \
|
||||
"-fPIC" \
|
||||
] \
|
||||
[list \
|
||||
"Run pr20800" \
|
||||
"-pie -z now" \
|
||||
"" \
|
||||
{ pr20800a.S pr20800b.S } \
|
||||
"pr20800" \
|
||||
"pass.out" \
|
||||
] \
|
||||
]
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user