diff options
author | Eric Christopher <echristo@apple.com> | 2010-05-26 00:02:12 +0000 |
---|---|---|
committer | Eric Christopher <echristo@apple.com> | 2010-05-26 00:02:12 +0000 |
commit | 96ac5156cadde7e4494990d5b4f873e76787a370 (patch) | |
tree | a97ce8e51e5cd25d043907985b60f91f0dfca084 /lib/MC | |
parent | 76f0ad7bf5c05d6056b3bf335d0c3fb7e72de5d6 (diff) | |
download | external_llvm-96ac5156cadde7e4494990d5b4f873e76787a370.zip external_llvm-96ac5156cadde7e4494990d5b4f873e76787a370.tar.gz external_llvm-96ac5156cadde7e4494990d5b4f873e76787a370.tar.bz2 |
Start adding mach-o tls reloc support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104651 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC')
-rw-r--r-- | lib/MC/MCExpr.cpp | 2 | ||||
-rw-r--r-- | lib/MC/MachObjectWriter.cpp | 10 |
2 files changed, 10 insertions, 2 deletions
diff --git a/lib/MC/MCExpr.cpp b/lib/MC/MCExpr.cpp index 068ca81..c000dd7 100644 --- a/lib/MC/MCExpr.cpp +++ b/lib/MC/MCExpr.cpp @@ -177,6 +177,7 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) { case VK_TPOFF: return "TPOFF"; case VK_ARM_HI16: return ":upper16:"; case VK_ARM_LO16: return ":lower16:"; + case VK_TLVP: return "TLVP"; } } @@ -192,6 +193,7 @@ MCSymbolRefExpr::getVariantKindForName(StringRef Name) { .Case("PLT", VK_PLT) .Case("TLSGD", VK_TLSGD) .Case("TPOFF", VK_TPOFF) + .Case("TLVP", VK_TLVP) .Default(VK_Invalid); } diff --git a/lib/MC/MachObjectWriter.cpp b/lib/MC/MachObjectWriter.cpp index 9bcb93e..fc742e4 100644 --- a/lib/MC/MachObjectWriter.cpp +++ b/lib/MC/MachObjectWriter.cpp @@ -145,7 +145,8 @@ class MachObjectWriterImpl { RIT_Pair = 1, RIT_Difference = 2, RIT_PreboundLazyPointer = 3, - RIT_LocalDifference = 4 + RIT_LocalDifference = 4, + RIT_TLV = 5 }; /// X86_64 uses its own relocation types. @@ -158,7 +159,8 @@ class MachObjectWriterImpl { RIT_X86_64_Subtractor = 5, RIT_X86_64_Signed1 = 6, RIT_X86_64_Signed2 = 7, - RIT_X86_64_Signed4 = 8 + RIT_X86_64_Signed4 = 8, + RIT_X86_64_TLV = 9 }; /// MachSymbolData - Helper struct for containing some precomputed information @@ -610,6 +612,8 @@ public: Type = RIT_X86_64_GOT; } else if (Modifier != MCSymbolRefExpr::VK_None) { report_fatal_error("unsupported symbol modifier in relocation"); + } else if (Modifier == MCSymbolRefExpr::VK_TLVP) { + Type = RIT_X86_64_TLV; } else { Type = RIT_X86_64_Signed; @@ -650,6 +654,8 @@ public: // required to include any necessary offset directly. Type = RIT_X86_64_GOT; IsPCRel = 1; + } else if (Modifier == MCSymbolRefExpr::VK_TLVP) { + report_fatal_error("TLVP symbol modifier should have been rip-rel"); } else if (Modifier != MCSymbolRefExpr::VK_None) report_fatal_error("unsupported symbol modifier in relocation"); else |