X86: Use R_X86_64_TPOFF64 for FK_Data_8
authorDavid Majnemer <david.majnemer@gmail.com>
Sun, 22 Sep 2013 05:30:16 +0000 (05:30 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Sun, 22 Sep 2013 05:30:16 +0000 (05:30 +0000)
Summary:
LLVM would crash when trying to come up with a relocation type for
assembly like:
movabsq $V@TPOFF, %rax

Instead, we say the relocation type is R_X86_64_TPOFF64.

Fixes PR17274.

Reviewers: dblaikie, nrieck, rafael

CC: llvm-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D1717

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191163 91177308-0d34-0410-b5e6-96231b3b80d8

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

index b400b87f30b3de2483c0c3e22431f01cf7fe5649..6a4bdeb133bdc247605dc25b578319f1a93bbcb2 100644 (file)
@@ -108,6 +108,9 @@ unsigned X86ELFObjectWriter::GetRelocType(const MCValue &Target,
         case MCSymbolRefExpr::VK_None:
           Type = ELF::R_X86_64_64;
           break;
+        case MCSymbolRefExpr::VK_TPOFF:
+          Type = ELF::R_X86_64_TPOFF64;
+          break;
         case MCSymbolRefExpr::VK_DTPOFF:
           Type = ELF::R_X86_64_DTPOFF64;
           break;
index d2c4f2e078129f4c11abd821e6c51903611e1e8f..ba50c8182fbca5b9b3f7781aede198b794fe9930 100644 (file)
@@ -19,6 +19,7 @@ bar:
         leaq    foo-bar(%r14),%r14
         addq   $bar,%rax         # R_X86_64_32S
        .quad   foo@DTPOFF
+        movabsq        $baz@TPOFF, %rax
 
 // CHECK:        Section {
 // CHECK:          Name: .rela.text
@@ -39,6 +40,7 @@ bar:
 // 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:       0x71 R_X86_64_TPOFF64  baz 0x0
 // CHECK-NEXT:     ]
 // CHECK-NEXT:   }