1 //===- LDFileFormat.h -----------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #ifndef MCLD_LD_LDFILEFORMAT_H_ 10 #define MCLD_LD_LDFILEFORMAT_H_ 11 12 #include <cassert> 13 #include <cstddef> 14 15 namespace mcld { 16 17 class LDSection; 18 class ObjectBuilder; 19 20 /** \class LDFileFormat 21 * \brief LDFileFormat describes the common file formats. 22 */ 23 class LDFileFormat { 24 public: 25 enum Kind { 26 Null, 27 TEXT, // Executable regular sections 28 DATA, // Non-executable regular sections 29 BSS, 30 NamePool, 31 Relocation, 32 Debug, 33 DebugString, 34 Target, 35 EhFrame, 36 EhFrameHdr, 37 GCCExceptTable, 38 Version, 39 Note, 40 MetaData, 41 Group, 42 LinkOnce, 43 StackNote, 44 Ignore, 45 Exclude, 46 Folded 47 }; 48 49 protected: 50 LDFileFormat(); 51 52 public: 53 virtual ~LDFileFormat(); 54 55 /// initStdSections - initialize all standard section headers. 56 /// @param [in] pBuilder The ObjectBuilder to create section headers 57 /// @param [in] pBitClass The bitclass of target backend. 58 virtual void initStdSections(ObjectBuilder& pBuilder, 59 unsigned int pBitClass) = 0; 60 61 // ----- access functions ----- // getText()62 LDSection& getText() { 63 assert(f_pTextSection != NULL); 64 return *f_pTextSection; 65 } 66 getText()67 const LDSection& getText() const { 68 assert(f_pTextSection != NULL); 69 return *f_pTextSection; 70 } 71 getData()72 LDSection& getData() { 73 assert(f_pDataSection != NULL); 74 return *f_pDataSection; 75 } 76 getData()77 const LDSection& getData() const { 78 assert(f_pDataSection != NULL); 79 return *f_pDataSection; 80 } 81 getBSS()82 LDSection& getBSS() { 83 assert(f_pBSSSection != NULL); 84 return *f_pBSSSection; 85 } 86 getBSS()87 const LDSection& getBSS() const { 88 assert(f_pBSSSection != NULL); 89 return *f_pBSSSection; 90 } 91 getReadOnly()92 LDSection& getReadOnly() { 93 assert(f_pReadOnlySection != NULL); 94 return *f_pReadOnlySection; 95 } 96 getReadOnly()97 const LDSection& getReadOnly() const { 98 assert(f_pReadOnlySection != NULL); 99 return *f_pReadOnlySection; 100 } 101 102 protected: 103 // variable name : ELF MachO 104 LDSection* f_pTextSection; // .text __text 105 LDSection* f_pDataSection; // .data __data 106 LDSection* f_pBSSSection; // .bss __bss 107 LDSection* f_pReadOnlySection; // .rodata __const 108 }; 109 110 } // namespace mcld 111 112 #endif // MCLD_LD_LDFILEFORMAT_H_ 113