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 MCLD_TARGET_OUTPUTRELOCSECTION_H
10#define MCLD_TARGET_OUTPUTRELOCSECTION_H
11
12#include <mcld/LD/RelocData.h>
13
14namespace mcld
15{
16
17class LDSymbol;
18class Module;
19class Relocation;
20class RelocationFactory;
21
22/** \class OutputRelocSection
23 *  \brief Dynamic relocation section for ARM .rel.dyn and .rel.plt
24 */
25class OutputRelocSection
26{
27public:
28  OutputRelocSection(Module& pModule, LDSection& pSection);
29
30  ~OutputRelocSection();
31
32  /// create - create an dynamic relocation entry
33  Relocation* create();
34
35  void reserveEntry(size_t pNum=1);
36
37  Relocation* consumeEntry();
38
39  /// addSymbolToDynSym - add local symbol to TLS category so that it'll be
40  /// emitted into .dynsym
41  bool addSymbolToDynSym(LDSymbol& pSymbol);
42
43  // ----- observers ----- //
44  bool empty()
45  { return m_pRelocData->empty(); }
46
47  size_t numOfRelocs();
48
49private:
50  typedef RelocData::iterator RelocIterator;
51
52private:
53  Module& m_Module;
54
55  /// m_RelocData - the output RelocData which contains the dynamic
56  /// relocations
57  RelocData* m_pRelocData;
58
59  /// m_isVisit - First time visit the function getEntry() or not
60  bool m_isVisit;
61
62  /// m_ValidEntryIterator - point to the first valid entry
63  RelocIterator m_ValidEntryIterator;
64};
65
66} // namespace of mcld
67
68#endif
69
70