Integrate Assembler: Support X86_64_DTPOFF64 relocations
authorDavid Blaikie <dblaikie@gmail.com>
Fri, 28 Jun 2013 04:24:32 +0000 (04:24 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Fri, 28 Jun 2013 04:24:32 +0000 (04:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185131 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
test/MC/ELF/relocation.s

index de80dd835e99bbdc28124517c2228da067cd6086..b400b87f30b3de2483c0c3e22431f01cf7fe5649 100644 (file)
@@ -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:
index 18d43dab7635e80f3185ce6ac3a286a661c814cf..d2c4f2e078129f4c11abd821e6c51903611e1e8f 100644 (file)
@@ -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:   }