diff options
author | Will Newton <will.newton@linaro.org> | 2013-11-25 11:07:07 +0000 |
---|---|---|
committer | Will Newton <will.newton@linaro.org> | 2013-11-26 15:24:54 +0000 |
commit | b1ee0cc48909c2116709038e6e1f2ffa7c3bd99c (patch) | |
tree | 1484096e5f4d20e7d2e6a81c858bfc6fba65d5f5 /ld/testsuite | |
parent | 158599681f7c57e4d233a3e14c2e01faeaae55aa (diff) | |
download | fsf-binutils-gdb-b1ee0cc48909c2116709038e6e1f2ffa7c3bd99c.zip fsf-binutils-gdb-b1ee0cc48909c2116709038e6e1f2ffa7c3bd99c.tar.gz fsf-binutils-gdb-b1ee0cc48909c2116709038e6e1f2ffa7c3bd99c.tar.bz2 |
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.
Diffstat (limited to 'ld/testsuite')
-rw-r--r-- | ld/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-aarch64/aarch64-elf.exp | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-aarch64/ifunc-21.d | 31 | ||||
-rw-r--r-- | ld/testsuite/ld-aarch64/ifunc-21.s | 13 |
4 files changed, 51 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 2200866..22a062d 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -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. diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index 5c150dd..a6b3ea2 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -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" diff --git a/ld/testsuite/ld-aarch64/ifunc-21.d b/ld/testsuite/ld-aarch64/ifunc-21.d new file mode 100644 index 0000000..fa139b2 --- /dev/null +++ b/ld/testsuite/ld-aarch64/ifunc-21.d @@ -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: + +.*: +.* +.* +.* diff --git a/ld/testsuite/ld-aarch64/ifunc-21.s b/ld/testsuite/ld-aarch64/ifunc-21.s new file mode 100644 index 0000000..a1563dc --- /dev/null +++ b/ld/testsuite/ld-aarch64/ifunc-21.s @@ -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 |