//===- OutputRelocSection.h -----------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef MCLD_TARGET_OUTPUTRELOCSECTION_H_ #define MCLD_TARGET_OUTPUTRELOCSECTION_H_ #include "mcld/LD/RelocData.h" namespace mcld { class LDSymbol; class Module; class Relocation; class RelocationFactory; /** \class OutputRelocSection * \brief Dynamic relocation section for ARM .rel.dyn and .rel.plt */ class OutputRelocSection { public: OutputRelocSection(Module& pModule, LDSection& pSection); ~OutputRelocSection(); /// create - create an dynamic relocation entry Relocation* create(); void reserveEntry(size_t pNum = 1); Relocation* consumeEntry(); /// addSymbolToDynSym - add local symbol to TLS category so that it'll be /// emitted into .dynsym bool addSymbolToDynSym(LDSymbol& pSymbol); // ----- observers ----- // bool empty() { return m_pRelocData->empty(); } size_t numOfRelocs(); private: typedef RelocData::iterator RelocIterator; private: Module& m_Module; /// m_RelocData - the output RelocData which contains the dynamic /// relocations RelocData* m_pRelocData; /// m_isVisit - First time visit the function getEntry() or not bool m_isVisit; /// m_ValidEntryIterator - point to the first valid entry RelocIterator m_ValidEntryIterator; }; } // namespace mcld #endif // MCLD_TARGET_OUTPUTRELOCSECTION_H_