ARMRelocator.h revision 22add6ff3426df1a85089fe6a6e1597ee3b6f300
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===-  ARMRelocationFactory.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//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef ARM_RELOCATION_FACTORY_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define ARM_RELOCATION_FACTORY_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/RelocationFactory.h>
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Target/GOT.h>
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Target/SymbolEntryMap.h>
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "ARMLDBackend.h"
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld {
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class ARMRelocationFactory
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief ARMRelocationFactory creates and destroys the ARM relocations.
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass ARMRelocationFactory : public RelocationFactory
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  typedef SymbolEntryMap<GOT::Entry> SymGOTMap;
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  typedef SymbolEntryMap<PLT::Entry> SymPLTMap;
3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic:
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ARMRelocationFactory(size_t pNum, ARMGNULDBackend& pParent);
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ~ARMRelocationFactory();
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  Result applyRelocation(Relocation& pRelocation);
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ARMGNULDBackend& getTarget()
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_Target; }
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const ARMGNULDBackend& getTarget() const
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_Target; }
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  const char* getName(Relocation::Type pType) const;
4567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const SymGOTMap& getSymGOTMap() const { return m_SymGOTMap; }
4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SymGOTMap&       getSymGOTMap()       { return m_SymGOTMap; }
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const SymPLTMap& getSymPLTMap() const { return m_SymPLTMap; }
5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SymPLTMap&       getSymPLTMap()       { return m_SymPLTMap; }
5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const SymGOTMap& getSymGOTPLTMap() const { return m_SymGOTPLTMap; }
5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SymGOTMap&       getSymGOTPLTMap()       { return m_SymGOTPLTMap; }
5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate:
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ARMGNULDBackend& m_Target;
5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SymGOTMap m_SymGOTMap;
5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SymPLTMap m_SymPLTMap;
5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SymGOTMap m_SymGOTPLTMap;
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
65affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
66