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