//===- lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h ---------===// // // The LLVM Linker // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef HEXAGON_DYNAMIC_LIBRARY_WRITER_H #define HEXAGON_DYNAMIC_LIBRARY_WRITER_H #include "DynamicLibraryWriter.h" #include "HexagonExecutableAtoms.h" #include "HexagonLinkingContext.h" namespace lld { namespace elf { template class HexagonTargetLayout; template class HexagonDynamicLibraryWriter : public DynamicLibraryWriter, public HexagonELFWriter { public: HexagonDynamicLibraryWriter(HexagonLinkingContext &context, HexagonTargetLayout &layout); protected: // Add any runtime files and their atoms to the output virtual bool createImplicitFiles(std::vector> &); virtual void finalizeDefaultAtomValues(); virtual std::error_code setELFHeader() { DynamicLibraryWriter::setELFHeader(); HexagonELFWriter::setELFHeader(*this->_elfHeader); return std::error_code(); } private: void addDefaultAtoms() { _hexagonRuntimeFile->addAbsoluteAtom("_GLOBAL_OFFSET_TABLE_"); _hexagonRuntimeFile->addAbsoluteAtom("_DYNAMIC"); } HexagonLinkingContext &_hexagonLinkingContext; HexagonTargetLayout &_hexagonTargetLayout; std::unique_ptr> _hexagonRuntimeFile; }; template HexagonDynamicLibraryWriter::HexagonDynamicLibraryWriter( HexagonLinkingContext &context, HexagonTargetLayout &layout) : DynamicLibraryWriter(context, layout), HexagonELFWriter(context, layout), _hexagonLinkingContext(context), _hexagonTargetLayout(layout), _hexagonRuntimeFile(new HexagonRuntimeFile(context)) {} template bool HexagonDynamicLibraryWriter::createImplicitFiles( std::vector> &result) { DynamicLibraryWriter::createImplicitFiles(result); // Add the default atoms as defined for hexagon addDefaultAtoms(); result.push_back(std::move(_hexagonRuntimeFile)); return true; } template void HexagonDynamicLibraryWriter::finalizeDefaultAtomValues() { // Finalize the atom values that are part of the parent. DynamicLibraryWriter::finalizeDefaultAtomValues(); HexagonELFWriter::finalizeHexagonRuntimeAtomValues(); } } // namespace elf } // namespace lld #endif // HEXAGON_DYNAMIC_LIBRARY_WRITER_H