diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-02-23 18:53:29 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-02-23 18:53:29 +0000 |
commit | f7ae359d2c8ab309a1556a4365c52fab26281e3c (patch) | |
tree | 6e2b180c2fefd7deec1c4fbdcb004a33a94df8f2 | |
parent | 75baf09be5a4e9d8223fa18e1d28f130ba5460de (diff) | |
download | bcm5719-llvm-f7ae359d2c8ab309a1556a4365c52fab26281e3c.tar.gz bcm5719-llvm-f7ae359d2c8ab309a1556a4365c52fab26281e3c.zip |
Simplify. NFC.
llvm-svn: 261668
-rw-r--r-- | lld/ELF/InputSection.cpp | 2 | ||||
-rw-r--r-- | lld/ELF/Target.cpp | 33 | ||||
-rw-r--r-- | lld/ELF/Target.h | 1 | ||||
-rw-r--r-- | lld/ELF/Writer.cpp | 2 |
4 files changed, 16 insertions, 22 deletions
diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index 608607918ef..ad817801b03 100644 --- a/lld/ELF/InputSection.cpp +++ b/lld/ELF/InputSection.cpp @@ -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)) { diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index 1c5c57dd8ae..01baba91d44 100644 --- a/lld/ELF/Target.cpp +++ b/lld/ELF/Target.cpp @@ -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; } } diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h index 4af596cb346..92f3e2269eb 100644 --- a/lld/ELF/Target.h +++ b/lld/ELF/Target.h @@ -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; diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 52741b1cf46..ab844d368e1 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -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}); |