summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Target.cpp6
-rw-r--r--lld/ELF/Target.h1
-rw-r--r--lld/ELF/Writer.cpp2
3 files changed, 2 insertions, 7 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index 48c5f6aa731..98c7a255a4c 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -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;
}
}
diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h
index 7b461ea21fc..b8e6ea32ba7 100644
--- a/lld/ELF/Target.h
+++ b/lld/ELF/Target.h
@@ -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 };
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 71b2664baac..9cbe4ff12e2 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -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)});
OpenPOWER on IntegriCloud