| //===- OutputRelocSection.h -----------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MCLD_OUTPUT_RELOCATION_SECTION_H |
| #define MCLD_OUTPUT_RELOCATION_SECTION_H |
| #ifdef ENABLE_UNITTEST |
| #include <gtest.h> |
| #endif |
| |
| #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(); |
| |
| 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 of mcld |
| |
| #endif |
| |