From 404956d0f6d2c7a881687f71eac1c8c28eb0db96 Mon Sep 17 00:00:00 2001 From: Kyle McMartin Date: Thu, 21 Aug 2014 22:14:57 -0400 Subject: [PATCH] bfd/elfnn-aarch64.c: use correct offsets in final_link_relocate Resolves: BZ #1126199 --- ...2.24-aarch64-fix-final_link_relocate.patch | 54 +++++++++++++++++++ binutils.spec | 8 ++- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 binutils-2.24-aarch64-fix-final_link_relocate.patch diff --git a/binutils-2.24-aarch64-fix-final_link_relocate.patch b/binutils-2.24-aarch64-fix-final_link_relocate.patch new file mode 100644 index 0000000..8c2d37b --- /dev/null +++ b/binutils-2.24-aarch64-fix-final_link_relocate.patch @@ -0,0 +1,54 @@ +commit f44a1f8e513b37bcc52ba9ea0c172c3e94852756 +Author: Christophe Lyon +Date: Tue Jan 14 15:53:50 2014 +0100 + + 2014-01-14 Michael Hudson-Doyle + Kugan Vivekanandarajah + + bfd/ + * 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/elfnn-aarch64.c ++++ b/bfd/elfnn-aarch64.c +@@ -3844,7 +3844,7 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, + + 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 = _bfd_aarch64_elf_resolve_relocation (bfd_r_type, place, value, + 0, weak_undef_p); +@@ -3873,10 +3873,9 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, + case BFD_RELOC_AARCH64_TLSDESC_LDR: + if (globals->root.sgot == NULL) + return bfd_reloc_notsupported; +- + 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 = _bfd_aarch64_elf_resolve_relocation (bfd_r_type, place, value, +@@ -6627,7 +6626,7 @@ elfNN_aarch64_create_small_pltn_entry (struct elf_link_hash_entry *h, + + plt_entry = plt->contents + h->plt.offset; + plt_entry_address = plt->output_section->vma +- + plt->output_section->output_offset + h->plt.offset; ++ + plt->output_offset + h->plt.offset; + gotplt_entry_address = gotplt->output_section->vma + + gotplt->output_offset + got_offset; + +@@ -6934,7 +6933,7 @@ elfNN_aarch64_init_small_plt0_entry (bfd *output_bfd ATTRIBUTE_UNUSED, + + GOT_ENTRY_SIZE * 2); + + 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 */ diff --git a/binutils.spec b/binutils.spec index 3d07e2e..b56aaf0 100644 --- a/binutils.spec +++ b/binutils.spec @@ -19,7 +19,7 @@ Summary: A GNU collection of binary utilities Name: %{?cross}binutils%{?_with_debug:-debug} Version: 2.24 -Release: 21%{?dist} +Release: 22%{?dist} License: GPLv3+ Group: Development/Tools URL: http://sources.redhat.com/binutils @@ -67,6 +67,7 @@ Patch22: binutils-2.24-symbol-warning.patch Patch23: binutils-2.24-aarch64-ld-shared-non-PIC-xfail.patch Patch24: binutils-2.24-weak-sym-merge.patch Patch25: binutils-2.24-indirect-chain.patch +Patch26: binutils-2.24-aarch64-fix-final_link_relocate.patch Provides: bundled(libiberty) @@ -196,6 +197,7 @@ using libelf instead of BFD. %patch23 -p1 -b .ld-aarch64-xfails~ %patch24 -p0 -b .weak-sym-merge~ %patch25 -p0 -b .indirect-chain~ +%patch26 -p1 -b .aa64-final-link~ # We cannot run autotools as there is an exact requirement of autoconf-2.59. @@ -509,6 +511,10 @@ exit 0 %endif # %{isnative} %changelog +* Thu Aug 21 2014 Kyle McMartin - 2.24-22 +- bfd/elfnn-aarch64.c: use correct offsets in final_link_relocate + Resolves: BZ #1126199 + * Thu Aug 21 2014 Nick Clifton - 2.24-21 - Import patch from mainline to fix indirect symbol resolution. Resolves: BZ #1123714