aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp
index 77b0331bb14c..64e11dbc1efc 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCXCOFFObjectWriter.cpp
@@ -75,7 +75,18 @@ std::pair<uint8_t, uint8_t> PPCXCOFFObjectWriter::getRelocTypeAndSignSize(
// Branches are 4 byte aligned, so the 24 bits we encode in
// the instruction actually represents a 26 bit offset.
return {XCOFF::RelocationType::R_RBR, EncodedSignednessIndicator | 25};
+ case PPC::fixup_ppc_br24abs:
+ return {XCOFF::RelocationType::R_RBA, EncodedSignednessIndicator | 25};
case FK_Data_4:
- return {XCOFF::RelocationType::R_POS, EncodedSignednessIndicator | 31};
+ switch (Modifier) {
+ default:
+ report_fatal_error("Unsupported modifier");
+ case MCSymbolRefExpr::VK_PPC_AIX_TLSGD:
+ return {XCOFF::RelocationType::R_TLS, EncodedSignednessIndicator | 31};
+ case MCSymbolRefExpr::VK_PPC_AIX_TLSGDM:
+ return {XCOFF::RelocationType::R_TLSM, EncodedSignednessIndicator | 31};
+ case MCSymbolRefExpr::VK_None:
+ return {XCOFF::RelocationType::R_POS, EncodedSignednessIndicator | 31};
+ }
}
}