//===- lib/ReaderWriter/ELF/Mips/MipsELFWriters.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_MIPS_MIPS_ELF_WRITERS_H #define LLD_READER_WRITER_ELF_MIPS_MIPS_ELF_WRITERS_H #include "DynamicLibraryWriter.h" #include "ExecutableWriter.h" #include "MipsAbiInfoHandler.h" #include "MipsLinkingContext.h" namespace lld { namespace elf { template class MipsTargetLayout; template class MipsELFWriter { public: MipsELFWriter(MipsLinkingContext &ctx, MipsTargetLayout &targetLayout, const MipsAbiInfoHandler &abiInfo); void setELFHeader(ELFHeader &elfHeader); void finalizeMipsRuntimeAtomValues(); std::unique_ptr> createRuntimeFile(); unique_bump_ptr> createOptionsSection(llvm::BumpPtrAllocator &alloc); unique_bump_ptr> createAbiFlagsSection(llvm::BumpPtrAllocator &alloc); private: MipsLinkingContext &_ctx; MipsTargetLayout &_targetLayout; const MipsAbiInfoHandler &_abiInfo; void setAtomValue(StringRef name, uint64_t value); }; template class MipsDynamicLibraryWriter : public DynamicLibraryWriter { public: MipsDynamicLibraryWriter(MipsLinkingContext &ctx, MipsTargetLayout &layout, const MipsAbiInfoHandler &abiInfo); protected: // Add any runtime files and their atoms to the output void createImplicitFiles(std::vector> &) override; void finalizeDefaultAtomValues() override; void createDefaultSections() override; std::error_code setELFHeader() override; unique_bump_ptr> createSymbolTable() override; unique_bump_ptr> createDynamicTable() override; unique_bump_ptr> createDynamicSymbolTable() override; private: MipsELFWriter _writeHelper; MipsTargetLayout &_targetLayout; unique_bump_ptr> _reginfo; unique_bump_ptr> _abiFlags; }; template class MipsExecutableWriter : public ExecutableWriter { public: MipsExecutableWriter(MipsLinkingContext &ctx, MipsTargetLayout &layout, const MipsAbiInfoHandler &abiInfo); protected: void buildDynamicSymbolTable(const File &file) override; // Add any runtime files and their atoms to the output void createImplicitFiles(std::vector> &) override; void finalizeDefaultAtomValues() override; void createDefaultSections() override; std::error_code setELFHeader() override; unique_bump_ptr> createSymbolTable() override; unique_bump_ptr> createDynamicTable() override; unique_bump_ptr> createDynamicSymbolTable() override; private: MipsELFWriter _writeHelper; MipsTargetLayout &_targetLayout; unique_bump_ptr> _reginfo; unique_bump_ptr> _abiFlags; }; } // elf } // lld #endif