diff options
28 files changed, 118 insertions, 139 deletions
diff --git a/lld/include/lld/ReaderWriter/ELFLinkingContext.h b/lld/include/lld/ReaderWriter/ELFLinkingContext.h index 76d196e4c0c..a90d472b8fd 100644 --- a/lld/include/lld/ReaderWriter/ELFLinkingContext.h +++ b/lld/include/lld/ReaderWriter/ELFLinkingContext.h @@ -55,7 +55,6 @@ public: class TargetHandler { public: virtual ~TargetHandler() {} - virtual void registerRelocationNames(Registry &) = 0; /// Determines how relocations need to be applied. virtual const elf::TargetRelocationHandler &getRelocationHandler() const = 0; @@ -173,6 +172,8 @@ public: return *_targetHandler; } + virtual void registerRelocationNames(Registry &) = 0; + void addPasses(PassManager &pm) override; void setTriple(llvm::Triple trip) { _triple = trip; } diff --git a/lld/include/lld/ReaderWriter/ELFTargets.h b/lld/include/lld/ReaderWriter/ELFTargets.h index 3d00339818e..144cd56d15f 100644 --- a/lld/include/lld/ReaderWriter/ELFTargets.h +++ b/lld/include/lld/ReaderWriter/ELFTargets.h @@ -16,7 +16,7 @@ namespace lld { namespace elf { #define LLVM_TARGET(TargetName) \ - class TargetName##LinkingContext final : public ELFLinkingContext { \ + class TargetName##LinkingContext : public ELFLinkingContext { \ public: \ static std::unique_ptr<ELFLinkingContext> create(llvm::Triple); \ }; diff --git a/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp b/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp index 060e4a72eba..ec0891a3284 100644 --- a/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp @@ -12,21 +12,34 @@ #include "AArch64TargetHandler.h" using namespace lld; +using namespace lld::elf; std::unique_ptr<ELFLinkingContext> -elf::AArch64LinkingContext::create(llvm::Triple triple) { +AArch64LinkingContext::create(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::aarch64) - return llvm::make_unique<elf::AArch64LinkingContext>(triple); + return llvm::make_unique<AArch64LinkingContext>(triple); return nullptr; } -elf::AArch64LinkingContext::AArch64LinkingContext(llvm::Triple triple) +AArch64LinkingContext::AArch64LinkingContext(llvm::Triple triple) : ELFLinkingContext(triple, std::unique_ptr<TargetHandler>( new AArch64TargetHandler(*this))) {} -void elf::AArch64LinkingContext::addPasses(PassManager &pm) { +void AArch64LinkingContext::addPasses(PassManager &pm) { auto pass = createAArch64RelocationPass(*this); if (pass) pm.add(std::move(pass)); ELFLinkingContext::addPasses(pm); } + +static const Registry::KindStrings kindStrings[] = { +#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), +#include "llvm/Support/ELFRelocs/AArch64.def" +#undef ELF_RELOC + LLD_KIND_STRING_END +}; + +void AArch64LinkingContext::registerRelocationNames(Registry ®istry) { + registry.addKindTable(Reference::KindNamespace::ELF, + Reference::KindArch::AArch64, kindStrings); +} diff --git a/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h b/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h index ebd91fe0a95..6733dc9087b 100644 --- a/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h @@ -28,6 +28,7 @@ public: AArch64LinkingContext(llvm::Triple); void addPasses(PassManager &) override; + void registerRelocationNames(Registry &r) override; uint64_t getBaseAddress() const override { if (_baseAddress == 0) diff --git a/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp b/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp index c1e88aa210d..06bdc6c66a9 100644 --- a/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp @@ -20,18 +20,6 @@ AArch64TargetHandler::AArch64TargetHandler(AArch64LinkingContext &ctx) : _ctx(ctx), _targetLayout(new TargetLayout<AArch64ELFType>(ctx)), _relocationHandler(new AArch64TargetRelocationHandler()) {} -static const Registry::KindStrings kindStrings[] = { -#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), -#include "llvm/Support/ELFRelocs/AArch64.def" -#undef ELF_RELOC - LLD_KIND_STRING_END -}; - -void AArch64TargetHandler::registerRelocationNames(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, - Reference::KindArch::AArch64, kindStrings); -} - std::unique_ptr<Writer> AArch64TargetHandler::getWriter() { switch (this->_ctx.getOutputELFType()) { case llvm::ELF::ET_EXEC: diff --git a/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h b/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h index ad8be3cdc16..07e4c8f393c 100644 --- a/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h @@ -24,8 +24,6 @@ class AArch64TargetHandler final : public TargetHandler { public: AArch64TargetHandler(AArch64LinkingContext &ctx); - void registerRelocationNames(Registry ®istry) override; - const AArch64TargetRelocationHandler &getRelocationHandler() const override { return *_relocationHandler; } diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp index c4116377d6c..083cd9851c0 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp @@ -11,39 +11,54 @@ #include "ARMRelocationPass.h" #include "ARMTargetHandler.h" -using namespace lld; -using namespace lld::elf; +namespace lld { +namespace elf { std::unique_ptr<ELFLinkingContext> -elf::ARMLinkingContext::create(llvm::Triple triple) { +ARMLinkingContext::create(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::arm) - return llvm::make_unique<elf::ARMLinkingContext>(triple); + return llvm::make_unique<ARMLinkingContext>(triple); return nullptr; } -elf::ARMLinkingContext::ARMLinkingContext(llvm::Triple triple) +ARMLinkingContext::ARMLinkingContext(llvm::Triple triple) : ELFLinkingContext(triple, llvm::make_unique<ARMTargetHandler>(*this)) {} -void elf::ARMLinkingContext::addPasses(PassManager &pm) { +void ARMLinkingContext::addPasses(PassManager &pm) { auto pass = createARMRelocationPass(*this); if (pass) pm.add(std::move(pass)); ELFLinkingContext::addPasses(pm); } -bool elf::isARMCode(const DefinedAtom *atom) { +bool isARMCode(const DefinedAtom *atom) { return isARMCode(atom->codeModel()); } -bool elf::isARMCode(DefinedAtom::CodeModel codeModel) { +bool isARMCode(DefinedAtom::CodeModel codeModel) { return !isThumbCode(codeModel); } -bool elf::isThumbCode(const DefinedAtom *atom) { +bool isThumbCode(const DefinedAtom *atom) { return isThumbCode(atom->codeModel()); } -bool elf::isThumbCode(DefinedAtom::CodeModel codeModel) { +bool isThumbCode(DefinedAtom::CodeModel codeModel) { return codeModel == DefinedAtom::codeARMThumb || codeModel == DefinedAtom::codeARM_t; } + +static const Registry::KindStrings kindStrings[] = { +#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), +#include "llvm/Support/ELFRelocs/ARM.def" +#undef ELF_RELOC + LLD_KIND_STRING_END +}; + +void ARMLinkingContext::registerRelocationNames(Registry ®istry) { + registry.addKindTable(Reference::KindNamespace::ELF, Reference::KindArch::ARM, + kindStrings); +} + +} // namespace elf +} // namespace lld diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.h b/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.h index 940a68b56c8..764f960272b 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.h @@ -22,9 +22,10 @@ public: static std::unique_ptr<ELFLinkingContext> create(llvm::Triple); ARMLinkingContext(llvm::Triple); - bool isRelaOutputFormat() const override { return false; } - void addPasses(PassManager &) override; + void registerRelocationNames(Registry &r) override; + + bool isRelaOutputFormat() const override { return false; } uint64_t getBaseAddress() const override { if (_baseAddress == 0) diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp index eea4d0c6114..67da2513c2a 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp @@ -19,18 +19,6 @@ ARMTargetHandler::ARMTargetHandler(ARMLinkingContext &ctx) : _ctx(ctx), _targetLayout(new ARMTargetLayout<ARMELFType>(ctx)), _relocationHandler(new ARMTargetRelocationHandler(*_targetLayout)) {} -static const Registry::KindStrings kindStrings[] = { -#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), -#include "llvm/Support/ELFRelocs/ARM.def" -#undef ELF_RELOC - LLD_KIND_STRING_END -}; - -void ARMTargetHandler::registerRelocationNames(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, Reference::KindArch::ARM, - kindStrings); -} - std::unique_ptr<Writer> ARMTargetHandler::getWriter() { switch (this->_ctx.getOutputELFType()) { case llvm::ELF::ET_EXEC: diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h index c8f42db49fa..552883ae922 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h @@ -61,8 +61,6 @@ class ARMTargetHandler final : public TargetHandler { public: ARMTargetHandler(ARMLinkingContext &ctx); - void registerRelocationNames(Registry ®istry) override; - const ARMTargetRelocationHandler &getRelocationHandler() const override { return *_relocationHandler; } diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp index d0104d27bce..d92803c9f34 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp @@ -10,6 +10,7 @@ #include "HexagonLinkingContext.h" #include "HexagonTargetHandler.h" +using namespace lld; using namespace lld::elf; std::unique_ptr<lld::ELFLinkingContext> @@ -22,3 +23,15 @@ HexagonLinkingContext::create(llvm::Triple triple) { HexagonLinkingContext::HexagonLinkingContext(llvm::Triple triple) : ELFLinkingContext(triple, std::unique_ptr<TargetHandler>( new HexagonTargetHandler(*this))) {} + +static const Registry::KindStrings kindStrings[] = { +#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), +#include "llvm/Support/ELFRelocs/Hexagon.def" +#undef ELF_RELOC + LLD_KIND_STRING_END +}; + +void HexagonLinkingContext::registerRelocationNames(Registry ®istry) { + registry.addKindTable(Reference::KindNamespace::ELF, + Reference::KindArch::Hexagon, kindStrings); +} diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h index e727a839b40..829520e128d 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h @@ -26,6 +26,7 @@ public: HexagonLinkingContext(llvm::Triple triple); void addPasses(PassManager &) override; + void registerRelocationNames(Registry &r) override; bool isDynamicRelocation(const Reference &r) const override { if (r.kindNamespace() != Reference::KindNamespace::ELF) diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp index 435b4b5fedb..85a2d4fe268 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp @@ -313,15 +313,3 @@ void elf::HexagonLinkingContext::addPasses(PassManager &pm) { pm.add(llvm::make_unique<DynamicGOTPLTPass>(*this)); ELFLinkingContext::addPasses(pm); } - -static const Registry::KindStrings kindStrings[] = { -#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), -#include "llvm/Support/ELFRelocs/Hexagon.def" -#undef ELF_RELOC - LLD_KIND_STRING_END -}; - -void HexagonTargetHandler::registerRelocationNames(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, - Reference::KindArch::Hexagon, kindStrings); -} diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h index 22c502c4c70..d4df0e0ee4e 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h @@ -100,8 +100,6 @@ class HexagonTargetHandler final : public TargetHandler { public: HexagonTargetHandler(HexagonLinkingContext &targetInfo); - void registerRelocationNames(Registry ®istry) override; - const HexagonTargetRelocationHandler &getRelocationHandler() const override { return *_relocationHandler; } diff --git a/lld/lib/ReaderWriter/ELF/Mips/CMakeLists.txt b/lld/lib/ReaderWriter/ELF/Mips/CMakeLists.txt index d982508b7dd..03e72258929 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/CMakeLists.txt +++ b/lld/lib/ReaderWriter/ELF/Mips/CMakeLists.txt @@ -4,7 +4,6 @@ add_llvm_library(lldMipsELFTarget MipsLinkingContext.cpp MipsRelocationHandler.cpp MipsRelocationPass.cpp - MipsTargetHandler.cpp LINK_LIBS lldELF lldReaderWriter diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp index 1d212465f2d..5b06c38d0ef 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp @@ -127,3 +127,23 @@ bool MipsLinkingContext::isRelativeReloc(const Reference &r) const { return false; } } + +const Registry::KindStrings kindStrings[] = { +#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), +#include "llvm/Support/ELFRelocs/Mips.def" +#undef ELF_RELOC + LLD_KIND_STRING_ENTRY(LLD_R_MIPS_GLOBAL_GOT), + LLD_KIND_STRING_ENTRY(LLD_R_MIPS_32_HI16), + LLD_KIND_STRING_ENTRY(LLD_R_MIPS_64_HI16), + LLD_KIND_STRING_ENTRY(LLD_R_MIPS_GLOBAL_26), + LLD_KIND_STRING_ENTRY(LLD_R_MIPS_HI16), + LLD_KIND_STRING_ENTRY(LLD_R_MIPS_LO16), + LLD_KIND_STRING_ENTRY(LLD_R_MIPS_STO_PLT), + LLD_KIND_STRING_ENTRY(LLD_R_MICROMIPS_GLOBAL_26_S1), + LLD_KIND_STRING_END +}; + +void MipsLinkingContext::registerRelocationNames(Registry ®istry) { + registry.addKindTable(Reference::KindNamespace::ELF, + Reference::KindArch::Mips, kindStrings); +} diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h b/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h index 8919031f742..29f78cb2b3e 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h @@ -47,6 +47,7 @@ public: uint32_t getMergedELFFlags() const; MipsELFFlagsMerger &getELFFlagsMerger(); + void registerRelocationNames(Registry &r) override; // ELFLinkingContext uint64_t getBaseAddress() const override; diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp deleted file mode 100644 index 0391011ab30..00000000000 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp +++ /dev/null @@ -1,33 +0,0 @@ -//===- lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp --------------------===// -// -// The LLVM Linker -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "MipsTargetHandler.h" - -using namespace lld; -using namespace elf; - -const Registry::KindStrings kindStrings[] = { -#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), -#include "llvm/Support/ELFRelocs/Mips.def" -#undef ELF_RELOC - LLD_KIND_STRING_ENTRY(LLD_R_MIPS_GLOBAL_GOT), - LLD_KIND_STRING_ENTRY(LLD_R_MIPS_32_HI16), - LLD_KIND_STRING_ENTRY(LLD_R_MIPS_64_HI16), - LLD_KIND_STRING_ENTRY(LLD_R_MIPS_GLOBAL_26), - LLD_KIND_STRING_ENTRY(LLD_R_MIPS_HI16), - LLD_KIND_STRING_ENTRY(LLD_R_MIPS_LO16), - LLD_KIND_STRING_ENTRY(LLD_R_MIPS_STO_PLT), - LLD_KIND_STRING_ENTRY(LLD_R_MICROMIPS_GLOBAL_26_S1), - LLD_KIND_STRING_END -}; - -void MipsRelocationStringTable::registerTable(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, - Reference::KindArch::Mips, kindStrings); -} diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h index a1491b60e6d..9617284bb19 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h @@ -90,12 +90,6 @@ public: : RuntimeFile<ELFT>(ctx, "Mips runtime file") {} }; -/// \brief Auxiliary class holds relocation's names table. -class MipsRelocationStringTable { -public: - static void registerTable(Registry ®istry); -}; - /// \brief TargetHandler for Mips template <class ELFT> class MipsTargetHandler final : public TargetHandler { public: @@ -131,10 +125,6 @@ public: } } - void registerRelocationNames(Registry ®istry) override { - MipsRelocationStringTable::registerTable(registry); - } - private: MipsLinkingContext &_ctx; std::unique_ptr<MipsRuntimeFile<ELFT>> _runtimeFile; diff --git a/lld/lib/ReaderWriter/ELF/Reader.cpp b/lld/lib/ReaderWriter/ELF/Reader.cpp index e64a754acc3..aa3205cafca 100644 --- a/lld/lib/ReaderWriter/ELF/Reader.cpp +++ b/lld/lib/ReaderWriter/ELF/Reader.cpp @@ -32,7 +32,7 @@ void Registry::addSupportELFObjects(ELFLinkingContext &ctx) { add(std::move(ctx.getTargetHandler().getObjReader())); // Tell registry about the relocation name to number mapping for this arch. - ctx.getTargetHandler().registerRelocationNames(*this); + ctx.registerRelocationNames(*this); } void Registry::addSupportELFDynamicSharedObjects(ELFLinkingContext &ctx) { diff --git a/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp b/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp index 018e42e664e..f19df0c33e7 100644 --- a/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp @@ -14,13 +14,26 @@ #include "llvm/Support/ErrorOr.h" using namespace lld; +using namespace lld::elf; std::unique_ptr<ELFLinkingContext> -elf::X86LinkingContext::create(llvm::Triple triple) { +X86LinkingContext::create(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::x86) - return llvm::make_unique<elf::X86LinkingContext>(triple); + return llvm::make_unique<X86LinkingContext>(triple); return nullptr; } -elf::X86LinkingContext::X86LinkingContext(llvm::Triple triple) +X86LinkingContext::X86LinkingContext(llvm::Triple triple) : ELFLinkingContext(triple, llvm::make_unique<X86TargetHandler>(*this)) {} + +static const Registry::KindStrings kindStrings[] = { +#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), +#include "llvm/Support/ELFRelocs/i386.def" +#undef ELF_RELOC + LLD_KIND_STRING_END +}; + +void X86LinkingContext::registerRelocationNames(Registry ®istry) { + registry.addKindTable(Reference::KindNamespace::ELF, Reference::KindArch::x86, + kindStrings); +} diff --git a/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.h b/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.h index ff424f411aa..c8fd4c907c3 100644 --- a/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/X86/X86LinkingContext.h @@ -20,6 +20,7 @@ class X86LinkingContext final : public ELFLinkingContext { public: static std::unique_ptr<ELFLinkingContext> create(llvm::Triple); X86LinkingContext(llvm::Triple); + void registerRelocationNames(Registry &r) override; /// \brief X86 has only two relative relocation /// a) for supporting IFUNC relocs - R_386_IRELATIVE diff --git a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp index 18cbb61f1fe..5736c8229b6 100644 --- a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.cpp @@ -33,18 +33,6 @@ std::unique_ptr<Writer> X86TargetHandler::getWriter() { } } -static const Registry::KindStrings kindStrings[] = { -#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), -#include "llvm/Support/ELFRelocs/i386.def" -#undef ELF_RELOC - LLD_KIND_STRING_END -}; - -void X86TargetHandler::registerRelocationNames(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, Reference::KindArch::x86, - kindStrings); -} - X86TargetHandler::X86TargetHandler(X86LinkingContext &ctx) : _ctx(ctx), _targetLayout(new TargetLayout<X86ELFType>(ctx)), _relocationHandler(new X86TargetRelocationHandler()) {} diff --git a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h index 4291f695174..f6b498925da 100644 --- a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h @@ -24,8 +24,6 @@ class X86TargetHandler final : public TargetHandler { public: X86TargetHandler(X86LinkingContext &ctx); - void registerRelocationNames(Registry ®istry) override; - const X86TargetRelocationHandler &getRelocationHandler() const override { return *_relocationHandler; } diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp index 92dede73b8a..8866209ccc5 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp @@ -12,7 +12,7 @@ #include "X86_64TargetHandler.h" using namespace lld; -using namespace elf; +using namespace lld::elf; X86_64LinkingContext::X86_64LinkingContext( llvm::Triple triple, std::unique_ptr<TargetHandler> handler) @@ -32,6 +32,19 @@ void X86_64LinkingContext::addPasses(PassManager &pm) { std::unique_ptr<ELFLinkingContext> X86_64LinkingContext::create(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::x86_64) - return llvm::make_unique<elf::X86_64LinkingContext>(triple); + return llvm::make_unique<X86_64LinkingContext>(triple); return nullptr; } + +static const Registry::KindStrings kindStrings[] = { +#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), +#include "llvm/Support/ELFRelocs/x86_64.def" +#undef ELF_RELOC + LLD_KIND_STRING_ENTRY(LLD_R_X86_64_GOTRELINDEX), + LLD_KIND_STRING_END +}; + +void X86_64LinkingContext::registerRelocationNames(Registry ®istry) { + registry.addKindTable(Reference::KindNamespace::ELF, + Reference::KindArch::x86_64, kindStrings); +} diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h index c2292ce32a2..2a994f2f99a 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h @@ -33,6 +33,7 @@ public: X86_64LinkingContext(llvm::Triple); void addPasses(PassManager &) override; + void registerRelocationNames(Registry &r) override; uint64_t getBaseAddress() const override { if (_baseAddress == 0) diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp b/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp index 6a2ab467aad..599077ac33c 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp @@ -20,19 +20,6 @@ X86_64TargetHandler::X86_64TargetHandler(X86_64LinkingContext &ctx) : _ctx(ctx), _targetLayout(new X86_64TargetLayout(ctx)), _relocationHandler(new X86_64TargetRelocationHandler(*_targetLayout)) {} -static const Registry::KindStrings kindStrings[] = { -#define ELF_RELOC(name, value) LLD_KIND_STRING_ENTRY(name), -#include "llvm/Support/ELFRelocs/x86_64.def" -#undef ELF_RELOC - LLD_KIND_STRING_ENTRY(LLD_R_X86_64_GOTRELINDEX), - LLD_KIND_STRING_END -}; - -void X86_64TargetHandler::registerRelocationNames(Registry ®istry) { - registry.addKindTable(Reference::KindNamespace::ELF, - Reference::KindArch::x86_64, kindStrings); -} - std::unique_ptr<Writer> X86_64TargetHandler::getWriter() { switch (this->_ctx.getOutputELFType()) { case llvm::ELF::ET_EXEC: diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h b/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h index 45c4c250bac..4f7268d4fdf 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h @@ -62,8 +62,6 @@ class X86_64TargetHandler : public TargetHandler { public: X86_64TargetHandler(X86_64LinkingContext &ctx); - void registerRelocationNames(Registry ®istry) override; - const X86_64TargetRelocationHandler &getRelocationHandler() const override { return *_relocationHandler; } |