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