[PATCH] D18026: [lld] [ELF/AArch64] Fix TLS IE to LE relax for local symbols
Adhemerval Zanella via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 10 18:55:39 PST 2016
zatrazz removed rL LLVM as the repository for this revision.
zatrazz updated this revision to Diff 50389.
zatrazz added a comment.
Fix format issues.
http://reviews.llvm.org/D18026
Files:
ELF/Target.cpp
test/ELF/aarch64-tls-iele.s
Index: test/ELF/aarch64-tls-iele.s
===================================================================
--- test/ELF/aarch64-tls-iele.s
+++ test/ELF/aarch64-tls-iele.s
@@ -5,17 +5,30 @@
# RUN: llvm-readobj -s -r %tout | FileCheck -check-prefix=RELOC %s
# REQUIRES: aarch64
-#Local-Dynamic to Initial-Exec relax creates no
-#RELOC: Relocations [
-#RELOC-NEXT: ]
+# Initial-Exec to Local-Exec relax creates no dynamic relocations.
+# RELOC: Relocations [
+# RELOC-NEXT: ]
# TCB size = 0x16 and foo is first element from TLS register.
-#CHECK: Disassembly of section .text:
-#CHECK: _start:
-#CHECK: 11000: 00 00 a0 d2 movz x0, #0, lsl #16
-#CHECK: 11004: 00 02 80 f2 movk x0, #0x10
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: _start:
+# CHECK-NEXT: 11000: 00 00 a0 d2 movz x0, #0, lsl #16
+# CHECK-NEXT: 11004: 80 02 80 f2 movk x0, #0x14
+# CHECK-NEXT: 11008: 00 00 a0 d2 movz x0, #0, lsl #16
+# CHECK-NEXT: 1100c: 00 02 80 f2 movk x0, #0x10
+
+
+.section .tdata
+.align 2
+.type foo_local, %object
+.size foo_local, 4
+foo_local:
+.word 5
+.text
.globl _start
_start:
adrp x0, :gottprel:foo
ldr x0, [x0, :gottprel_lo12:foo]
+ adrp x0, :gottprel:foo_local
+ ldr x0, [x0, :gottprel_lo12:foo_local]
Index: ELF/Target.cpp
===================================================================
--- ELF/Target.cpp
+++ ELF/Target.cpp
@@ -1364,9 +1364,8 @@
}
bool AArch64TargetInfo::needsGot(uint32_t Type, SymbolBody &S) const {
- if (Type == R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC ||
- Type == R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21)
- return true;
+ if (isTlsInitialExecRel(Type))
+ return canBePreempted(&S);
if (isTlsDescRel(Type, S))
return canBePreempted(&S);
return refersToGotEntry(Type) || needsPlt<ELF64LE>(Type, S);
@@ -1532,7 +1531,7 @@
return 0;
case R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21:
case R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC:
- relocateTlsIeToLe(Type, Loc, BufEnd, P, S->getVA<ELF64LE>());
+ relocateTlsIeToLe(Type, Loc, BufEnd, P, SA);
return 0;
}
llvm_unreachable("Unknown TLS optimization");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18026.50389.patch
Type: text/x-patch
Size: 2169 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160311/54cd3f4d/attachment.bin>
More information about the llvm-commits
mailing list