Backport of f44a1f8e513b37bcc52ba9ea0c172c3e94852756: 2014-01-14 Michael Hudson-Doyle Kugan Vivekanandarajah * elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Use correct offset while calculating relocation address. (elfNN_aarch64_create_small_pltn_entry): Likewise. (elfNN_aarch64_init_small_plt0_entry): Likewise. --- a/bfd/elf64-aarch64.c 2013-02-27 15:28:03.000000000 -0500 +++ b/bfd/elf64-aarch64.c 2014-03-13 13:47:08.003066253 -0400 @@ -4060,7 +4060,7 @@ value = (symbol_got_offset (input_bfd, h, r_symndx) + globals->root.sgot->output_section->vma - + globals->root.sgot->output_section->output_offset); + + globals->root.sgot->output_offset); value = aarch64_resolve_relocation (r_type, place, value, 0, weak_undef_p); @@ -4090,7 +4090,7 @@ value = (symbol_tlsdesc_got_offset (input_bfd, h, r_symndx) + globals->root.sgotplt->output_section->vma - + globals->root.sgotplt->output_section->output_offset + + globals->root.sgotplt->output_offset + globals->sgotplt_jump_table_size); value = aarch64_resolve_relocation (r_type, place, value, @@ -6454,7 +6454,7 @@ got_offset = (plt_index + 3) * GOT_ENTRY_SIZE; plt_entry = htab->root.splt->contents + h->plt.offset; plt_entry_address = htab->root.splt->output_section->vma - + htab->root.splt->output_section->output_offset + h->plt.offset; + + htab->root.splt->output_offset + h->plt.offset; gotplt_entry_address = htab->root.sgotplt->output_section->vma + htab->root.sgotplt->output_offset + got_offset; @@ -6676,7 +6676,7 @@ + htab->root.sgotplt->output_offset); plt_base = htab->root.splt->output_section->vma + - htab->root.splt->output_section->output_offset; + htab->root.splt->output_offset; /* Fill in the top 21 bits for this: ADRP x16, PLT_GOT + n * 8. ADRP: ((PG(S+A)-PG(P)) >> 12) & 0x1fffff */