//===--------- lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h -------------===// // // The LLVM Linker // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLD_READER_WRITER_ELF_ARM_ARM_EXECUTABLE_WRITER_H #define LLD_READER_WRITER_ELF_ARM_ARM_EXECUTABLE_WRITER_H #include "ExecutableWriter.h" #include "ARMLinkingContext.h" #include "ARMTargetHandler.h" #include "ARMSymbolTable.h" namespace lld { namespace elf { template class ARMExecutableWriter : public ExecutableWriter { public: ARMExecutableWriter(ARMLinkingContext &context, ARMTargetLayout &layout); protected: // Add any runtime files and their atoms to the output bool createImplicitFiles(std::vector> &) override; void finalizeDefaultAtomValues() override { // Finalize the atom values that are part of the parent. ExecutableWriter::finalizeDefaultAtomValues(); } void addDefaultAtoms() override { ExecutableWriter::addDefaultAtoms(); } /// \brief Create symbol table. LLD_UNIQUE_BUMP_PTR(SymbolTable) createSymbolTable() override; private: ARMLinkingContext &_context; ARMTargetLayout &_armLayout; }; template ARMExecutableWriter::ARMExecutableWriter(ARMLinkingContext &context, ARMTargetLayout &layout) : ExecutableWriter(context, layout), _context(context), _armLayout(layout) {} template bool ARMExecutableWriter::createImplicitFiles( std::vector> &result) { ExecutableWriter::createImplicitFiles(result); return true; } template LLD_UNIQUE_BUMP_PTR(SymbolTable) ARMExecutableWriter::createSymbolTable() { return LLD_UNIQUE_BUMP_PTR(SymbolTable)( new (this->_alloc) ARMSymbolTable(this->_context)); } } // namespace elf } // namespace lld #endif // LLD_READER_WRITER_ELF_ARM_ARM_EXECUTABLE_WRITER_H