From a5b6859ac44079a7d0c9aefe25d2a87016edd87c Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Tue, 14 Apr 2015 00:59:04 +0000 Subject: ELF: Use less templates for ELF types. These classes are templated but actually instantiated for only one ELF type. llvm-svn: 234830 --- .../ELF/AArch64/AArch64DynamicLibraryWriter.h | 17 ++++---- .../ELF/AArch64/AArch64ExecutableWriter.h | 17 ++++---- .../ELF/AArch64/AArch64TargetHandler.cpp | 6 +-- lld/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h | 46 +++++++++------------- .../ReaderWriter/ELF/ARM/ARMRelocationHandler.h | 7 ++-- lld/lib/ReaderWriter/ELF/ARM/ARMSymbolTable.h | 19 ++++----- lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp | 5 +-- lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h | 9 +++-- .../ELF/Hexagon/HexagonTargetHandler.h | 18 ++++----- 9 files changed, 61 insertions(+), 83 deletions(-) (limited to 'lld/lib') diff --git a/lld/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h b/lld/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h index d1585e7412a..2323530d6ef 100644 --- a/lld/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h +++ b/lld/lib/ReaderWriter/ELF/AArch64/AArch64DynamicLibraryWriter.h @@ -16,26 +16,23 @@ namespace lld { namespace elf { -template -class AArch64DynamicLibraryWriter : public DynamicLibraryWriter { +class AArch64DynamicLibraryWriter : public DynamicLibraryWriter { public: AArch64DynamicLibraryWriter(AArch64LinkingContext &ctx, - TargetLayout &layout); + TargetLayout &layout); protected: // Add any runtime files and their atoms to the output void createImplicitFiles(std::vector> &) override; }; -template -AArch64DynamicLibraryWriter::AArch64DynamicLibraryWriter( - AArch64LinkingContext &ctx, TargetLayout &layout) - : DynamicLibraryWriter(ctx, layout) {} +AArch64DynamicLibraryWriter::AArch64DynamicLibraryWriter( + AArch64LinkingContext &ctx, TargetLayout &layout) + : DynamicLibraryWriter(ctx, layout) {} -template -void AArch64DynamicLibraryWriter::createImplicitFiles( +void AArch64DynamicLibraryWriter::createImplicitFiles( std::vector> &result) { - DynamicLibraryWriter::createImplicitFiles(result); + DynamicLibraryWriter::createImplicitFiles(result); auto gotFile = llvm::make_unique("GOTFile"); gotFile->addAtom(*new (gotFile->allocator()) GlobalOffsetTableAtom(*gotFile)); gotFile->addAtom(*new (gotFile->allocator()) DynamicAtom(*gotFile)); diff --git a/lld/lib/ReaderWriter/ELF/AArch64/AArch64ExecutableWriter.h b/lld/lib/ReaderWriter/ELF/AArch64/AArch64ExecutableWriter.h index f9eaa3bd5a9..0ebdfa57753 100644 --- a/lld/lib/ReaderWriter/ELF/AArch64/AArch64ExecutableWriter.h +++ b/lld/lib/ReaderWriter/ELF/AArch64/AArch64ExecutableWriter.h @@ -15,26 +15,23 @@ namespace lld { namespace elf { -template -class AArch64ExecutableWriter : public ExecutableWriter { +class AArch64ExecutableWriter : public ExecutableWriter { public: AArch64ExecutableWriter(AArch64LinkingContext &ctx, - TargetLayout &layout); + TargetLayout &layout); protected: // Add any runtime files and their atoms to the output void createImplicitFiles(std::vector> &) override; }; -template -AArch64ExecutableWriter::AArch64ExecutableWriter( - AArch64LinkingContext &ctx, TargetLayout &layout) - : ExecutableWriter(ctx, layout) {} +AArch64ExecutableWriter::AArch64ExecutableWriter(AArch64LinkingContext &ctx, + TargetLayout &layout) + : ExecutableWriter(ctx, layout) {} -template -void AArch64ExecutableWriter::createImplicitFiles( +void AArch64ExecutableWriter::createImplicitFiles( std::vector> &result) { - ExecutableWriter::createImplicitFiles(result); + ExecutableWriter::createImplicitFiles(result); auto gotFile = llvm::make_unique("GOTFile"); gotFile->addAtom(*new (gotFile->allocator()) GlobalOffsetTableAtom(*gotFile)); if (this->_ctx.isDynamic()) diff --git a/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp b/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp index de265100845..e5bb5ef16dc 100644 --- a/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/AArch64/AArch64TargetHandler.cpp @@ -23,11 +23,9 @@ AArch64TargetHandler::AArch64TargetHandler(AArch64LinkingContext &ctx) std::unique_ptr AArch64TargetHandler::getWriter() { switch (this->_ctx.getOutputELFType()) { case llvm::ELF::ET_EXEC: - return llvm::make_unique>(_ctx, - *_targetLayout); + return llvm::make_unique(_ctx, *_targetLayout); case llvm::ELF::ET_DYN: - return llvm::make_unique>( - _ctx, *_targetLayout); + return llvm::make_unique(_ctx, *_targetLayout); case llvm::ELF::ET_REL: llvm_unreachable("TODO: support -r mode"); default: diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h b/lld/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h index 7374a5365c2..fd8d89986b8 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h @@ -22,10 +22,9 @@ const char *gotSymbol = "_GLOBAL_OFFSET_TABLE_"; namespace lld { namespace elf { -template -class ARMExecutableWriter : public ExecutableWriter { +class ARMExecutableWriter : public ExecutableWriter { public: - ARMExecutableWriter(ARMLinkingContext &ctx, ARMTargetLayout &layout); + ARMExecutableWriter(ARMLinkingContext &ctx, ARMTargetLayout &layout); protected: // Add any runtime files and their atoms to the output @@ -34,34 +33,31 @@ protected: void finalizeDefaultAtomValues() override; /// \brief Create symbol table. - unique_bump_ptr> createSymbolTable() override; + unique_bump_ptr> createSymbolTable() override; void processUndefinedSymbol(StringRef symName, - RuntimeFile &file) const override; + RuntimeFile &file) const override; // Setup the ELF header. std::error_code setELFHeader() override; private: ARMLinkingContext &_ctx; - ARMTargetLayout &_armLayout; + ARMTargetLayout &_armLayout; }; -template -ARMExecutableWriter::ARMExecutableWriter(ARMLinkingContext &ctx, - ARMTargetLayout &layout) - : ExecutableWriter(ctx, layout), _ctx(ctx), _armLayout(layout) {} +ARMExecutableWriter::ARMExecutableWriter(ARMLinkingContext &ctx, + ARMTargetLayout &layout) + : ExecutableWriter(ctx, layout), _ctx(ctx), _armLayout(layout) {} -template -void ARMExecutableWriter::createImplicitFiles( +void ARMExecutableWriter::createImplicitFiles( std::vector> &result) { - ExecutableWriter::createImplicitFiles(result); + ExecutableWriter::createImplicitFiles(result); } -template -void ARMExecutableWriter::finalizeDefaultAtomValues() { +void ARMExecutableWriter::finalizeDefaultAtomValues() { // Finalize the atom values that are part of the parent. - ExecutableWriter::finalizeDefaultAtomValues(); + ExecutableWriter::finalizeDefaultAtomValues(); AtomLayout *gotAtom = _armLayout.findAbsoluteAtom(gotSymbol); if (gotAtom) { if (auto gotpltSection = _armLayout.findOutputSection(".got.plt")) @@ -74,16 +70,13 @@ void ARMExecutableWriter::finalizeDefaultAtomValues() { // TODO: resolve addresses of __exidx_start/_end atoms } -template -unique_bump_ptr> -ARMExecutableWriter::createSymbolTable() { - return unique_bump_ptr>( - new (this->_alloc) ARMSymbolTable(this->_ctx)); +unique_bump_ptr> ARMExecutableWriter::createSymbolTable() { + return unique_bump_ptr>(new (this->_alloc) + ARMSymbolTable(this->_ctx)); } -template -void ARMExecutableWriter::processUndefinedSymbol( - StringRef symName, RuntimeFile &file) const { +void ARMExecutableWriter::processUndefinedSymbol( + StringRef symName, RuntimeFile &file) const { if (symName == gotSymbol) { file.addAbsoluteAtom(gotSymbol); } else if (symName.startswith("__exidx")) { @@ -92,9 +85,8 @@ void ARMExecutableWriter::processUndefinedSymbol( } } -template -std::error_code ARMExecutableWriter::setELFHeader() { - if (std::error_code ec = ExecutableWriter::setELFHeader()) +std::error_code ARMExecutableWriter::setELFHeader() { + if (std::error_code ec = ExecutableWriter::setELFHeader()) return ec; // Set ARM-specific flags. diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationHandler.h b/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationHandler.h index 6ba53017c60..80a2f3d4850 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationHandler.h +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationHandler.h @@ -15,19 +15,18 @@ namespace lld { namespace elf { -template class ARMTargetLayout; +class ARMTargetLayout; class ARMTargetRelocationHandler final : public TargetRelocationHandler { public: - ARMTargetRelocationHandler(ARMTargetLayout &layout) - : _armLayout(layout) {} + ARMTargetRelocationHandler(ARMTargetLayout &layout) : _armLayout(layout) {} std::error_code applyRelocation(ELFWriter &, llvm::FileOutputBuffer &, const lld::AtomLayout &, const Reference &) const override; private: - ARMTargetLayout &_armLayout; + ARMTargetLayout &_armLayout; }; } // end namespace elf diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMSymbolTable.h b/lld/lib/ReaderWriter/ELF/ARM/ARMSymbolTable.h index b0cc49b02d0..f31449d55ee 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMSymbolTable.h +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMSymbolTable.h @@ -14,10 +14,9 @@ namespace lld { namespace elf { /// \brief The SymbolTable class represents the symbol table in a ELF file -template -class ARMSymbolTable : public SymbolTable { +class ARMSymbolTable : public SymbolTable { public: - typedef llvm::object::Elf_Sym_Impl Elf_Sym; + typedef llvm::object::Elf_Sym_Impl Elf_Sym; ARMSymbolTable(const ELFLinkingContext &ctx); @@ -25,15 +24,13 @@ public: int64_t addr) override; }; -template -ARMSymbolTable::ARMSymbolTable(const ELFLinkingContext &ctx) - : SymbolTable(ctx, ".symtab", - TargetLayout::ORDER_SYMBOL_TABLE) {} +ARMSymbolTable::ARMSymbolTable(const ELFLinkingContext &ctx) + : SymbolTable(ctx, ".symtab", + TargetLayout::ORDER_SYMBOL_TABLE) {} -template -void ARMSymbolTable::addDefinedAtom(Elf_Sym &sym, const DefinedAtom *da, - int64_t addr) { - SymbolTable::addDefinedAtom(sym, da, addr); +void ARMSymbolTable::addDefinedAtom(Elf_Sym &sym, const DefinedAtom *da, + int64_t addr) { + SymbolTable::addDefinedAtom(sym, da, addr); // Set zero bit to distinguish real symbols addressing Thumb instructions. // Don't care about mapping symbols like $t and others. diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp index 1cbbf8cf8c9..2b928fb1eba 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp @@ -16,14 +16,13 @@ using namespace lld; using namespace elf; ARMTargetHandler::ARMTargetHandler(ARMLinkingContext &ctx) - : _ctx(ctx), _targetLayout(new ARMTargetLayout(ctx)), + : _ctx(ctx), _targetLayout(new ARMTargetLayout(ctx)), _relocationHandler(new ARMTargetRelocationHandler(*_targetLayout)) {} std::unique_ptr ARMTargetHandler::getWriter() { switch (this->_ctx.getOutputELFType()) { case llvm::ELF::ET_EXEC: - return llvm::make_unique>(_ctx, - *_targetLayout); + return llvm::make_unique(_ctx, *_targetLayout); default: llvm_unreachable("unsupported output type"); } diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h index cf74af1e7c3..63a9aeaf70f 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h @@ -16,12 +16,13 @@ #include "TargetLayout.h" namespace lld { +class ELFLinkingContext; + namespace elf { -class ARMLinkingContext; -template class ARMTargetLayout : public TargetLayout { +class ARMTargetLayout : public TargetLayout { public: - ARMTargetLayout(ARMLinkingContext &ctx) : TargetLayout(ctx) {} + ARMTargetLayout(ELFLinkingContext &ctx) : TargetLayout(ctx) {} uint64_t getGOTSymAddr() { std::call_once(_gotSymOnce, [this]() { @@ -80,7 +81,7 @@ public: private: ARMLinkingContext &_ctx; - std::unique_ptr> _targetLayout; + std::unique_ptr _targetLayout; std::unique_ptr _relocationHandler; }; diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h index 63dc8f5bee9..645c2db8b95 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h @@ -21,7 +21,7 @@ namespace elf { class HexagonLinkingContext; /// \brief Handle Hexagon SData section -template class SDataSection : public AtomSection { +class SDataSection : public AtomSection { public: SDataSection(const HexagonLinkingContext &ctx); @@ -43,7 +43,7 @@ public: HexagonTargetLayout(HexagonLinkingContext &hti) : TargetLayout(hti), _sdataSection() { - _sdataSection = new (_alloc) SDataSection(hti); + _sdataSection = new (_alloc) SDataSection(hti); } /// \brief Return the section order for a input section @@ -103,7 +103,7 @@ public: private: llvm::BumpPtrAllocator _alloc; - SDataSection *_sdataSection = nullptr; + SDataSection *_sdataSection = nullptr; uint64_t _gotAddr = 0; std::once_flag _gotOnce; }; @@ -137,7 +137,7 @@ private: std::unique_ptr _relocationHandler; }; -template void SDataSection::doPreFlight() { +inline void SDataSection::doPreFlight() { // sort the atoms on the alignments they have been set std::stable_sort(this->_atoms.begin(), this->_atoms.end(), [](const lld::AtomLayout * A, @@ -167,17 +167,15 @@ template void SDataSection::doPreFlight() { } } // finalize -template -SDataSection::SDataSection(const HexagonLinkingContext &ctx) - : AtomSection(ctx, ".sdata", DefinedAtom::typeDataFast, 0, - HexagonTargetLayout::ORDER_SDATA) { +inline SDataSection::SDataSection(const HexagonLinkingContext &ctx) + : AtomSection(ctx, ".sdata", DefinedAtom::typeDataFast, 0, + HexagonTargetLayout::ORDER_SDATA) { this->_type = SHT_PROGBITS; this->_flags = SHF_ALLOC | SHF_WRITE; this->_alignment = 4096; } -template -const lld::AtomLayout *SDataSection::appendAtom(const Atom *atom) { +inline const lld::AtomLayout *SDataSection::appendAtom(const Atom *atom) { const DefinedAtom *definedAtom = cast(atom); DefinedAtom::Alignment atomAlign = definedAtom->alignment(); uint64_t alignment = atomAlign.value; -- cgit v1.2.3