summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael J. Spencer <bigcheesegs@gmail.com>2015-11-11 01:27:58 +0000
committerMichael J. Spencer <bigcheesegs@gmail.com>2015-11-11 01:27:58 +0000
commita5d9d1f154b5eb8f11bcce69c951185acba76dbd (patch)
tree350c4eb7412c4a1128468185fa3f2a3f6f75e6e4
parent125e636b96394721e6a62725c20ac13c163711dc (diff)
downloadbcm5719-llvm-a5d9d1f154b5eb8f11bcce69c951185acba76dbd.tar.gz
bcm5719-llvm-a5d9d1f154b5eb8f11bcce69c951185acba76dbd.zip
[elf2][x86-64] Add support for DTPOFF32
llvm-svn: 252684
-rw-r--r--lld/ELF/Target.cpp4
-rw-r--r--lld/test/elf2/tls-dynamic.s8
2 files changed, 12 insertions, 0 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index 34e567052d5..f6fe7ea2f1e 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -322,6 +322,7 @@ bool X86_64TargetInfo::isRelRelative(uint32_t Type) const {
case R_X86_64_PC16:
case R_X86_64_PC8:
case R_X86_64_PLT32:
+ case R_X86_64_DTPOFF32:
return true;
}
}
@@ -346,6 +347,9 @@ void X86_64TargetInfo::relocateOne(uint8_t *Loc, uint8_t *BufEnd, uint32_t Type,
error("R_X86_64_32S out of range");
write32le(Loc, SA);
break;
+ case R_X86_64_DTPOFF32:
+ write32le(Loc, SA);
+ break;
case R_X86_64_TPOFF32: {
uint64_t Val = SA - Out<ELF64LE>::TlsPhdr->p_memsz;
if (!isInt<32>(Val))
diff --git a/lld/test/elf2/tls-dynamic.s b/lld/test/elf2/tls-dynamic.s
index 4cadfc69aa9..9074be5fdaa 100644
--- a/lld/test/elf2/tls-dynamic.s
+++ b/lld/test/elf2/tls-dynamic.s
@@ -8,14 +8,18 @@
callq __tls_get_addr@PLT
leaq b@tlsld(%rip), %rdi
callq __tls_get_addr@PLT
+ leaq a@dtpoff(%rax), %rcx
+ leaq b@dtpoff(%rax), %rcx
.global a
+ .hidden a
.section .tbss,"awT",@nobits
.align 4
a:
.long 0
.global b
+ .hidden b
.section .tbss,"awT",@nobits
.align 4
b:
@@ -40,9 +44,13 @@ b:
// CHECK-NEXT: }
// 4297 = (0x20D0 + -4) - (0x1000 + 3) // PC relative offset to got entry.
+// 4285 = (0x20D0 + -4) - (0x100c + 3) // PC relative offset to got entry.
// DIS: Disassembly of section .text:
// DIS-NEXT: .text:
// DIS-NEXT: 1000: {{.+}} leaq 4297(%rip), %rdi
// DIS-NEXT: 1007: {{.+}} callq
// DIS-NEXT: 100c: {{.+}} leaq 4285(%rip), %rdi
+// DIS-NEXT: 1013: {{.+}} callq
+// DIS-NEXT: 1018: {{.+}} leaq (%rax), %rcx
+// DIS-NEXT: 101f: {{.+}} leaq 4(%rax), %rcx
OpenPOWER on IntegriCloud