[lld] r233773 - ELF: Remove TargetHandlerBase by merging it with TargetHandler.
Shankar Easwaran
shankare at codeaurora.org
Tue Mar 31 20:23:35 PDT 2015
Thanks for doing all the cleanups. Code looks much clean now!
On 3/31/2015 7:00 PM, Rui Ueyama wrote:
> Author: ruiu
> Date: Tue Mar 31 19:00:36 2015
> New Revision: 233773
>
> URL: http://llvm.org/viewvc/llvm-project?rev=233773&view=rev
> Log:
> ELF: Remove TargetHandlerBase by merging it with TargetHandler.
>
> In r233772, I removed an empty class, DefaultTargetHandler, from
> the class hierarchy by merging the class with TargetHandler. I then
> found that TargetHandler and its base class, TargetHandlerBase,
> are also almost the same.
>
> We need to go deeper.
>
> In this patch, I merged TargetHandlerBase with TargetHandler.
> The only difference between them is the existence (or absense)
> of a pure virtual function registerRelocationName(). I added that
> function to the (new) TargetHandler.
>
> One more thing is that TargetHandler was templated for no reason.
> I made it non-templated class.
>
> Modified:
> lld/trunk/include/lld/Core/Reader.h
> lld/trunk/include/lld/Core/Writer.h
> lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
> lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp
> lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h
> lld/trunk/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp
> lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h
> lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
> lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp
> lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
> lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h
> lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp
> lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
> lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
> lld/trunk/lib/ReaderWriter/ELF/Reader.cpp
> lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
> lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h
> lld/trunk/lib/ReaderWriter/ELF/Writer.cpp
> lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp
> lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h
> lld/trunk/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp
> lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
> lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h
> lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h
>
> Modified: lld/trunk/include/lld/Core/Reader.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Reader.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/include/lld/Core/Reader.h (original)
> +++ lld/trunk/include/lld/Core/Reader.h Tue Mar 31 19:00:36 2015
> @@ -31,7 +31,6 @@ class ELFLinkingContext;
> class File;
> class LinkingContext;
> class PECOFFLinkingContext;
> -class TargetHandlerBase;
> class MachOLinkingContext;
>
> /// \brief An abstract class for reading object files, library files, and
>
> Modified: lld/trunk/include/lld/Core/Writer.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Writer.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/include/lld/Core/Writer.h (original)
> +++ lld/trunk/include/lld/Core/Writer.h Tue Mar 31 19:00:36 2015
> @@ -20,7 +20,7 @@ class ELFLinkingContext;
> class MachOLinkingContext;
> class PECOFFLinkingContext;
> class LinkingContext;
> -class TargetHandlerBase;
> +class TargetHandler;
>
> /// \brief The Writer is an abstract class for writing object files, shared
> /// library files, and executable files. Each file format (e.g. ELF, mach-o,
> @@ -42,7 +42,7 @@ protected:
> Writer();
> };
>
> -std::unique_ptr<Writer> createWriterELF(TargetHandlerBase *handler);
> +std::unique_ptr<Writer> createWriterELF(TargetHandler *handler);
> std::unique_ptr<Writer> createWriterMachO(const MachOLinkingContext &);
> std::unique_ptr<Writer> createWriterPECOFF(const PECOFFLinkingContext &);
> std::unique_ptr<Writer> createWriterNative();
>
> Modified: lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h (original)
> +++ lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h Tue Mar 31 19:00:36 2015
> @@ -26,23 +26,47 @@
> #include <memory>
> #include <set>
>
> +namespace llvm {
> +class FileOutputBuffer;
> +}
> +
> namespace lld {
> -class Reference;
> +struct AtomLayout;
> class File;
> +class Reference;
>
> namespace elf {
> -template <typename ELFT> class TargetHandler;
> -}
> +class ELFWriter;
>
> -class TargetHandlerBase {
> +class TargetRelocationHandler {
> public:
> - virtual ~TargetHandlerBase() {}
> + virtual ~TargetRelocationHandler() {}
> +
> + virtual std::error_code applyRelocation(ELFWriter &, llvm::FileOutputBuffer &,
> + const lld::AtomLayout &,
> + const Reference &) const = 0;
> +};
> +
> +} // namespace elf
> +
> +/// \brief TargetHandler contains all the information responsible to handle a
> +/// a particular target on ELF. A target might wish to override implementation
> +/// of creating atoms and how the atoms are written to the output file.
> +class TargetHandler {
> +public:
> + virtual ~TargetHandler() {}
> virtual void registerRelocationNames(Registry &) = 0;
>
> + /// Determine how relocations need to be applied.
> + virtual const elf::TargetRelocationHandler &getRelocationHandler() const = 0;
> +
> + /// How does the target deal with reading input files.
> virtual std::unique_ptr<Reader> getObjReader() = 0;
>
> + /// How does the target deal with reading dynamic libraries.
> virtual std::unique_ptr<Reader> getDSOReader() = 0;
>
> + /// How does the target deal with writing ELF output.
> virtual std::unique_ptr<Writer> getWriter() = 0;
> };
>
> @@ -141,13 +165,11 @@ public:
> /// \brief Is the relocation a relative relocation
> virtual bool isRelativeReloc(const Reference &r) const;
>
> - template <typename ELFT>
> - lld::elf::TargetHandler<ELFT> &getTargetHandler() const {
> + TargetHandler &getTargetHandler() const {
> assert(_targetHandler && "Got null TargetHandler!");
> - return static_cast<lld::elf::TargetHandler<ELFT> &>(*_targetHandler.get());
> + return *_targetHandler;
> }
>
> - TargetHandlerBase *targetHandler() const { return _targetHandler.get(); }
> void addPasses(PassManager &pm) override;
>
> void setTriple(llvm::Triple trip) { _triple = trip; }
> @@ -277,9 +299,8 @@ public:
> const script::Sema &linkerScriptSema() const { return _linkerScriptSema; }
>
> protected:
> - ELFLinkingContext(llvm::Triple triple,
> - std::unique_ptr<TargetHandlerBase> targetHandler)
> - : _triple(triple), _targetHandler(std::move(targetHandler)) {}
> + ELFLinkingContext(llvm::Triple triple, std::unique_ptr<TargetHandler> handler)
> + : _triple(triple), _targetHandler(std::move(handler)) {}
>
> Writer &writer() const override;
>
> @@ -288,7 +309,7 @@ protected:
>
> uint16_t _outputELFType = llvm::ELF::ET_EXEC;
> llvm::Triple _triple;
> - std::unique_ptr<TargetHandlerBase> _targetHandler;
> + std::unique_ptr<TargetHandler> _targetHandler;
> uint64_t _baseAddress = 0;
> bool _isStaticExecutable = false;
> bool _noInhibitExec = false;
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64LinkingContext.cpp Tue Mar 31 19:00:36 2015
> @@ -22,8 +22,8 @@ elf::AArch64LinkingContext::create(llvm:
> }
>
> elf::AArch64LinkingContext::AArch64LinkingContext(llvm::Triple triple)
> - : ELFLinkingContext(triple, std::unique_ptr<TargetHandlerBase>(
> - new AArch64TargetHandler(*this))) {}
> + : ELFLinkingContext(triple, std::unique_ptr<TargetHandler>(
> + new AArch64TargetHandler(*this))) {}
>
> void elf::AArch64LinkingContext::addPasses(PassManager &pm) {
> auto pass = createAArch64RelocationPass(*this);
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h Tue Mar 31 19:00:36 2015
> @@ -25,7 +25,7 @@ public:
> AArch64TargetLayout(AArch64LinkingContext &ctx) : TargetLayout<ELFT>(ctx) {}
> };
>
> -class AArch64TargetHandler final : public TargetHandler<AArch64ELFType> {
> +class AArch64TargetHandler final : public TargetHandler {
> public:
> AArch64TargetHandler(AArch64LinkingContext &ctx);
>
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMLinkingContext.cpp Tue Mar 31 19:00:36 2015
> @@ -23,8 +23,9 @@ elf::ARMLinkingContext::create(llvm::Tri
> }
>
> elf::ARMLinkingContext::ARMLinkingContext(llvm::Triple triple)
> - : ELFLinkingContext(triple, std::unique_ptr<TargetHandlerBase>(
> - new ARMTargetHandler(*this))) {}
> + : ELFLinkingContext(
> + triple, std::unique_ptr<TargetHandler>(new ARMTargetHandler(*this))) {
> +}
>
> void elf::ARMLinkingContext::addPasses(PassManager &pm) {
> auto pass = createARMRelocationPass(*this);
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h Tue Mar 31 19:00:36 2015
> @@ -57,7 +57,7 @@ private:
> llvm::Optional<uint64_t> _tpOff;
> };
>
> -class ARMTargetHandler final : public TargetHandler<ARMELFType> {
> +class ARMTargetHandler final : public TargetHandler {
> public:
> ARMTargetHandler(ARMLinkingContext &ctx);
>
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp Tue Mar 31 19:00:36 2015
> @@ -79,7 +79,7 @@ bool ELFLinkingContext::validateImpl(raw
> llvm_unreachable("Unimplemented");
> break;
> default:
> - _writer = createWriterELF(this->targetHandler());
> + _writer = createWriterELF(&this->getTargetHandler());
> break;
> }
>
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonLinkingContext.cpp Tue Mar 31 19:00:36 2015
> @@ -21,5 +21,5 @@ HexagonLinkingContext::create(llvm::Trip
> }
>
> HexagonLinkingContext::HexagonLinkingContext(llvm::Triple triple)
> - : ELFLinkingContext(triple, std::unique_ptr<TargetHandlerBase>(
> + : ELFLinkingContext(triple, std::unique_ptr<TargetHandler>(
> new HexagonTargetHandler(*this))) {}
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h Tue Mar 31 19:00:36 2015
> @@ -96,7 +96,7 @@ private:
> };
>
> /// \brief TargetHandler for Hexagon
> -class HexagonTargetHandler final : public TargetHandler<HexagonELFType> {
> +class HexagonTargetHandler final : public TargetHandler {
> public:
> HexagonTargetHandler(HexagonLinkingContext &targetInfo);
>
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFFile.h Tue Mar 31 19:00:36 2015
> @@ -242,8 +242,7 @@ private:
>
> Reference::Addend readAddend(const Elf_Rel &ri,
> const ArrayRef<uint8_t> content) const {
> - const auto &rh =
> - this->_ctx.template getTargetHandler<ELFT>().getRelocationHandler();
> + const auto &rh = this->_ctx.getTargetHandler().getRelocationHandler();
> return static_cast<const MipsRelocationHandler &>(rh)
> .readAddend(getPrimaryType(ri), content.data() + ri.r_offset);
> }
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp Tue Mar 31 19:00:36 2015
> @@ -24,15 +24,15 @@ MipsLinkingContext::create(llvm::Triple
> return nullptr;
> }
>
> -typedef std::unique_ptr<TargetHandlerBase> TargetHandlerBasePtr;
> +typedef std::unique_ptr<TargetHandler> TargetHandlerPtr;
>
> -static TargetHandlerBasePtr createTarget(llvm::Triple triple,
> - MipsLinkingContext &ctx) {
> +static TargetHandlerPtr createTarget(llvm::Triple triple,
> + MipsLinkingContext &ctx) {
> switch (triple.getArch()) {
> case llvm::Triple::mipsel:
> - return TargetHandlerBasePtr(new MipsTargetHandler<Mips32ELType>(ctx));
> + return TargetHandlerPtr(new MipsTargetHandler<Mips32ELType>(ctx));
> case llvm::Triple::mips64el:
> - return TargetHandlerBasePtr(new MipsTargetHandler<Mips64ELType>(ctx));
> + return TargetHandlerPtr(new MipsTargetHandler<Mips64ELType>(ctx));
> default:
> llvm_unreachable("Unhandled arch");
> }
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h Tue Mar 31 19:00:36 2015
> @@ -99,8 +99,7 @@ public:
> };
>
> /// \brief TargetHandler for Mips
> -template <class ELFT>
> -class MipsTargetHandler final : public TargetHandler<ELFT> {
> +template <class ELFT> class MipsTargetHandler final : public TargetHandler {
> public:
> MipsTargetHandler(MipsLinkingContext &ctx)
> : _ctx(ctx), _runtimeFile(new MipsRuntimeFile<ELFT>(ctx)),
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h Tue Mar 31 19:00:36 2015
> @@ -175,7 +175,7 @@ protected:
> llvm::BumpPtrAllocator _alloc;
>
> ELFLinkingContext &_ctx;
> - TargetHandler<ELFT> &_targetHandler;
> + TargetHandler &_targetHandler;
>
> typedef llvm::DenseMap<const Atom *, uint64_t> AtomToAddress;
> AtomToAddress _atomToAddressMap;
> @@ -207,7 +207,7 @@ private:
> template <class ELFT>
> OutputELFWriter<ELFT>::OutputELFWriter(ELFLinkingContext &ctx,
> TargetLayout<ELFT> &layout)
> - : _ctx(ctx), _targetHandler(ctx.getTargetHandler<ELFT>()), _layout(layout),
> + : _ctx(ctx), _targetHandler(ctx.getTargetHandler()), _layout(layout),
> _scriptFile(new RuntimeFile<ELFT>(ctx, "Linker script runtime")) {}
>
> template <class ELFT>
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/Reader.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Reader.cpp?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/Reader.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/Reader.cpp Tue Mar 31 19:00:36 2015
> @@ -29,15 +29,15 @@ namespace lld {
> void Registry::addSupportELFObjects(ELFLinkingContext &ctx) {
>
> // Tell registry about the ELF object file parser.
> - add(std::move(ctx.targetHandler()->getObjReader()));
> + add(std::move(ctx.getTargetHandler().getObjReader()));
>
> // Tell registry about the relocation name to number mapping for this arch.
> - ctx.targetHandler()->registerRelocationNames(*this);
> + ctx.getTargetHandler().registerRelocationNames(*this);
> }
>
> void Registry::addSupportELFDynamicSharedObjects(ELFLinkingContext &ctx) {
> // Tell registry about the ELF dynamic shared library file parser.
> - add(ctx.targetHandler()->getDSOReader());
> + add(ctx.getTargetHandler().getDSOReader());
> }
>
> } // end namespace lld
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h Tue Mar 31 19:00:36 2015
> @@ -420,7 +420,7 @@ void AtomSection<ELFT>::write(ELFWriter
> uint8_t *atomContent = chunkBuffer + ai->_fileOffset;
> std::memcpy(atomContent, content.data(), contentSize);
> const TargetRelocationHandler &relHandler =
> - this->_ctx.template getTargetHandler<ELFT>().getRelocationHandler();
> + this->_ctx.getTargetHandler().getRelocationHandler();
> for (const auto ref : *definedAtom) {
> if (std::error_code ec = relHandler.applyRelocation(*writer, buffer,
> *ai, *ref)) {
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/TargetHandler.h Tue Mar 31 19:00:36 2015
> @@ -40,33 +40,6 @@ template <class ELFT> class ELFHeader;
> template <class ELFT> class Section;
> template <class ELFT> class TargetLayout;
>
> -class TargetRelocationHandler {
> -public:
> - virtual ~TargetRelocationHandler() {}
> -
> - virtual std::error_code applyRelocation(ELFWriter &, llvm::FileOutputBuffer &,
> - const lld::AtomLayout &,
> - const Reference &) const = 0;
> -};
> -
> -/// \brief TargetHandler contains all the information responsible to handle a
> -/// a particular target on ELF. A target might wish to override implementation
> -/// of creating atoms and how the atoms are written to the output file.
> -template <class ELFT> class TargetHandler : public TargetHandlerBase {
> -public:
> - /// Determine how relocations need to be applied.
> - virtual const TargetRelocationHandler &getRelocationHandler() const = 0;
> -
> - /// How does the target deal with reading input files.
> - virtual std::unique_ptr<Reader> getObjReader() = 0;
> -
> - /// How does the target deal with reading dynamic libraries.
> - virtual std::unique_ptr<Reader> getDSOReader() = 0;
> -
> - /// How does the target deal with writing ELF output.
> - virtual std::unique_ptr<Writer> getWriter() = 0;
> -};
> -
> inline std::error_code make_unhandled_reloc_error() {
> return make_dynamic_error_code(Twine("Unhandled reference type"));
> }
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/Writer.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Writer.cpp?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/Writer.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/Writer.cpp Tue Mar 31 19:00:36 2015
> @@ -16,7 +16,7 @@ using namespace llvm::object;
>
> namespace lld {
>
> -std::unique_ptr<Writer> createWriterELF(TargetHandlerBase *handler) {
> +std::unique_ptr<Writer> createWriterELF(TargetHandler *handler) {
> return std::move(handler->getWriter());
> }
>
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/X86/X86LinkingContext.cpp Tue Mar 31 19:00:36 2015
> @@ -24,5 +24,6 @@ elf::X86LinkingContext::create(llvm::Tri
> }
>
> elf::X86LinkingContext::X86LinkingContext(llvm::Triple triple)
> - : ELFLinkingContext(triple, std::unique_ptr<TargetHandlerBase>(
> - new X86TargetHandler(*this))) {}
> + : ELFLinkingContext(
> + triple, std::unique_ptr<TargetHandler>(new X86TargetHandler(*this))) {
> +}
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/X86/X86TargetHandler.h Tue Mar 31 19:00:36 2015
> @@ -25,7 +25,7 @@ public:
> X86TargetLayout(X86LinkingContext &ctx) : TargetLayout<ELFT>(ctx) {}
> };
>
> -class X86TargetHandler final : public TargetHandler<X86ELFType> {
> +class X86TargetHandler final : public TargetHandler {
> public:
> X86TargetHandler(X86LinkingContext &ctx);
>
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp Tue Mar 31 19:00:36 2015
> @@ -21,7 +21,7 @@ ExampleLinkingContext::create(llvm::Trip
> }
>
> ExampleLinkingContext::ExampleLinkingContext(llvm::Triple triple)
> - : X86_64LinkingContext(triple, std::unique_ptr<TargetHandlerBase>(
> + : X86_64LinkingContext(triple, std::unique_ptr<TargetHandler>(
> new ExampleTargetHandler(*this))) {
> _outputELFType = llvm::ELF::ET_LOPROC;
> }
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp Tue Mar 31 19:00:36 2015
> @@ -15,7 +15,7 @@ using namespace lld;
> using namespace elf;
>
> X86_64LinkingContext::X86_64LinkingContext(
> - llvm::Triple triple, std::unique_ptr<TargetHandlerBase> handler)
> + llvm::Triple triple, std::unique_ptr<TargetHandler> handler)
> : ELFLinkingContext(triple, std::move(handler)) {}
>
> X86_64LinkingContext::X86_64LinkingContext(llvm::Triple triple)
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.h Tue Mar 31 19:00:36 2015
> @@ -26,7 +26,8 @@ enum {
>
> class X86_64LinkingContext : public ELFLinkingContext {
> protected:
> - X86_64LinkingContext(llvm::Triple, std::unique_ptr<TargetHandlerBase>);
> + X86_64LinkingContext(llvm::Triple, std::unique_ptr<TargetHandler>);
> +
> public:
> static std::unique_ptr<ELFLinkingContext> create(llvm::Triple);
> X86_64LinkingContext(llvm::Triple);
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h?rev=233773&r1=233772&r2=233773&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h Tue Mar 31 19:00:36 2015
> @@ -29,7 +29,7 @@ public:
> }
> };
>
> -class X86_64TargetHandler : public TargetHandler<X86_64ELFType> {
> +class X86_64TargetHandler : public TargetHandler {
> public:
> X86_64TargetHandler(X86_64LinkingContext &ctx);
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation
More information about the llvm-commits
mailing list