summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2013-06-28 04:24:32 +0000
committerDavid Blaikie <dblaikie@gmail.com>2013-06-28 04:24:32 +0000
commitc084c0945b0530180e8969f5e2017d02d06db130 (patch)
tree6c6a3f46c3a7726567a097639fd20a2647484c6a
parent8e7294f9953a98cfaae7e3bf5a6c852018cbcb83 (diff)
downloadllvm-c084c0945b0530180e8969f5e2017d02d06db130.tar.gz
llvm-c084c0945b0530180e8969f5e2017d02d06db130.tar.bz2
llvm-c084c0945b0530180e8969f5e2017d02d06db130.tar.xz
Integrate Assembler: Support X86_64_DTPOFF64 relocations
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185131 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp13
-rw-r--r--test/MC/ELF/relocation.s3
2 files changed, 14 insertions, 2 deletions
diff --git a/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp b/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
index de80dd835e..b400b87f30 100644
--- a/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
+++ b/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
@@ -101,7 +101,18 @@ unsigned X86ELFObjectWriter::GetRelocType(const MCValue &Target,
} else {
switch ((unsigned)Fixup.getKind()) {
default: llvm_unreachable("invalid fixup kind!");
- case FK_Data_8: Type = ELF::R_X86_64_64; break;
+ case FK_Data_8:
+ switch (Modifier) {
+ default:
+ llvm_unreachable("Unimplemented");
+ case MCSymbolRefExpr::VK_None:
+ Type = ELF::R_X86_64_64;
+ break;
+ case MCSymbolRefExpr::VK_DTPOFF:
+ Type = ELF::R_X86_64_DTPOFF64;
+ break;
+ }
+ break;
case X86::reloc_signed_4byte:
switch (Modifier) {
default:
diff --git a/test/MC/ELF/relocation.s b/test/MC/ELF/relocation.s
index 18d43dab76..d2c4f2e078 100644
--- a/test/MC/ELF/relocation.s
+++ b/test/MC/ELF/relocation.s
@@ -18,7 +18,7 @@ bar:
movq foo(%rip), %rdx
leaq foo-bar(%r14),%r14
addq $bar,%rax # R_X86_64_32S
-
+ .quad foo@DTPOFF
// CHECK: Section {
// CHECK: Name: .rela.text
@@ -38,6 +38,7 @@ bar:
// CHECK-NEXT: 0x55 R_X86_64_PC32 foo 0xFFFFFFFFFFFFFFFC
// CHECK-NEXT: 0x5C R_X86_64_PC32 foo 0x5C
// CHECK-NEXT: 0x63 R_X86_64_32S .text 0x0
+// CHECK-NEXT: 0x67 R_X86_64_DTPOFF64 foo 0x0
// CHECK-NEXT: ]
// CHECK-NEXT: }