Please use GitHub pull requests for new patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
ELF/Target.cpp
Show First 20 Lines • Show All 968 Lines • ▼ Show 20 Lines | case R_PPC_ADDR16_LO: | ||||
break; | break; | ||||
case R_PPC_ADDR32: | case R_PPC_ADDR32: | ||||
case R_PPC_REL32: | case R_PPC_REL32: | ||||
write32be(Loc, Val); | write32be(Loc, Val); | ||||
break; | break; | ||||
case R_PPC_REL24: | case R_PPC_REL24: | ||||
or32be(Loc, Val & 0x3FFFFFC); | or32be(Loc, Val & 0x3FFFFFC); | ||||
break; | break; | ||||
case R_PPC_EMB_SDA21: { | |||||
// SDA21 relocation entry is offset one byte into instruction | |||||
uint8_t *InstLoc = Loc - 1; | |||||
uint32_t Inst = read32be(InstLoc); | |||||
Inst &= ~0x1FFFFF; | |||||
Inst |= Val & 0x1FFFFF; | |||||
write32be(InstLoc, Inst); | |||||
break; | |||||
} | |||||
default: | default: | ||||
fatal("unrecognized reloc " + Twine(Type)); | fatal("unrecognized reloc " + Twine(Type)); | ||||
} | } | ||||
} | } | ||||
RelExpr PPCTargetInfo::getRelExpr(uint32_t Type, const SymbolBody &S) const { | RelExpr PPCTargetInfo::getRelExpr(uint32_t Type, const SymbolBody &S) const { | ||||
switch (Type) { | switch (Type) { | ||||
case R_PPC_REL24: | case R_PPC_REL24: | ||||
case R_PPC_REL32: | case R_PPC_REL32: | ||||
return R_PC; | return R_PC; | ||||
case R_PPC_EMB_SDA21: | |||||
return R_PPC_SDA; | |||||
default: | default: | ||||
return R_ABS; | return R_ABS; | ||||
} | } | ||||
} | } | ||||
PPC64TargetInfo::PPC64TargetInfo() { | PPC64TargetInfo::PPC64TargetInfo() { | ||||
PltRel = GotRel = R_PPC64_GLOB_DAT; | PltRel = GotRel = R_PPC64_GLOB_DAT; | ||||
RelativeRel = R_PPC64_RELATIVE; | RelativeRel = R_PPC64_RELATIVE; | ||||
▲ Show 20 Lines • Show All 1,270 Lines • Show Last 20 Lines |