Add (some) PowerPC TLS relocation types to ELF.h and

generate them from PPCELFObjectWriter::getRelocTypeInner
as appropriate.

llvm-svn: 167864
This commit is contained in:
Ulrich Weigand 2012-11-13 19:24:36 +00:00
parent ee889d3c11
commit ffd6f09918
2 changed files with 21 additions and 3 deletions

View File

@ -457,7 +457,9 @@ enum {
R_PPC_REL14 = 11,
R_PPC_REL14_BRTAKEN = 12,
R_PPC_REL14_BRNTAKEN = 13,
R_PPC_REL32 = 26
R_PPC_REL32 = 26,
R_PPC_TPREL16_LO = 70,
R_PPC_TPREL16_HA = 72
};
// ELF Relocation types for PPC64

View File

@ -74,10 +74,26 @@ unsigned PPCELFObjectWriter::getRelocTypeInner(const MCValue &Target,
Type = ELF::R_PPC_ADDR14; // XXX: or BRNTAKEN?_
break;
case PPC::fixup_ppc_ha16:
Type = ELF::R_PPC_ADDR16_HA;
switch (Modifier) {
default: llvm_unreachable("Unsupported Modifier");
case MCSymbolRefExpr::VK_PPC_TPREL16_HA:
Type = ELF::R_PPC_TPREL16_HA;
break;
case MCSymbolRefExpr::VK_None:
Type = ELF::R_PPC_ADDR16_HA;
break;
}
break;
case PPC::fixup_ppc_lo16:
Type = ELF::R_PPC_ADDR16_LO;
switch (Modifier) {
default: llvm_unreachable("Unsupported Modifier");
case MCSymbolRefExpr::VK_PPC_TPREL16_LO:
Type = ELF::R_PPC_TPREL16_LO;
break;
case MCSymbolRefExpr::VK_None:
Type = ELF::R_PPC_ADDR16_LO;
break;
}
break;
case PPC::fixup_ppc_lo14:
Type = ELF::R_PPC_ADDR14;