diff options
author | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2013-07-01 23:33:29 +0000 |
---|---|---|
committer | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2013-07-01 23:33:29 +0000 |
commit | 228e0afcfd0d5f167a95c6ddbec2c6a4a90b6d2b (patch) | |
tree | 495ce8f8ca372d6efb3347018fd8803b015ff810 /lib | |
parent | 74d2a3e1a014b93e9037a7b04e85dc92bfb54fa7 (diff) | |
download | llvm-228e0afcfd0d5f167a95c6ddbec2c6a4a90b6d2b.tar.gz llvm-228e0afcfd0d5f167a95c6ddbec2c6a4a90b6d2b.tar.bz2 llvm-228e0afcfd0d5f167a95c6ddbec2c6a4a90b6d2b.tar.xz |
[PowerPC] Add support for TLS data relocations
This adds support for TLS data relocations and modifiers:
.quad target@dtpmod
.quad target@tprel
.quad target@dtprel
Currently exploited by the asm parser only.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185394 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/MC/MCELFStreamer.cpp | 1 | ||||
-rw-r--r-- | lib/MC/MCExpr.cpp | 3 | ||||
-rw-r--r-- | lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp | 9 |
3 files changed, 13 insertions, 0 deletions
diff --git a/lib/MC/MCELFStreamer.cpp b/lib/MC/MCELFStreamer.cpp index 687ddfc18f..a89e8a6656 100644 --- a/lib/MC/MCELFStreamer.cpp +++ b/lib/MC/MCELFStreamer.cpp @@ -363,6 +363,7 @@ void MCELFStreamer::fixSymbolsInTLSFixups(const MCExpr *expr) { case MCSymbolRefExpr::VK_Mips_GOTTPREL: case MCSymbolRefExpr::VK_Mips_TPREL_HI: case MCSymbolRefExpr::VK_Mips_TPREL_LO: + case MCSymbolRefExpr::VK_PPC_DTPMOD: case MCSymbolRefExpr::VK_PPC_TPREL: case MCSymbolRefExpr::VK_PPC_TPREL_LO: case MCSymbolRefExpr::VK_PPC_TPREL_HI: diff --git a/lib/MC/MCExpr.cpp b/lib/MC/MCExpr.cpp index 0b0fb79728..c777e648bd 100644 --- a/lib/MC/MCExpr.cpp +++ b/lib/MC/MCExpr.cpp @@ -211,6 +211,7 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) { case VK_PPC_TOC_LO: return "toc@l"; case VK_PPC_TOC_HI: return "toc@h"; case VK_PPC_TOC_HA: return "toc@ha"; + case VK_PPC_DTPMOD: return "dtpmod"; case VK_PPC_TPREL: return "tprel"; case VK_PPC_TPREL_LO: return "tprel@l"; case VK_PPC_TPREL_HI: return "tprel@h"; @@ -342,6 +343,8 @@ MCSymbolRefExpr::getVariantKindForName(StringRef Name) { .Case("toc@ha", VK_PPC_TOC_HA) .Case("TLS", VK_PPC_TLS) .Case("tls", VK_PPC_TLS) + .Case("DTPMOD", VK_PPC_DTPMOD) + .Case("dtpmod", VK_PPC_DTPMOD) .Case("TPREL", VK_PPC_TPREL) .Case("tprel", VK_PPC_TPREL) .Case("TPREL@L", VK_PPC_TPREL_LO) diff --git a/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp b/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp index c26b5458d3..13cd0997b2 100644 --- a/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp +++ b/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp @@ -312,6 +312,15 @@ unsigned PPCELFObjectWriter::getRelocTypeInner(const MCValue &Target, case MCSymbolRefExpr::VK_None: Type = ELF::R_PPC64_ADDR64; break; + case MCSymbolRefExpr::VK_PPC_DTPMOD: + Type = ELF::R_PPC64_DTPMOD64; + break; + case MCSymbolRefExpr::VK_PPC_TPREL: + Type = ELF::R_PPC64_TPREL64; + break; + case MCSymbolRefExpr::VK_PPC_DTPREL: + Type = ELF::R_PPC64_DTPREL64; + break; } break; case FK_Data_4: |