bfd/elfnn-aarch64.c: Fix miscalculation of GOTPLT offset for ifunc syms.
The .got.plt header size was not being correctly taken into account when calculating the offset for relocations against ifunc symbols. bfd/ChangeLog: 2013-11-26 Will Newton <will.newton@linaro.org> * elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Ensure PLT_INDEX is calculated using correct header size. ld/testsuite/ChangeLog: 2013-11-26 Will Newton <will.newton@linaro.org> * ld-aarch64/aarch64-elf.exp: Add ifunc-21 test. * ld-aarch64/ifunc-21.d: New file. * ld-aarch64/ifunc-21.s: Likewise.
This commit is contained in:
parent
158599681f
commit
b1ee0cc489
6 changed files with 58 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2013-11-26 Will Newton <will.newton@linaro.org>
|
||||
|
||||
* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Ensure
|
||||
PLT_INDEX is calculated using correct header size.
|
||||
|
||||
2013-11-22 Cory Fields <cory@coryfields.com>
|
||||
|
||||
* libcoff-in.h: Add insert_timestamp flag to the pe_data struct.
|
||||
|
|
|
@ -3589,7 +3589,8 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto,
|
|||
|
||||
if (globals->root.splt != NULL)
|
||||
{
|
||||
plt_index = h->plt.offset / globals->plt_entry_size - 1;
|
||||
plt_index = ((h->plt.offset - globals->plt_header_size) /
|
||||
globals->plt_entry_size);
|
||||
off = (plt_index + 3) * GOT_ENTRY_SIZE;
|
||||
base_got = globals->root.sgotplt;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2013-11-26 Will Newton <will.newton@linaro.org>
|
||||
|
||||
* ld-aarch64/aarch64-elf.exp: Add ifunc-21 test.
|
||||
* ld-aarch64/ifunc-21.d: New file.
|
||||
* ld-aarch64/ifunc-21.s: Likewise.
|
||||
|
||||
2013-11-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* ld-x86-64/mpx.exp: Run bnd-branch-1.
|
||||
|
|
|
@ -155,3 +155,4 @@ run_dump_test "ifunc-18b"
|
|||
run_dump_test "ifunc-19a"
|
||||
run_dump_test "ifunc-19b"
|
||||
run_dump_test "ifunc-20"
|
||||
run_dump_test "ifunc-21"
|
||||
|
|
31
ld/testsuite/ld-aarch64/ifunc-21.d
Normal file
31
ld/testsuite/ld-aarch64/ifunc-21.d
Normal file
|
@ -0,0 +1,31 @@
|
|||
#source: ifunc-21.s
|
||||
#ld: -shared -z nocombreloc
|
||||
#objdump: -d -s -j .got.plt -j .text
|
||||
#target: aarch64*-*-*
|
||||
|
||||
# Ensure the .got.plt slot used is correct
|
||||
|
||||
.*: file format elf64-(little|big)aarch64
|
||||
|
||||
Contents of section .text:
|
||||
02a0 .*
|
||||
Contents of section .got.plt:
|
||||
103a8 0+ 0+ 0+ 0+ .*
|
||||
103b8 0+ 0+ [0-9a-f]+ 0+ .*
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
0+2a0 <ifunc>:
|
||||
2a0: d65f03c0 ret
|
||||
|
||||
0+2a4 <bar>:
|
||||
2a4: 90000080 adrp x0, 10000 <.*>
|
||||
2a8: f941e000 ldr x0, \[x0,#960\]
|
||||
2ac: d65f03c0 ret
|
||||
|
||||
Disassembly of section .got.plt:
|
||||
|
||||
.*:
|
||||
.*
|
||||
.*
|
||||
.*
|
13
ld/testsuite/ld-aarch64/ifunc-21.s
Normal file
13
ld/testsuite/ld-aarch64/ifunc-21.s
Normal file
|
@ -0,0 +1,13 @@
|
|||
.text
|
||||
.type ifunc, @gnu_indirect_function
|
||||
.hidden ifunc
|
||||
ifunc:
|
||||
ret
|
||||
.size ifunc, .-ifunc
|
||||
.type bar, @function
|
||||
.globl bar
|
||||
bar:
|
||||
adrp x0, :got:ifunc
|
||||
ldr x0, [x0, #:got_lo12:ifunc]
|
||||
ret
|
||||
.size bar, .-bar
|
Loading…
Reference in a new issue