summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-04-09 20:32:33 +0000
committerDavide Italiano <davide@freebsd.org>2016-04-09 20:32:33 +0000
commit7aa47094b256fe718e36900cebbdf86c66abf0d5 (patch)
tree8ecd07cacb122a45f672c7c6028968d27f00526b /llvm
parent128b8e92c0395e7c23ce2777f8c8c743e7f857d7 (diff)
downloadbcm5719-llvm-7aa47094b256fe718e36900cebbdf86c66abf0d5.tar.gz
bcm5719-llvm-7aa47094b256fe718e36900cebbdf86c66abf0d5.zip
[MC] support TLSDESC and TLSCALL / GNU2 tls dialect
Differential Revision: http://reviews.llvm.org/D18885 llvm-svn: 265881
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp4
-rw-r--r--llvm/test/MC/ELF/relocation-tls.s26
2 files changed, 30 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
index f2e519aef3b..a020155e03d 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
@@ -154,6 +154,10 @@ static unsigned getRelocType64(MCContext &Ctx, SMLoc Loc,
case RT64_8:
llvm_unreachable("Unimplemented");
}
+ case MCSymbolRefExpr::VK_TLSCALL:
+ return ELF::R_X86_64_TLSDESC_CALL;
+ case MCSymbolRefExpr::VK_TLSDESC:
+ return ELF::R_X86_64_GOTPC32_TLSDESC;
case MCSymbolRefExpr::VK_TLSGD:
checkIs32(Ctx, Loc, Type);
return ELF::R_X86_64_TLSGD;
diff --git a/llvm/test/MC/ELF/relocation-tls.s b/llvm/test/MC/ELF/relocation-tls.s
new file mode 100644
index 00000000000..d0c375551cc
--- /dev/null
+++ b/llvm/test/MC/ELF/relocation-tls.s
@@ -0,0 +1,26 @@
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr | FileCheck %s
+
+// Test that we produce the correct relocation.
+
+ leaq _ZL3ccc@TLSDESC(%rip), %rax
+ call *_ZL3ccc@TLSCALL(%rax)
+ addq %fs:0, %rax
+
+// CHECK: Section {
+// CHECK: Index:
+// CHECK: Name: .rela.text
+// CHECK-NEXT: Type: SHT_RELA
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x0
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment: 8
+// CHECK-NEXT: EntrySize: 24
+// CHECK-NEXT: Relocations [
+// CHECK-NEXT: 0x3 R_X86_64_GOTPC32_TLSDESC _ZL3ccc 0xFFFFFFFFFFFFFFFC
+// CHECK-NEXT: 0x9 R_X86_64_TLSDESC_CALL _ZL3ccc 0x0
+// CHECK-NEXT: ]
+// CHECK-NEXT: }
OpenPOWER on IntegriCloud