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