1affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===- OutputRelocSection.h -----------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef MCLD_TARGET_OUTPUTRELOCSECTION_H
1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define MCLD_TARGET_OUTPUTRELOCSECTION_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/LD/RelocData.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LDSymbol;
1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Module;
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass Relocation;
2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass RelocationFactory;
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class OutputRelocSection
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief Dynamic relocation section for ARM .rel.dyn and .rel.plt
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass OutputRelocSection
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
28d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  OutputRelocSection(Module& pModule, LDSection& pSection);
29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ~OutputRelocSection();
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  /// create - create an dynamic relocation entry
3387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  Relocation* create();
3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
35d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  void reserveEntry(size_t pNum=1);
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  Relocation* consumeEntry();
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// addSymbolToDynSym - add local symbol to TLS category so that it'll be
4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// emitted into .dynsym
4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  bool addSymbolToDynSym(LDSymbol& pSymbol);
42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // ----- observers ----- //
4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  bool empty()
4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  { return m_pRelocData->empty(); }
46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
47d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  size_t numOfRelocs();
48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate:
50d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  typedef RelocData::iterator RelocIterator;
51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
52affc150dc44fab1911775a49636d0ce85333b634Zonr Changprivate:
5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  Module& m_Module;
5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// m_RelocData - the output RelocData which contains the dynamic
5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// relocations
5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  RelocData* m_pRelocData;
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// m_isVisit - First time visit the function getEntry() or not
60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  bool m_isVisit;
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  /// m_ValidEntryIterator - point to the first valid entry
63d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  RelocIterator m_ValidEntryIterator;
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
70