Simplify. NFC.

llvm-svn: 261668
This commit is contained in:
Rafael Espindola 2016-02-23 18:53:29 +00:00
parent 75baf09be5
commit f7ae359d2c
4 changed files with 16 additions and 22 deletions

View File

@ -218,7 +218,7 @@ void InputSectionBase<ELFT>::relocate(uint8_t *Buf, uint8_t *BufEnd,
SymVA = Body->getGotVA<ELFT>();
if (Body->IsTls)
Type = Target->getTlsGotRel(Type);
} else if (!Target->needsCopyRel(Type, *Body) &&
} else if (!Target->needsCopyRel<ELFT>(Type, *Body) &&
isa<SharedSymbol<ELFT>>(*Body)) {
continue;
} else if (Target->isTlsDynRel(Type, *Body)) {

View File

@ -275,25 +275,9 @@ template <typename ELFT> static bool mayNeedCopy(const SymbolBody &S) {
return SS->Sym.getType() == STT_OBJECT;
}
template <class ELFT>
bool TargetInfo::needsCopyRel(uint32_t Type, const SymbolBody &S) const {
bool MayNeed;
switch (Config->EKind) {
case ELF32LEKind:
MayNeed = mayNeedCopy<ELF32LE>(S);
break;
case ELF64LEKind:
MayNeed = mayNeedCopy<ELF64LE>(S);
break;
case ELF32BEKind:
MayNeed = mayNeedCopy<ELF32BE>(S);
break;
case ELF64BEKind:
MayNeed = mayNeedCopy<ELF64BE>(S);
break;
default:
llvm_unreachable("Invalid ELF kind");
}
return MayNeed && needsCopyRelImpl(Type);
return mayNeedCopy<ELFT>(S) && needsCopyRelImpl(Type);
}
bool TargetInfo::isTlsDynRel(unsigned Type, const SymbolBody &S) const {
@ -725,7 +709,7 @@ bool X86_64TargetInfo::isTlsDynRel(unsigned Type, const SymbolBody &S) const {
TargetInfo::PltNeed X86_64TargetInfo::needsPlt(uint32_t Type,
const SymbolBody &S) const {
if (needsCopyRel(Type, S))
if (needsCopyRel<ELF64LE>(Type, S))
return Plt_No;
if (isGnuIFunc<ELF64LE>(S))
return Plt_Explicit;
@ -1714,7 +1698,7 @@ bool MipsTargetInfo<ELFT>::needsGot(uint32_t Type, SymbolBody &S) const {
template <class ELFT>
TargetInfo::PltNeed MipsTargetInfo<ELFT>::needsPlt(uint32_t Type,
const SymbolBody &S) const {
if (needsCopyRel(Type, S))
if (needsCopyRel<ELFT>(Type, S))
return Plt_No;
if (Type == R_MIPS_26 && canBePreempted(&S, false))
return Plt_Explicit;
@ -1859,5 +1843,14 @@ template uint32_t getMipsGpAddr<ELF32LE>();
template uint32_t getMipsGpAddr<ELF32BE>();
template uint64_t getMipsGpAddr<ELF64LE>();
template uint64_t getMipsGpAddr<ELF64BE>();
template bool TargetInfo::needsCopyRel<ELF32LE>(uint32_t,
const SymbolBody &) const;
template bool TargetInfo::needsCopyRel<ELF32BE>(uint32_t,
const SymbolBody &) const;
template bool TargetInfo::needsCopyRel<ELF64LE>(uint32_t,
const SymbolBody &) const;
template bool TargetInfo::needsCopyRel<ELF64BE>(uint32_t,
const SymbolBody &) const;
}
}

View File

@ -63,6 +63,7 @@ public:
uint8_t *PairedLoc = nullptr) const = 0;
virtual bool isGotRelative(uint32_t Type) const;
virtual bool canRelaxTls(unsigned Type, const SymbolBody *S) const;
template <class ELFT>
bool needsCopyRel(uint32_t Type, const SymbolBody &S) const;
virtual unsigned relaxTls(uint8_t *Loc, uint8_t *BufEnd, uint32_t Type,
uint64_t P, uint64_t SA, const SymbolBody *S) const;

View File

@ -335,7 +335,7 @@ void Writer<ELFT>::scanRelocs(
if (auto *B = dyn_cast_or_null<SharedSymbol<ELFT>>(Body)) {
if (B->needsCopy())
continue;
if (Target->needsCopyRel(Type, *B)) {
if (Target->needsCopyRel<ELFT>(Type, *B)) {
B->NeedsCopyOrPltAddr = true;
Out<ELFT>::RelaDyn->addReloc(
{Target->CopyRel, DynamicReloc<ELFT>::Off_Bss, B});