From: Kai Nacke Date: Mon, 20 Jan 2014 11:00:40 +0000 (+0000) Subject: ARM: add tlsldo relocation X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=843fa74d3851e93abf5f534f9a98021282ab3dbd;p=oota-llvm.git ARM: add tlsldo relocation Add support for the symbol(tlsldo) relocation. This is required in order to solve PR18554. Reviewed by R. Golin, A. Korobeynikov. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199644 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/MC/MCExpr.h b/include/llvm/MC/MCExpr.h index 3052de112fa..f556d6237ff 100644 --- a/include/llvm/MC/MCExpr.h +++ b/include/llvm/MC/MCExpr.h @@ -165,6 +165,7 @@ public: VK_ARM_TARGET1, VK_ARM_TARGET2, VK_ARM_PREL31, + VK_ARM_TLSLDO, // symbol(tlsldo) VK_PPC_LO, // symbol@l VK_PPC_HI, // symbol@h diff --git a/lib/MC/MCExpr.cpp b/lib/MC/MCExpr.cpp index 69cdfa35440..2052d55dc7e 100644 --- a/lib/MC/MCExpr.cpp +++ b/lib/MC/MCExpr.cpp @@ -184,6 +184,7 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) { case VK_ARM_TARGET1: return "target1"; case VK_ARM_TARGET2: return "target2"; case VK_ARM_PREL31: return "prel31"; + case VK_ARM_TLSLDO: return "tlsldo"; case VK_PPC_LO: return "l"; case VK_PPC_HI: return "h"; case VK_PPC_HA: return "ha"; @@ -405,6 +406,8 @@ MCSymbolRefExpr::getVariantKindForName(StringRef Name) { .Case("target2", VK_ARM_TARGET2) .Case("PREL31", VK_ARM_PREL31) .Case("prel31", VK_ARM_PREL31) + .Case("TLSLDO", VK_ARM_TLSLDO) + .Case("tlsldo", VK_ARM_TLSLDO) .Default(VK_Invalid); } diff --git a/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp index 72ac6e22e8d..6fcc021a6c7 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp @@ -250,6 +250,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target, case MCSymbolRefExpr::VK_ARM_PREL31: Type = ELF::R_ARM_PREL31; break; + case MCSymbolRefExpr::VK_ARM_TLSLDO: + Type = ELF::R_ARM_TLS_LDO32; + break; } break; case ARM::fixup_arm_ldst_pcrel_12: diff --git a/test/MC/ARM/symbol-variants.s b/test/MC/ARM/symbol-variants.s index d24d5c790fb..1ab504cf655 100644 --- a/test/MC/ARM/symbol-variants.s +++ b/test/MC/ARM/symbol-variants.s @@ -65,3 +65,8 @@ bl f05(plt) @CHECK: 72 R_ARM_PREL31 f18 @CHECK: 76 R_ARM_PREL31 f19 +@ tlsldo +.word f20(TLSLDO) +.word f21(tlsldo) +@CHECK: 80 R_ARM_TLS_LDO32 f20 +@CHECK: 84 R_ARM_TLS_LDO32 f21