//===- 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 <llvm/ADT/DenseMap.h> #include <mcld/LD/SectionData.h> #include <mcld/LD/RelocationFactory.h> namespace mcld { class ResolveInfo; class Relocation; /** \class OutputRelocSection * \brief Dynamic relocation section for ARM .rel.dyn and .rel.plt */ class OutputRelocSection { public: OutputRelocSection(LDSection& pSection, SectionData& pSectionData, unsigned int pEntrySize); ~OutputRelocSection(); void reserveEntry(RelocationFactory& pRelFactory, size_t pNum=1); Relocation* getEntry(const ResolveInfo& pSymbol, bool isForGOT, bool& pExist); private: typedef llvm::DenseMap<const ResolveInfo*, Relocation*> SymRelMapType; typedef SymRelMapType::iterator SymRelMapIterator; typedef SectionData::iterator FragmentIterator; private: /// m_pSection - LDSection of this Section LDSection* m_pSection; /// m_SectionData - SectionData which contains the dynamic relocations SectionData* m_pSectionData; /// m_EntryBytes - size of a relocation entry unsigned int m_EntryBytes; /// m_isVisit - First time visit the function getEntry() or not bool m_isVisit; /// m_ValidEntryIterator - point to the first valid entry FragmentIterator m_ValidEntryIterator; /// m_SymRelMap - map the resolved symbol to the Relocation entry SymRelMapType m_SymRelMap; }; } // namespace of mcld #endif