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:
Will Newton 2013-11-25 11:07:07 +00:00
parent 158599681f
commit b1ee0cc489
6 changed files with 58 additions and 1 deletions

View file

@ -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.

View file

@ -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;
}

View file

@ -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.

View file

@ -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"

View 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:
.*:
.*
.*
.*

View 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