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