diff options
| author | Rui Ueyama <ruiu@google.com> | 2015-03-31 20:31:48 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2015-03-31 20:31:48 +0000 |
| commit | 1490b3512e3e017e99a5153c4ea023f417d77f91 (patch) | |
| tree | 1994dbe54aa96fd12b3d97ee1ef0eb5da0efcc35 | |
| parent | 3dac3f7fe6e541980fdd4d3fb9575107cbc74c19 (diff) | |
| download | bcm5719-llvm-1490b3512e3e017e99a5153c4ea023f417d77f91.tar.gz bcm5719-llvm-1490b3512e3e017e99a5153c4ea023f417d77f91.zip | |
ELF: Remove TargetHandler::getTargetLayout.
Only MIPS used that member function, and by removing the use of the
function, I removed a static_cast. Seems like it's a win.
llvm-svn: 233748
9 files changed, 15 insertions, 37 deletions
diff --git a/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h b/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h index 470f2ea933f..3f1f79d79bb 100644 --- a/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h @@ -30,10 +30,6 @@ class AArch64TargetHandler final : public DefaultTargetHandler<AArch64ELFType> { public: AArch64TargetHandler(AArch64LinkingContext &ctx); - AArch64TargetLayout<AArch64ELFType> &getTargetLayout() override { - return *_aarch64TargetLayout; - } - void registerRelocationNames(Registry ®istry) override; const AArch64TargetRelocationHandler &getRelocationHandler() const override { diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h index d9b16aaeeef..47ae46eb80d 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h @@ -64,10 +64,6 @@ class ARMTargetHandler final : public DefaultTargetHandler<ARMELFType> { public: ARMTargetHandler(ARMLinkingContext &ctx); - ARMTargetLayout<ARMELFType> &getTargetLayout() override { - return *_armTargetLayout; - } - void registerRelocationNames(Registry ®istry) override; const ARMTargetRelocationHandler &getRelocationHandler() const override { diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h index 4c7020c38d7..6c1054757ed 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h @@ -113,10 +113,6 @@ public: return *_relocationHandler; } - HexagonTargetLayout<HexagonELFType> &getTargetLayout() override { - return *_targetLayout; - } - std::unique_ptr<Reader> getObjReader() override { return llvm::make_unique<HexagonELFObjectReader>(_ctx); } diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp index 6d88b9b28de..f8035a8f715 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp @@ -32,7 +32,8 @@ struct MipsRelocationParams { template <class ELFT> class RelocationHandler : public MipsRelocationHandler { public: - RelocationHandler(MipsLinkingContext &ctx) : _ctx(ctx) {} + RelocationHandler(MipsLinkingContext &ctx, MipsTargetLayout<ELFT> &layout) + : _ctx(ctx), _targetLayout(layout) {} std::error_code applyRelocation(ELFWriter &writer, llvm::FileOutputBuffer &buf, @@ -44,6 +45,7 @@ public: private: MipsLinkingContext &_ctx; + MipsTargetLayout<ELFT> &_targetLayout; }; } @@ -530,13 +532,10 @@ std::error_code RelocationHandler<ELFT>::applyRelocation( return std::error_code(); assert(ref.kindArch() == Reference::KindArch::Mips); - auto &targetLayout = static_cast<MipsTargetLayout<ELFT> &>( - _ctx.getTargetHandler<ELFT>().getTargetLayout()); - - AtomLayout *gpAtom = targetLayout.getGP(); + AtomLayout *gpAtom = _targetLayout.getGP(); uint64_t gpAddr = gpAtom ? gpAtom->_virtualAddr : 0; - AtomLayout *gpDispAtom = targetLayout.getGPDisp(); + AtomLayout *gpDispAtom = _targetLayout.getGPDisp(); bool isGpDisp = gpDispAtom && ref.target() == gpDispAtom->_atom; uint8_t *atomContent = buf.getBufferStart() + atom._fileOffset; @@ -598,14 +597,16 @@ namespace elf { template <> std::unique_ptr<TargetRelocationHandler> -createMipsRelocationHandler<Mips32ELType>(MipsLinkingContext &ctx) { - return llvm::make_unique<RelocationHandler<Mips32ELType>>(ctx); +createMipsRelocationHandler<Mips32ELType>(MipsLinkingContext &ctx, + MipsTargetLayout<Mips32ELType> &layout) { + return llvm::make_unique<RelocationHandler<Mips32ELType>>(ctx, layout); } template <> std::unique_ptr<TargetRelocationHandler> -createMipsRelocationHandler<Mips64ELType>(MipsLinkingContext &ctx) { - return llvm::make_unique<RelocationHandler<Mips64ELType>>(ctx); +createMipsRelocationHandler<Mips64ELType>(MipsLinkingContext &ctx, + MipsTargetLayout<Mips64ELType> &layout) { + return llvm::make_unique<RelocationHandler<Mips64ELType>>(ctx, layout); } } // elf diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.h b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.h index 87066b2b5c1..310719a8629 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.h @@ -15,6 +15,8 @@ namespace lld { namespace elf { +template<typename ELFT> class MipsTargetLayout; + class MipsRelocationHandler : public TargetRelocationHandler { public: virtual Reference::Addend readAddend(Reference::KindValue kind, @@ -23,7 +25,7 @@ public: template <class ELFT> std::unique_ptr<TargetRelocationHandler> -createMipsRelocationHandler(MipsLinkingContext &ctx); +createMipsRelocationHandler(MipsLinkingContext &ctx, MipsTargetLayout<ELFT> &layout); } // elf } // lld diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h index 3451d1a404b..4c76770730e 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h @@ -110,9 +110,7 @@ public: MipsTargetHandler(MipsLinkingContext &ctx) : _ctx(ctx), _runtimeFile(new MipsRuntimeFile<ELFT>(ctx)), _targetLayout(new MipsTargetLayout<ELFT>(ctx)), - _relocationHandler(createMipsRelocationHandler<ELFT>(ctx)) {} - - MipsTargetLayout<ELFT> &getTargetLayout() override { return *_targetLayout; } + _relocationHandler(createMipsRelocationHandler<ELFT>(ctx, *_targetLayout)) {} std::unique_ptr<Reader> getObjReader() override { return llvm::make_unique<MipsELFObjectReader<ELFT>>(_ctx); diff --git a/lld/lib/ReaderWriter/ELF/TargetHandler.h b/lld/lib/ReaderWriter/ELF/TargetHandler.h index d21b1573400..9ecbb2a54b4 100644 --- a/lld/lib/ReaderWriter/ELF/TargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/TargetHandler.h @@ -54,9 +54,6 @@ public: /// of creating atoms and how the atoms are written to the output file. template <class ELFT> class TargetHandler : public TargetHandlerBase { public: - /// The layout determined completely by the Target. - virtual TargetLayout<ELFT> &getTargetLayout() = 0; - /// Determine how relocations need to be applied. virtual const TargetRelocationHandler &getRelocationHandler() const = 0; diff --git a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h index 70754accfd4..f3530aff552 100644 --- a/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h @@ -31,10 +31,6 @@ class X86TargetHandler final public: X86TargetHandler(X86LinkingContext &ctx); - X86TargetLayout<X86ELFType> &getTargetLayout() override { - return *_x86TargetLayout; - } - void registerRelocationNames(Registry ®istry) override; const X86TargetRelocationHandler &getRelocationHandler() const override { diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h b/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h index 20acc6b8b6f..804867c5b34 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h @@ -35,10 +35,6 @@ class X86_64TargetHandler public: X86_64TargetHandler(X86_64LinkingContext &ctx); - X86_64TargetLayout &getTargetLayout() override { - return *_x86_64TargetLayout; - } - void registerRelocationNames(Registry ®istry) override; const X86_64TargetRelocationHandler &getRelocationHandler() const override { |

