summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-03-31 20:31:48 +0000
committerRui Ueyama <ruiu@google.com>2015-03-31 20:31:48 +0000
commit1490b3512e3e017e99a5153c4ea023f417d77f91 (patch)
tree1994dbe54aa96fd12b3d97ee1ef0eb5da0efcc35
parent3dac3f7fe6e541980fdd4d3fb9575107cbc74c19 (diff)
downloadbcm5719-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
-rw-r--r--lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.h4
-rw-r--r--lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h4
-rw-r--r--lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h4
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp21
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.h4
-rw-r--r--lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h4
-rw-r--r--lld/lib/ReaderWriter/ELF/TargetHandler.h3
-rw-r--r--lld/lib/ReaderWriter/ELF/X86/X86TargetHandler.h4
-rw-r--r--lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.h4
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 &registry) 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 &registry) 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 &registry) 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 &registry) override;
const X86_64TargetRelocationHandler &getRelocationHandler() const override {
OpenPOWER on IntegriCloud