From 0f049c1a7cab83839daccc447c875e96b290b310 Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Fri, 16 Jan 2015 08:57:26 +0000 Subject: [PATCH] [Mips] Make MipsLinkingContext owner of MipsELFFlagsMerger That reduce class dependencies and simplify the code a bit. No functional changes. llvm-svn: 226255 --- lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h | 11 ++++------- lld/lib/ReaderWriter/ELF/Mips/MipsELFReader.h | 9 +++++---- lld/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h | 10 +++------- lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h | 13 +++++-------- lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp | 8 +++++--- lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h | 5 +++++ lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp | 7 +++---- lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h | 10 ++-------- 8 files changed, 32 insertions(+), 41 deletions(-) diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h index a23f707..c2ff70e 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsDynamicLibraryWriter.h @@ -25,8 +25,7 @@ template class MipsDynamicLibraryWriter : public DynamicLibraryWriter { public: MipsDynamicLibraryWriter(MipsLinkingContext &ctx, - MipsTargetLayout &layout, - MipsELFFlagsMerger &elfFlagsMerger); + MipsTargetLayout &layout); protected: // Add any runtime files and their atoms to the output @@ -54,11 +53,9 @@ private: template MipsDynamicLibraryWriter::MipsDynamicLibraryWriter( - MipsLinkingContext &ctx, MipsTargetLayout &layout, - MipsELFFlagsMerger &elfFlagsMerger) - : DynamicLibraryWriter(ctx, layout), - _writeHelper(ctx, layout, elfFlagsMerger), _mipsContext(ctx), - _mipsTargetLayout(layout) {} + MipsLinkingContext &ctx, MipsTargetLayout &layout) + : DynamicLibraryWriter(ctx, layout), _writeHelper(ctx, layout), + _mipsContext(ctx), _mipsTargetLayout(layout) {} template bool MipsDynamicLibraryWriter::createImplicitFiles( diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsELFReader.h b/lld/lib/ReaderWriter/ELF/Mips/MipsELFReader.h index 95643bc..01d95d8 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsELFReader.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsELFReader.h @@ -12,6 +12,7 @@ #include "ELFReader.h" #include "MipsELFFile.h" #include "MipsELFFlagsMerger.h" +#include "MipsLinkingContext.h" namespace lld { namespace elf { @@ -44,9 +45,9 @@ class MipsELFObjectReader BaseReaderType; public: - MipsELFObjectReader(MipsELFFlagsMerger &flagMerger, bool atomizeStrings) + MipsELFObjectReader(MipsLinkingContext &ctx, bool atomizeStrings) : BaseReaderType(atomizeStrings, llvm::ELF::EM_MIPS), - _flagMerger(flagMerger) {} + _flagMerger(ctx.getELFFlagsMerger()) {} std::error_code loadFile(std::unique_ptr mb, const Registry ®istry, @@ -67,9 +68,9 @@ class MipsELFDSOReader BaseReaderType; public: - MipsELFDSOReader(MipsELFFlagsMerger &flagMerger, bool useUndefines) + MipsELFDSOReader(MipsLinkingContext &ctx, bool useUndefines) : BaseReaderType(useUndefines, llvm::ELF::EM_MIPS), - _flagMerger(flagMerger) {} + _flagMerger(ctx.getELFFlagsMerger()) {} std::error_code loadFile(std::unique_ptr mb, const Registry ®istry, diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h b/lld/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h index f4c4d08..d94dd75 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h @@ -9,7 +9,6 @@ #ifndef LLD_READER_WRITER_ELF_MIPS_MIPS_ELF_WRITERS_H #define LLD_READER_WRITER_ELF_MIPS_MIPS_ELF_WRITERS_H -#include "MipsELFFlagsMerger.h" #include "MipsLinkingContext.h" #include "OutputELFWriter.h" @@ -22,10 +21,8 @@ template class MipsTargetLayout; template class MipsELFWriter { public: - MipsELFWriter(MipsLinkingContext &ctx, MipsTargetLayout &targetLayout, - MipsELFFlagsMerger &elfFlagsMerger) - : _ctx(ctx), _targetLayout(targetLayout), - _elfFlagsMerger(elfFlagsMerger) {} + MipsELFWriter(MipsLinkingContext &ctx, MipsTargetLayout &targetLayout) + : _ctx(ctx), _targetLayout(targetLayout) {} void setELFHeader(ELFHeader &elfHeader) { elfHeader.e_version(1); @@ -36,7 +33,7 @@ public: else elfHeader.e_ident(llvm::ELF::EI_ABIVERSION, 0); - elfHeader.e_flags(_elfFlagsMerger.getMergedELFFlags()); + elfHeader.e_flags(_ctx.getMergedELFFlags()); } void finalizeMipsRuntimeAtomValues() { @@ -71,7 +68,6 @@ public: private: MipsLinkingContext &_ctx; MipsTargetLayout &_targetLayout; - MipsELFFlagsMerger &_elfFlagsMerger; void setAtomValue(StringRef name, uint64_t value) { auto atom = _targetLayout.findAbsoluteAtom(name); diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h b/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h index 0df2710..dad8c30 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsExecutableWriter.h @@ -22,8 +22,7 @@ template class MipsTargetLayout; template class MipsExecutableWriter : public ExecutableWriter { public: - MipsExecutableWriter(MipsLinkingContext &ctx, MipsTargetLayout &layout, - MipsELFFlagsMerger &elfFlagsMerger); + MipsExecutableWriter(MipsLinkingContext &ctx, MipsTargetLayout &layout); protected: void buildDynamicSymbolTable(const File &file) override; @@ -47,12 +46,10 @@ private: }; template -MipsExecutableWriter::MipsExecutableWriter( - MipsLinkingContext &ctx, MipsTargetLayout &layout, - MipsELFFlagsMerger &elfFlagsMerger) - : ExecutableWriter(ctx, layout), - _writeHelper(ctx, layout, elfFlagsMerger), _mipsContext(ctx), - _mipsTargetLayout(layout) {} +MipsExecutableWriter::MipsExecutableWriter(MipsLinkingContext &ctx, + MipsTargetLayout &layout) + : ExecutableWriter(ctx, layout), _writeHelper(ctx, layout), + _mipsContext(ctx), _mipsTargetLayout(layout) {} template std::error_code MipsExecutableWriter::setELFHeader() { diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp index ab2ba76..068af9d 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.cpp @@ -21,9 +21,11 @@ MipsLinkingContext::MipsLinkingContext(llvm::Triple triple) new MipsTargetHandler(*this))) {} uint32_t MipsLinkingContext::getMergedELFFlags() const { - const auto &handler = static_cast( - ELFLinkingContext::getTargetHandler()); - return handler.getELFFlagsMerger().getMergedELFFlags(); + return _flagsMerger.getMergedELFFlags(); +} + +MipsELFFlagsMerger &MipsLinkingContext::getELFFlagsMerger() { + return _flagsMerger; } uint64_t MipsLinkingContext::getBaseAddress() const { diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h b/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h index 2a3a623..d0bebee 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsLinkingContext.h @@ -9,6 +9,7 @@ #ifndef LLD_READER_WRITER_ELF_MIPS_MIPS_LINKING_CONTEXT_H #define LLD_READER_WRITER_ELF_MIPS_MIPS_LINKING_CONTEXT_H +#include "MipsELFFlagsMerger.h" #include "lld/ReaderWriter/ELFLinkingContext.h" namespace lld { @@ -41,6 +42,7 @@ public: MipsLinkingContext(llvm::Triple triple); uint32_t getMergedELFFlags() const; + MipsELFFlagsMerger &getELFFlagsMerger(); // ELFLinkingContext uint64_t getBaseAddress() const override; @@ -52,6 +54,9 @@ public: const Reference &r) const override; bool isCopyRelocation(const Reference &r) const override; bool isPLTRelocation(const DefinedAtom &, const Reference &r) const override; + +private: + MipsELFFlagsMerger _flagsMerger; }; } // elf diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp index 9789586..a56c746 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.cpp @@ -27,12 +27,11 @@ MipsTargetHandler::MipsTargetHandler(MipsLinkingContext &ctx) std::unique_ptr MipsTargetHandler::getWriter() { switch (_ctx.getOutputELFType()) { case llvm::ELF::ET_EXEC: - return std::unique_ptr(new MipsExecutableWriter( - _ctx, *_targetLayout, _elfFlagsMerger)); + return std::unique_ptr( + new MipsExecutableWriter(_ctx, *_targetLayout)); case llvm::ELF::ET_DYN: return std::unique_ptr( - new MipsDynamicLibraryWriter(_ctx, *_targetLayout, - _elfFlagsMerger)); + new MipsDynamicLibraryWriter(_ctx, *_targetLayout)); case llvm::ELF::ET_REL: llvm_unreachable("TODO: support -r mode"); default: diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h index 22b9af6..1bb96f5 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h @@ -10,7 +10,6 @@ #define LLD_READER_WRITER_ELF_MIPS_MIPS_TARGET_HANDLER_H #include "DefaultTargetHandler.h" -#include "MipsELFFlagsMerger.h" #include "MipsELFReader.h" #include "MipsLinkingContext.h" #include "MipsRelocationHandler.h" @@ -87,22 +86,18 @@ class MipsTargetHandler final : public DefaultTargetHandler { public: MipsTargetHandler(MipsLinkingContext &ctx); - const MipsELFFlagsMerger &getELFFlagsMerger() const { - return _elfFlagsMerger; - } - MipsTargetLayout &getTargetLayout() override { return *_targetLayout; } std::unique_ptr getObjReader(bool atomizeStrings) override { return std::unique_ptr( - new MipsELFObjectReader(_elfFlagsMerger, atomizeStrings)); + new MipsELFObjectReader(_ctx, atomizeStrings)); } std::unique_ptr getDSOReader(bool useShlibUndefines) override { return std::unique_ptr( - new MipsELFDSOReader(_elfFlagsMerger, useShlibUndefines)); + new MipsELFDSOReader(_ctx, useShlibUndefines)); } const MipsTargetRelocationHandler &getRelocationHandler() const override { @@ -116,7 +111,6 @@ public: private: static const Registry::KindStrings kindStrings[]; MipsLinkingContext &_ctx; - MipsELFFlagsMerger _elfFlagsMerger; std::unique_ptr> _runtimeFile; std::unique_ptr> _targetLayout; std::unique_ptr _relocationHandler; -- 2.7.4