diff options
Diffstat (limited to 'lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h')
-rw-r--r-- | lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h | 62 |
1 files changed, 25 insertions, 37 deletions
diff --git a/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h b/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h index e2d3193045b75..84415b273f441 100644 --- a/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h +++ b/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h @@ -10,67 +10,55 @@ #define HEXAGON_DYNAMIC_LIBRARY_WRITER_H #include "DynamicLibraryWriter.h" -#include "HexagonExecutableAtoms.h" #include "HexagonLinkingContext.h" namespace lld { namespace elf { -template <typename ELFT> class HexagonTargetLayout; +class HexagonTargetLayout; -template <class ELFT> -class HexagonDynamicLibraryWriter : public DynamicLibraryWriter<ELFT>, - public HexagonELFWriter<ELFT> { +class HexagonDynamicLibraryWriter : public DynamicLibraryWriter<ELF32LE> { public: - HexagonDynamicLibraryWriter(HexagonLinkingContext &context, - HexagonTargetLayout<ELFT> &layout); + HexagonDynamicLibraryWriter(HexagonLinkingContext &ctx, + HexagonTargetLayout &layout); protected: // Add any runtime files and their atoms to the output - virtual bool createImplicitFiles(std::vector<std::unique_ptr<File>> &); + void createImplicitFiles(std::vector<std::unique_ptr<File>> &) override; - virtual void finalizeDefaultAtomValues(); + void finalizeDefaultAtomValues() override; - virtual std::error_code setELFHeader() { - DynamicLibraryWriter<ELFT>::setELFHeader(); - HexagonELFWriter<ELFT>::setELFHeader(*this->_elfHeader); + std::error_code setELFHeader() override { + DynamicLibraryWriter::setELFHeader(); + setHexagonELFHeader(*_elfHeader); return std::error_code(); } private: - void addDefaultAtoms() { - _hexagonRuntimeFile->addAbsoluteAtom("_GLOBAL_OFFSET_TABLE_"); - _hexagonRuntimeFile->addAbsoluteAtom("_DYNAMIC"); - } - - HexagonLinkingContext &_hexagonLinkingContext; - HexagonTargetLayout<ELFT> &_hexagonTargetLayout; - std::unique_ptr<HexagonRuntimeFile<ELFT>> _hexagonRuntimeFile; + HexagonLinkingContext &_ctx; + HexagonTargetLayout &_targetLayout; }; -template <class ELFT> -HexagonDynamicLibraryWriter<ELFT>::HexagonDynamicLibraryWriter( - HexagonLinkingContext &context, HexagonTargetLayout<ELFT> &layout) - : DynamicLibraryWriter<ELFT>(context, layout), - HexagonELFWriter<ELFT>(context, layout), _hexagonLinkingContext(context), - _hexagonTargetLayout(layout), - _hexagonRuntimeFile(new HexagonRuntimeFile<ELFT>(context)) {} +HexagonDynamicLibraryWriter::HexagonDynamicLibraryWriter( + HexagonLinkingContext &ctx, HexagonTargetLayout &layout) + : DynamicLibraryWriter(ctx, layout), _ctx(ctx), _targetLayout(layout) {} -template <class ELFT> -bool HexagonDynamicLibraryWriter<ELFT>::createImplicitFiles( +void HexagonDynamicLibraryWriter::createImplicitFiles( std::vector<std::unique_ptr<File>> &result) { - DynamicLibraryWriter<ELFT>::createImplicitFiles(result); + DynamicLibraryWriter::createImplicitFiles(result); // Add the default atoms as defined for hexagon - addDefaultAtoms(); - result.push_back(std::move(_hexagonRuntimeFile)); - return true; + auto file = + llvm::make_unique<RuntimeFile<ELF32LE>>(_ctx, "Hexagon runtime file"); + file->addAbsoluteAtom("_GLOBAL_OFFSET_TABLE_"); + file->addAbsoluteAtom("_DYNAMIC"); + result.push_back(std::move(file)); } -template <class ELFT> -void HexagonDynamicLibraryWriter<ELFT>::finalizeDefaultAtomValues() { +void HexagonDynamicLibraryWriter::finalizeDefaultAtomValues() { // Finalize the atom values that are part of the parent. - DynamicLibraryWriter<ELFT>::finalizeDefaultAtomValues(); - HexagonELFWriter<ELFT>::finalizeHexagonRuntimeAtomValues(); + DynamicLibraryWriter::finalizeDefaultAtomValues(); + if (_ctx.isDynamic()) + finalizeHexagonRuntimeAtomValues(_targetLayout); } } // namespace elf |