aboutsummaryrefslogtreecommitdiff
path: root/bfd/elfnn-aarch64.c
diff options
context:
space:
mode:
authorWill Newton <will.newton@linaro.org>2013-11-25 11:07:07 +0000
committerWill Newton <will.newton@linaro.org>2013-11-26 15:24:54 +0000
commitb1ee0cc48909c2116709038e6e1f2ffa7c3bd99c (patch)
tree1484096e5f4d20e7d2e6a81c858bfc6fba65d5f5 /bfd/elfnn-aarch64.c
parent158599681f7c57e4d233a3e14c2e01faeaae55aa (diff)
downloadgdb-b1ee0cc48909c2116709038e6e1f2ffa7c3bd99c.zip
gdb-b1ee0cc48909c2116709038e6e1f2ffa7c3bd99c.tar.gz
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 'bfd/elfnn-aarch64.c')
-rw-r--r--bfd/elfnn-aarch64.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index 48fa3d2..7cce6f4 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -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;
}