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