diff options
author | Yufeng Zhang <yufeng.zhang@arm.com> | 2013-06-14 16:07:20 +0000 |
---|---|---|
committer | Yufeng Zhang <yufeng.zhang@arm.com> | 2013-06-14 16:07:20 +0000 |
commit | 2532064ada52626ab032fa0be568f2c27535c8b8 (patch) | |
tree | 19241e8814f4d129fffb9161c5688729ffff2a11 /bfd | |
parent | aa489d7c4a270e6f87f7111c40c3ff39d9ae9270 (diff) | |
download | gdb-2532064ada52626ab032fa0be568f2c27535c8b8.zip gdb-2532064ada52626ab032fa0be568f2c27535c8b8.tar.gz gdb-2532064ada52626ab032fa0be568f2c27535c8b8.tar.bz2 |
bfd/
* elf64-aarch64.c (elf64_aarch64_final_link_relocate): Call
aarch64_resolve_relocation and bfd_elf_aarch64_put_addend to
handle the relocations of R_AARCH64_JUMP26, R_AARCH64_CALL26,
R_AARCH64_LD64_GOT_LO12_NC, R_AARCH64_ADR_GOT_PAGE and
R_AARCH64_GOT_LD_PREL19.
ld/testsuite/
* ld-aarch64/aarch64-elf.exp: Add 'ifunc-7c'.
* ld-aarch64/ifunc-7c.d: New test.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elf64-aarch64.c | 15 |
2 files changed, 17 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3a3c8f8..8377b35 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2013-06-14 Yufeng Zhang <yufeng.zhang@arm.com> + + * elf64-aarch64.c (elf64_aarch64_final_link_relocate): Call + aarch64_resolve_relocation and bfd_elf_aarch64_put_addend to + handle the relocations of R_AARCH64_JUMP26, R_AARCH64_CALL26, + R_AARCH64_LD64_GOT_LO12_NC, R_AARCH64_ADR_GOT_PAGE and + R_AARCH64_GOT_LD_PREL19. + 2013-06-13 Terry Guo <terry.guo@arm.com> PR ld/15302 diff --git a/bfd/elf64-aarch64.c b/bfd/elf64-aarch64.c index 19e18b4..d6ecbb4 100644 --- a/bfd/elf64-aarch64.c +++ b/bfd/elf64-aarch64.c @@ -4010,12 +4010,16 @@ elf64_aarch64_final_link_relocate (reloc_howto_type *howto, internal symbol, we have updated addend. */ return bfd_reloc_ok; } - /* FALLTHROUGH */ - case R_AARCH64_JUMP26: - case R_AARCH64_CALL26: return _bfd_final_link_relocate (howto, input_bfd, input_section, contents, rel->r_offset, value, signed_addend); + + case R_AARCH64_JUMP26: + case R_AARCH64_CALL26: + value = aarch64_resolve_relocation (r_type, place, value, + signed_addend, weak_undef_p); + return bfd_elf_aarch64_put_addend (input_bfd, hit_data, howto, value); + case R_AARCH64_LD64_GOT_LO12_NC: case R_AARCH64_ADR_GOT_PAGE: case R_AARCH64_GOT_LD_PREL19: @@ -4079,9 +4083,8 @@ elf64_aarch64_final_link_relocate (reloc_howto_type *howto, unresolved_reloc_p); value = aarch64_resolve_relocation (r_type, place, value, 0, weak_undef_p); - return _bfd_final_link_relocate (howto, input_bfd, input_section, - contents, rel->r_offset, value, - signed_addend); + return bfd_elf_aarch64_put_addend (input_bfd, hit_data, howto, value); + case R_AARCH64_ADR_PREL_PG_HI21: case R_AARCH64_ADD_ABS_LO12_NC: break; |