HexagonRelocator.h revision 6f75755c9204b1d8817ae5a65a2f7e5af0ec3f70
16f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===- HexagonRelocator.h ------------------------------------------------===// 26f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// 36f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// The MCLinker Project 46f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// 56f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// This file is distributed under the University of Illinois Open Source 66f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// License. See LICENSE.TXT for details. 76f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// 86f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===// 96f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#ifndef HEXAGON_RELOCATION_FACTORY_H 106f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#define HEXAGON_RELOCATION_FACTORY_H 116f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#ifdef ENABLE_UNITTEST 126f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <gtest.h> 136f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#endif 146f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 156f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <mcld/LD/Relocator.h> 166f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <mcld/Target/GOT.h> 176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <mcld/Target/PLT.h> 186f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <mcld/Target/SymbolEntryMap.h> 196f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include "HexagonLDBackend.h" 206f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 216f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesnamespace mcld { 226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 236f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesclass ResolveInfo; 246f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 256f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines/** \class HexagonRelocator 266f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * \brief HexagonRelocator creates and destroys the Hexagon relocations. 276f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * 286f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines */ 296f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesclass HexagonRelocator : public Relocator 306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinespublic: 326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef SymbolEntryMap<PLTEntryBase> SymPLTMap; 336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef SymbolEntryMap<HexagonGOTEntry> SymGOTMap; 346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 356f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinespublic: 366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines HexagonRelocator(HexagonLDBackend& pParent); 376f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ~HexagonRelocator(); 386f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 396f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines Result applyRelocation(Relocation& pRelocation); 406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines HexagonLDBackend& getTarget() 426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { return m_Target; } 436f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 446f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const HexagonLDBackend& getTarget() const 456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { return m_Target; } 466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const char* getName(Relocation::Type pType) const; 486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines Size getSize(Relocation::Type pType) const; 506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const SymPLTMap& getSymPLTMap() const { return m_SymPLTMap; } 526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines SymPLTMap& getSymPLTMap() { return m_SymPLTMap; } 536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const SymGOTMap& getSymGOTMap() const { return m_SymGOTMap; } 556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines SymGOTMap& getSymGOTMap() { return m_SymGOTMap; } 566f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 576f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesprivate: 586f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines HexagonLDBackend& m_Target; 596f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines SymPLTMap m_SymPLTMap; 606f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines SymGOTMap m_SymGOTMap; 616f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines}; 626f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 636f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} // namespace of mcld 646f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 656f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#endif 666f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 67