Home | History | Annotate | Download | only in Target
      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 OUTPUTRELOCSECTION_H
     10 #define OUTPUTRELOCSECTION_H
     11 #ifdef ENABLE_UNITTEST
     12 #include <gtest.h>
     13 #endif
     14 
     15 #include <llvm/MC/MCAssembler.h>
     16 #include <llvm/ADT/DenseMap.h>
     17 #include <mcld/LD/RelocationFactory.h>
     18 
     19 namespace mcld
     20 {
     21 
     22 class ResolveInfo;
     23 class Relocation;
     24 
     25 /** \class OutputRelocSection
     26  *  \brief Dynamic relocation section for ARM .rel.dyn and .rel.plt
     27  */
     28 class OutputRelocSection
     29 {
     30 public:
     31   typedef llvm::DenseMap<const ResolveInfo*, Relocation*> SymRelMapType;
     32   typedef SymRelMapType::iterator SymRelMapIterator;
     33 
     34   typedef llvm::MCSectionData::iterator MCFragmentIterator;
     35 
     36 public:
     37   OutputRelocSection(LDSection& pSection,
     38                    llvm::MCSectionData& pSectionData,
     39                    unsigned int pEntrySize);
     40   ~OutputRelocSection();
     41 
     42   void reserveEntry(RelocationFactory& pRelFactory, size_t pNum=1);
     43 
     44   Relocation* getEntry(const ResolveInfo& pSymbol,
     45                        bool isForGOT,
     46                        bool& pExist);
     47 
     48 private:
     49   /// m_pSection - LDSection of this Section
     50   LDSection* m_pSection;
     51 
     52   /// m_SectionData - MCSectionData which contains the dynamic relocations
     53   llvm::MCSectionData* m_pSectionData;
     54 
     55   /// m_EntryBytes - size of a relocation entry
     56   unsigned int m_EntryBytes;
     57 
     58   /// m_isVisit - First time visit the function getEntry() or not
     59   bool m_isVisit ;
     60 
     61   /// m_ValidEntryIterator - point to the first valid entry
     62   MCFragmentIterator m_ValidEntryIterator;
     63 
     64   /// m_SymRelMap - map the resolved symbol to the Relocation entry
     65   SymRelMapType m_SymRelMap;
     66 };
     67 
     68 } // namespace of mcld
     69 
     70 #endif
     71 
     72