• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===- OutputRelocSection.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_TARGET_OUTPUTRELOCSECTION_H
10 #define MCLD_TARGET_OUTPUTRELOCSECTION_H
11 
12 #include <mcld/LD/RelocData.h>
13 
14 namespace mcld
15 {
16 
17 class LDSymbol;
18 class Module;
19 class Relocation;
20 class RelocationFactory;
21 
22 /** \class OutputRelocSection
23  *  \brief Dynamic relocation section for ARM .rel.dyn and .rel.plt
24  */
25 class OutputRelocSection
26 {
27 public:
28   OutputRelocSection(Module& pModule, LDSection& pSection);
29 
30   ~OutputRelocSection();
31 
32   /// create - create an dynamic relocation entry
33   Relocation* create();
34 
35   void reserveEntry(size_t pNum=1);
36 
37   Relocation* consumeEntry();
38 
39   /// addSymbolToDynSym - add local symbol to TLS category so that it'll be
40   /// emitted into .dynsym
41   bool addSymbolToDynSym(LDSymbol& pSymbol);
42 
43   // ----- observers ----- //
empty()44   bool empty()
45   { return m_pRelocData->empty(); }
46 
47   size_t numOfRelocs();
48 
49 private:
50   typedef RelocData::iterator RelocIterator;
51 
52 private:
53   Module& m_Module;
54 
55   /// m_RelocData - the output RelocData which contains the dynamic
56   /// relocations
57   RelocData* m_pRelocData;
58 
59   /// m_isVisit - First time visit the function getEntry() or not
60   bool m_isVisit;
61 
62   /// m_ValidEntryIterator - point to the first valid entry
63   RelocIterator m_ValidEntryIterator;
64 };
65 
66 } // namespace of mcld
67 
68 #endif
69 
70