//===- LDFileFormat.h -----------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef MCLD_LD_LDFILEFORMAT_H_ #define MCLD_LD_LDFILEFORMAT_H_ #include #include namespace mcld { class LDSection; class ObjectBuilder; /** \class LDFileFormat * \brief LDFileFormat describes the common file formats. */ class LDFileFormat { public: enum Kind { Null, TEXT, // Executable regular sections DATA, // Non-executable regular sections BSS, NamePool, Relocation, Debug, DebugString, Target, EhFrame, EhFrameHdr, GCCExceptTable, Version, Note, MetaData, Group, LinkOnce, StackNote, Ignore, Exclude, Folded }; protected: LDFileFormat(); public: virtual ~LDFileFormat(); /// initStdSections - initialize all standard section headers. /// @param [in] pBuilder The ObjectBuilder to create section headers /// @param [in] pBitClass The bitclass of target backend. virtual void initStdSections(ObjectBuilder& pBuilder, unsigned int pBitClass) = 0; // ----- access functions ----- // LDSection& getText() { assert(f_pTextSection != NULL); return *f_pTextSection; } const LDSection& getText() const { assert(f_pTextSection != NULL); return *f_pTextSection; } LDSection& getData() { assert(f_pDataSection != NULL); return *f_pDataSection; } const LDSection& getData() const { assert(f_pDataSection != NULL); return *f_pDataSection; } LDSection& getBSS() { assert(f_pBSSSection != NULL); return *f_pBSSSection; } const LDSection& getBSS() const { assert(f_pBSSSection != NULL); return *f_pBSSSection; } LDSection& getReadOnly() { assert(f_pReadOnlySection != NULL); return *f_pReadOnlySection; } const LDSection& getReadOnly() const { assert(f_pReadOnlySection != NULL); return *f_pReadOnlySection; } protected: // variable name : ELF MachO LDSection* f_pTextSection; // .text __text LDSection* f_pDataSection; // .data __data LDSection* f_pBSSSection; // .bss __bss LDSection* f_pReadOnlySection; // .rodata __const }; } // namespace mcld #endif // MCLD_LD_LDFILEFORMAT_H_