aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorMarcus Shawcroft <marcus.shawcroft@arm.com>2015-11-12 15:15:28 +0000
committerMarcus Shawcroft <marcus.shawcroft@arm.com>2015-11-12 15:16:40 +0000
commit06d2788cefa3dc24ce0e92e795cf3987a6c630ed (patch)
tree8553c89dbd220ab78f765667f6bf900ea031b701 /bfd
parent9c352f1c234efabd0e60a0927ae3f25009e4932b (diff)
downloadgdb-06d2788cefa3dc24ce0e92e795cf3987a6c630ed.zip
gdb-06d2788cefa3dc24ce0e92e795cf3987a6c630ed.tar.gz
gdb-06d2788cefa3dc24ce0e92e795cf3987a6c630ed.tar.bz2
Revert "[LD][AARCH64]Add TLSIE relaxation support under large memory model."
This reverts commit 3ebe65c0ff9f8f76c9971b1cc078273298f0c693. Reverted due to PR19188
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog12
-rw-r--r--bfd/elfnn-aarch64.c53
2 files changed, 2 insertions, 63 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index bde7118..5fcaaef 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -461,18 +461,6 @@
2015-10-02 Renlin Li <renlin.li@arm.com>
- * 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 <renlin.li@arm.com>
-
* elfnn-aarch64.c (aarch64_tls_transition_without_check): Add
relax transitions for TLSDESC_ADD, TLSDESC_LDR, TLSDESC_OFF_G0_NC,
TLSDESC_OFF_G1.
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index 5558bf7..59c51cc 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