summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Target.cpp45
-rw-r--r--lld/ELF/Target.h22
2 files changed, 26 insertions, 41 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index b5173e4502d..5948568a4f0 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -153,8 +153,6 @@ private:
class PPCTargetInfo final : public TargetInfo {
public:
PPCTargetInfo();
- bool needsGot(uint32_t Type, const SymbolBody &S) const override;
- bool needsPlt(uint32_t Type, const SymbolBody &S) const override;
void relocateOne(uint8_t *Loc, uint8_t *BufEnd, uint32_t Type, uint64_t P,
uint64_t SA, uint64_t ZA = 0,
uint8_t *PairedLoc = nullptr) const override;
@@ -196,9 +194,7 @@ public:
class AMDGPUTargetInfo final : public TargetInfo {
public:
- AMDGPUTargetInfo();
- bool needsGot(uint32_t Type, const SymbolBody &S) const override;
- bool needsPlt(uint32_t Type, const SymbolBody &S) const override;
+ AMDGPUTargetInfo() {}
void relocateOne(uint8_t *Loc, uint8_t *BufEnd, uint32_t Type, uint64_t P,
uint64_t SA, uint64_t ZA = 0,
uint8_t *PairedLoc = nullptr) const override;
@@ -258,14 +254,31 @@ bool TargetInfo::needsCopyRel(uint32_t Type, const SymbolBody &S) const {
return false;
}
-bool TargetInfo::isGotRelative(uint32_t Type) const { return false; }
+bool TargetInfo::isTlsLocalDynamicRel(unsigned Type) const {
+ return Type == TlsLocalDynamicRel;
+}
-bool TargetInfo::isHintRel(uint32_t Type) const { return false; }
+bool TargetInfo::isTlsGlobalDynamicRel(unsigned Type) const {
+ return Type == TlsGlobalDynamicRel;
+}
-bool TargetInfo::isRelRelative(uint32_t Type) const { return true; }
+bool TargetInfo::isTlsDynRel(unsigned Type, const SymbolBody &S) const {
+ return false;
+}
+bool TargetInfo::isGotRelative(uint32_t Type) const { return false; }
+bool TargetInfo::isHintRel(uint32_t Type) const { return false; }
+bool TargetInfo::isRelRelative(uint32_t Type) const { return true; }
bool TargetInfo::isSizeRel(uint32_t Type) const { return false; }
+bool TargetInfo::needsGot(uint32_t Type, const SymbolBody &S) const {
+ return false;
+}
+
+bool TargetInfo::needsPlt(uint32_t Type, const SymbolBody &S) const {
+ return false;
+}
+
unsigned TargetInfo::relaxTls(uint8_t *Loc, uint8_t *BufEnd, uint32_t Type,
uint64_t P, uint64_t SA,
const SymbolBody *S) const {
@@ -908,12 +921,6 @@ static uint16_t applyPPCHighest(uint64_t V) { return V >> 48; }
static uint16_t applyPPCHighesta(uint64_t V) { return (V + 0x8000) >> 48; }
PPCTargetInfo::PPCTargetInfo() {}
-bool PPCTargetInfo::needsGot(uint32_t Type, const SymbolBody &S) const {
- return false;
-}
-bool PPCTargetInfo::needsPlt(uint32_t Type, const SymbolBody &S) const {
- return false;
-}
bool PPCTargetInfo::isRelRelative(uint32_t Type) const { return false; }
void PPCTargetInfo::relocateOne(uint8_t *Loc, uint8_t *BufEnd, uint32_t Type,
@@ -1374,16 +1381,6 @@ void AArch64TargetInfo::relocateOne(uint8_t *Loc, uint8_t *BufEnd,
}
}
-AMDGPUTargetInfo::AMDGPUTargetInfo() {}
-
-bool AMDGPUTargetInfo::needsGot(uint32_t Type, const SymbolBody &S) const {
- return false;
-}
-
-bool AMDGPUTargetInfo::needsPlt(uint32_t Type, const SymbolBody &S) const {
- return false;
-}
-
// Implementing relocations for AMDGPU is low priority since most
// programs don't use relocations now. Thus, this function is not
// actually called (relocateOne is called for each relocation).
diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h
index c000e5e4026..06f034a909d 100644
--- a/lld/ELF/Target.h
+++ b/lld/ELF/Target.h
@@ -22,23 +22,11 @@ class SymbolBody;
class TargetInfo {
public:
uint64_t getVAStart() const;
-
- bool isTlsLocalDynamicRel(unsigned Type) const {
- return Type == TlsLocalDynamicRel;
- }
-
- bool isTlsGlobalDynamicRel(unsigned Type) const {
- return Type == TlsGlobalDynamicRel;
- }
-
+ bool isTlsLocalDynamicRel(unsigned Type) const;
+ bool isTlsGlobalDynamicRel(unsigned Type) const;
virtual unsigned getDynRel(unsigned Type) const { return Type; }
-
- virtual bool isTlsDynRel(unsigned Type, const SymbolBody &S) const {
- return false;
- }
-
+ virtual bool isTlsDynRel(unsigned Type, const SymbolBody &S) const;
virtual unsigned getTlsGotRel(unsigned Type = -1) const { return TlsGotRel; }
-
virtual void writeGotHeader(uint8_t *Buf) const {}
virtual void writeGotPltHeader(uint8_t *Buf) const {}
virtual void writeGotPlt(uint8_t *Buf, uint64_t Plt) const {};
@@ -66,8 +54,8 @@ public:
virtual bool isSizeRel(uint32_t Type) const;
virtual bool needsDynRelative(unsigned Type) const { return false; }
- virtual bool needsGot(uint32_t Type, const SymbolBody &S) const = 0;
- virtual bool needsPlt(uint32_t Type, const SymbolBody &S) const = 0;
+ virtual bool needsGot(uint32_t Type, const SymbolBody &S) const;
+ virtual bool needsPlt(uint32_t Type, const SymbolBody &S) const;
virtual void relocateOne(uint8_t *Loc, uint8_t *BufEnd, uint32_t Type,
uint64_t P, uint64_t SA, uint64_t ZA = 0,
uint8_t *PairedLoc = nullptr) const = 0;
OpenPOWER on IntegriCloud