Index: include/lld/ReaderWriter/ELFTargets.h =================================================================== --- include/lld/ReaderWriter/ELFTargets.h +++ include/lld/ReaderWriter/ELFTargets.h @@ -15,11 +15,8 @@ namespace lld { namespace elf { -#define LLVM_TARGET(TargetName) \ - class TargetName##LinkingContext final : public ELFLinkingContext { \ - public: \ - static std::unique_ptr create(llvm::Triple); \ - }; +#define LLVM_TARGET(name) \ + std::unique_ptr create##name##LinkingContext(llvm::Triple); // FIXME: #include "llvm/Config/Targets.def" LLVM_TARGET(AArch64) Index: lib/Driver/GnuLdDriver.cpp =================================================================== --- lib/Driver/GnuLdDriver.cpp +++ lib/Driver/GnuLdDriver.cpp @@ -337,8 +337,8 @@ GnuLdDriver::createELFLinkingContext(llvm::Triple triple) { std::unique_ptr p; // FIXME: #include "llvm/Config/Targets.def" -#define LLVM_TARGET(targetName) \ - if ((p = elf::targetName##LinkingContext::create(triple))) return p; +#define LLVM_TARGET(name) \ + if ((p = elf::create##name##LinkingContext(triple))) return p; LLVM_TARGET(AArch64) LLVM_TARGET(ARM) LLVM_TARGET(Hexagon) Index: lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h =================================================================== --- lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h +++ lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.h @@ -24,7 +24,6 @@ class AArch64LinkingContext final : public ELFLinkingContext { public: - static std::unique_ptr create(llvm::Triple); AArch64LinkingContext(llvm::Triple); void addPasses(PassManager &) override; Index: lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp +++ lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp @@ -10,11 +10,12 @@ #include "AArch64LinkingContext.h" #include "AArch64RelocationPass.h" #include "AArch64TargetHandler.h" +#include "lld/ReaderWriter/ELFTargets.h" using namespace lld; std::unique_ptr -elf::AArch64LinkingContext::create(llvm::Triple triple) { +elf::createAArch64LinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::aarch64) return std::unique_ptr( new elf::AArch64LinkingContext(triple)); Index: lib/ReaderWriter/ELF/ARM/ARMLinkingContext.h =================================================================== --- lib/ReaderWriter/ELF/ARM/ARMLinkingContext.h +++ lib/ReaderWriter/ELF/ARM/ARMLinkingContext.h @@ -19,7 +19,6 @@ class ARMLinkingContext final : public ELFLinkingContext { public: - static std::unique_ptr create(llvm::Triple); ARMLinkingContext(llvm::Triple); void addPasses(PassManager &) override; Index: lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp +++ lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp @@ -10,12 +10,13 @@ #include "ARMLinkingContext.h" #include "ARMRelocationPass.h" #include "ARMTargetHandler.h" +#include "lld/ReaderWriter/ELFTargets.h" using namespace lld; using namespace lld::elf; std::unique_ptr -elf::ARMLinkingContext::create(llvm::Triple triple) { +elf::createARMLinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::arm) return std::unique_ptr( new elf::ARMLinkingContext(triple)); Index: lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h =================================================================== --- lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h +++ lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.h @@ -21,7 +21,6 @@ class HexagonLinkingContext final : public ELFLinkingContext { public: - static std::unique_ptr create(llvm::Triple); HexagonLinkingContext(llvm::Triple triple); void addPasses(PassManager &) override; Index: lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp +++ lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp @@ -9,11 +9,12 @@ #include "HexagonLinkingContext.h" #include "HexagonTargetHandler.h" +#include "lld/ReaderWriter/ELFTargets.h" using namespace lld::elf; std::unique_ptr -HexagonLinkingContext::create(llvm::Triple triple) { +lld::elf::createHexagonLinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::hexagon) return std::unique_ptr( new HexagonLinkingContext(triple)); Index: lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h =================================================================== --- lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h +++ lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h @@ -38,7 +38,6 @@ class MipsLinkingContext final : public ELFLinkingContext { public: - static std::unique_ptr create(llvm::Triple); MipsLinkingContext(llvm::Triple triple); uint32_t getMergedELFFlags() const; Index: lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp +++ lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp @@ -12,12 +12,13 @@ #include "MipsLinkingContext.h" #include "MipsRelocationPass.h" #include "MipsTargetHandler.h" +#include "lld/ReaderWriter/ELFTargets.h" using namespace lld; using namespace lld::elf; std::unique_ptr -MipsLinkingContext::create(llvm::Triple triple) { +lld::elf::createMipsLinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::mipsel || triple.getArch() == llvm::Triple::mips64el) return std::unique_ptr(new MipsLinkingContext(triple)); Index: lib/ReaderWriter/ELF/X86/X86LinkingContext.h =================================================================== --- lib/ReaderWriter/ELF/X86/X86LinkingContext.h +++ lib/ReaderWriter/ELF/X86/X86LinkingContext.h @@ -18,7 +18,6 @@ namespace elf { class X86LinkingContext final : public ELFLinkingContext { public: - static std::unique_ptr create(llvm::Triple); X86LinkingContext(llvm::Triple); /// \brief X86 has only two relative relocation Index: lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp +++ lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp @@ -10,13 +10,14 @@ #include "X86LinkingContext.h" #include "X86TargetHandler.h" #include "lld/Core/LLVM.h" +#include "lld/ReaderWriter/ELFTargets.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Support/ErrorOr.h" using namespace lld; std::unique_ptr -elf::X86LinkingContext::create(llvm::Triple triple) { +elf::createX86LinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::x86) return std::unique_ptr( new elf::X86LinkingContext(triple)); Index: lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h =================================================================== --- lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h +++ lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h @@ -26,7 +26,6 @@ class X86_64LinkingContext final : public ELFLinkingContext { public: - static std::unique_ptr create(llvm::Triple); X86_64LinkingContext(llvm::Triple); void addPasses(PassManager &) override; Index: lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp =================================================================== --- lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp +++ lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp @@ -10,11 +10,12 @@ #include "X86_64LinkingContext.h" #include "X86_64TargetHandler.h" #include "X86_64RelocationPass.h" +#include "lld/ReaderWriter/ELFTargets.h" using namespace lld; std::unique_ptr -elf::X86_64LinkingContext::create(llvm::Triple triple) { +elf::createX86_64LinkingContext(llvm::Triple triple) { if (triple.getArch() == llvm::Triple::x86_64) return std::unique_ptr( new elf::X86_64LinkingContext(triple));