From: Marcus Shawcroft Date: Thu, 12 Nov 2015 15:15:28 +0000 (+0000) Subject: Revert "[LD][AARCH64]Add TLSIE relaxation support under large memory model." X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=06d2788cefa3dc24ce0e92e795cf3987a6c630ed;p=binutils-gdb.git Revert "[LD][AARCH64]Add TLSIE relaxation support under large memory model." This reverts commit 3ebe65c0ff9f8f76c9971b1cc078273298f0c693. Reverted due to PR19188 --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index bde71184f66..5fcaaef074a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -459,18 +459,6 @@ * config.bfd (targ_selvecs, targ64_selvecs): Add iamcu_elf32_vec, i386_pei_vec and x86_64_pei_vec for Solaris2/x86. -2015-10-02 Renlin Li - - * elfnn-aarch64.c (IS_AARCH64_TLS_RELAX_RELOC): Add - TLSIE_MOVW_GOTTPREL_G1. - (aarch64_tls_transition_without_check): Add - TLSIE_MOVW_GOTTPREL_G1 to TLSLE_MOVW_TPREL_G2 - transition for local symbol. - (elfNN_aarch64_tls_relax): Add a argument to pass tp offset. - Add TLSIE_MOVW_GOTTPREL_G1 relaxation. - (elfNN_aarch64_relocate_section): Call elfNN_aarch64_tls_relax - with new argument. - 2015-10-02 Renlin Li * elfnn-aarch64.c (aarch64_tls_transition_without_check): Add diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 5558bf70a4d..59c51cc42e0 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -228,7 +228,6 @@ || (R_TYPE) == BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 \ || (R_TYPE) == BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19 \ || (R_TYPE) == BFD_RELOC_AARCH64_TLSIE_LDNN_GOTTPREL_LO12_NC \ - || (R_TYPE) == BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1 \ || (R_TYPE) == BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC \ || (R_TYPE) == BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21 \ || (R_TYPE) == BFD_RELOC_AARCH64_TLSLD_ADR_PREL21) @@ -4494,11 +4493,6 @@ aarch64_tls_transition_without_check (bfd_reloc_code_real_type r_type, return is_local ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2 : BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1; - - case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: - return is_local - ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2 - : r_type; #endif default: @@ -5633,8 +5627,7 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, static bfd_reloc_status_type elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, bfd *input_bfd, bfd_byte *contents, - Elf_Internal_Rela *rel, struct elf_link_hash_entry *h, - bfd_vma relocation ATTRIBUTE_UNUSED) + Elf_Internal_Rela *rel, struct elf_link_hash_entry *h) { bfd_boolean is_local = h == NULL; unsigned int r_type = ELFNN_R_TYPE (rel->r_info); @@ -5800,47 +5793,6 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, case BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC: return bfd_reloc_continue; - - case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: - if (is_local) - { - /* Large IE->LE relaxation: - mrs tp, tpidr_el0 - movz tx, #:gottprel_g1:var => movz tx, #:tprel_g2:var, lsl #32 - movk tx, #:gottprel_g0_nc:var => movk tx, #:tprel_g1_nc:var, lsl #16 - ldr tx, [gp, tx] => movk tx, #:tprel_g0_nc:var - add tx, tx, tp - */ - uint32_t value; - BFD_ASSERT (ELFNN_R_TYPE (rel[1].r_info) - == AARCH64_R (TLSIE_MOVW_GOTTPREL_G0_NC)); - BFD_ASSERT (rel->r_offset + 4 == rel[1].r_offset); - - value = (relocation & ~(bfd_vma) 0xffffffff) >> 32; - insn = bfd_getl32 (contents + rel->r_offset); - insn &= 0xff80001f; - insn |= (0x400000 + (value << 5)); - bfd_putl32 (insn, contents + rel->r_offset + 0); - - value = (relocation & (bfd_vma) 0xffff0000) >> 16; - insn = bfd_getl32 (contents + rel->r_offset + 4); - insn &= 0xff80001f; - insn |= (0x200000 + (value << 5)); - bfd_putl32 (insn, contents + rel->r_offset + 4); - - value = relocation & (bfd_vma) 0xffff; - insn = bfd_getl32 (contents + rel->r_offset + 4); - insn &= 0xff80001f; - insn |= (value << 5); - bfd_putl32 (insn, contents + rel->r_offset + 8); - - /* Relocations are already resolved here. */ - rel->r_info = ELFNN_R_INFO (STN_UNDEF, R_AARCH64_NONE); - rel[1].r_info = ELFNN_R_INFO (STN_UNDEF, R_AARCH64_NONE); - return bfd_reloc_ok; - } - - return bfd_reloc_continue; #endif case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: @@ -6199,8 +6151,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, howto = elfNN_aarch64_howto_from_bfd_reloc (bfd_r_type); BFD_ASSERT (howto != NULL); r_type = howto->type; - r = elfNN_aarch64_tls_relax (globals, input_bfd, contents, rel, h, - relocation - tpoff_base (info)); + r = elfNN_aarch64_tls_relax (globals, input_bfd, contents, rel, h); unresolved_reloc = 0; } else diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index adb696f7e80..739f09f7622 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -267,12 +267,6 @@ * ld-elf/exclude.exp: Also check exclude_common. * ld-elf/exclude2.s: Add exclude_common. -2015-10-02 Renlin Li - - * ld-aarch64/aarch64-elf.exp (tls-relax-large-le-ie): Run new test. - * ld-aarch64/tls-relax-large-ie-le.d: New. - * ld-aarch64/tls-relax-large-ie-le.s: New. - 2015-10-02 Renlin Li * ld-aarch64/aarch64-elf.exp: Run new test. diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index 86d0394fe7b..0e5b31ea70b 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -194,7 +194,6 @@ run_dump_test "tls-relax-large-desc-ie" run_dump_test "tls-relax-large-desc-ie-be" run_dump_test "tls-relax-large-desc-le" run_dump_test "tls-relax-large-desc-le-be" -run_dump_test "tls-relax-large-ie-le" run_dump_test "tls-relax-gdesc-ie" run_dump_test "tls-relax-ie-le" run_dump_test "tls-relax-ld-le-small" diff --git a/ld/testsuite/ld-aarch64/tls-relax-large-ie-le.d b/ld/testsuite/ld-aarch64/tls-relax-large-ie-le.d deleted file mode 100644 index 6bf211bf5a7..00000000000 --- a/ld/testsuite/ld-aarch64/tls-relax-large-ie-le.d +++ /dev/null @@ -1,14 +0,0 @@ -#source: tls-relax-large-ie-le.s -#ld: -T relocs.ld -e0 -#objdump: -dr -#... -0000000000010000 : - +10000: d53bd041 mrs x1, tpidr_el0 - +10004: d2c00006 movz x6, #0x0, lsl #32 - +10008: f2a00006 movk x6, #0x0, lsl #16 - +1000c: f2800206 movk x6, #0x10 - +10010: 8b0100c6 add x6, x6, x1 - +10014: d2c00007 movz x7, #0x0, lsl #32 - +10018: f2a00007 movk x7, #0x0, lsl #16 - +1001c: f2800287 movk x7, #0x14 - +10020: 8b0100e7 add x7, x7, x1 diff --git a/ld/testsuite/ld-aarch64/tls-relax-large-ie-le.s b/ld/testsuite/ld-aarch64/tls-relax-large-ie-le.s deleted file mode 100644 index c5c12a1240a..00000000000 --- a/ld/testsuite/ld-aarch64/tls-relax-large-ie-le.s +++ /dev/null @@ -1,19 +0,0 @@ - .section .tdata,"awT" -x: - .word 2 -y: - .word 4 - - .text -test: - mrs x1, tpidr_el0 - - movz x6, #:gottprel_g1:x - movk x6, #:gottprel_g0_nc:x - ldr x6, [x2, x6] - add x6, x6, x1 - - movz x7, #:gottprel_g1:y - movk x7, #:gottprel_g0_nc:y - ldr x7, [x2, x7] - add x7, x7, x1