[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