• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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