Delete needsDynRelative.

It is now redundant. Writer.cpp can reason that 2 dynamic relocations
are needed: one to find the final got entry address and one to fill the
got entry.

llvm-svn: 266876
This commit is contained in:
Rafael Espindola 2016-04-20 14:36:24 +00:00
parent 16331f0aa0
commit 6eda85ac1f
3 changed files with 2 additions and 7 deletions

View File

@ -84,7 +84,6 @@ public:
int32_t Index, unsigned RelOff) const override;
bool isRelRelative(uint32_t Type) const override;
bool needsCopyRelImpl(uint32_t Type) const override;
bool needsDynRelative(uint32_t Type) const override;
bool needsPltImpl(uint32_t Type) const override;
void relocateOne(uint8_t *Loc, uint32_t Type, uint64_t Val) const override;
@ -510,10 +509,6 @@ void X86TargetInfo::relocateOne(uint8_t *Loc, uint32_t Type,
write32le(Loc, Val);
}
bool X86TargetInfo::needsDynRelative(uint32_t Type) const {
return Config->Shared && Type == R_386_TLS_IE;
}
void X86TargetInfo::relaxTlsGdToLe(uint8_t *Loc, uint32_t Type,
uint64_t Val) const {
// GD can be optimized to LE:
@ -1166,6 +1161,7 @@ bool AArch64TargetInfo::isRelRelative(uint32_t Type) const {
case R_AARCH64_TLSLE_ADD_TPREL_HI12:
case R_AARCH64_TLSLE_ADD_TPREL_LO12_NC:
case R_AARCH64_TSTBR14:
case R_AARCH64_LD64_GOT_LO12_NC:
return true;
}
}

View File

@ -55,7 +55,6 @@ public:
// dynamic linker if isRelRelative returns true.
virtual bool isRelRelative(uint32_t Type) const;
virtual bool needsDynRelative(uint32_t Type) const { return false; }
virtual bool refersToGotEntry(uint32_t Type) const;
enum PltNeed { Plt_No, Plt_Explicit, Plt_Implicit };

View File

@ -501,7 +501,7 @@ void Writer<ELFT>::scanRelocs(InputSectionBase<ELFT> &C, ArrayRef<RelTy> Rels) {
continue;
}
if (Target->needsDynRelative(Type))
if (Expr == R_GOT && !Target->isRelRelative(Type) && Config->Shared)
AddDyn({Target->RelativeRel, C.OutSec, Offset, true, &Body,
getAddend<ELFT>(RI)});