• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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