137b74a387bb3993387029859c2d9d051c41c724eStephen Hines//===- HexagonAbsoluteStub.h ----------------------------------------------===// 2f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines// 3f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines// The MCLinker Project 4f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines// 5f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines// This file is distributed under the University of Illinois Open Source 6f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines// License. See LICENSE.TXT for details. 7f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines// 8f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef TARGET_HEXAGON_HEXAGONABSOLUTESTUB_H_ 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define TARGET_HEXAGON_HEXAGONABSOLUTESTUB_H_ 11f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Fragment/Stub.h" 13f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <llvm/Support/DataTypes.h> 14f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <string> 15f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <vector> 16f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 1737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 18f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 19f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesclass Relocation; 20f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesclass ResolveInfo; 21f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 22f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines/** \class HexagonAbsoluteStub 23f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines * \brief Hexagon stub for abs long call from source to target 24f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines * 25f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines */ 2637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass HexagonAbsoluteStub : public Stub { 2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines explicit HexagonAbsoluteStub(bool pIsOutputPIC); 29f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 30f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines ~HexagonAbsoluteStub(); 31f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 32f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines // isMyDuty 33f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines bool isMyDuty(const class Relocation& pReloc, 34f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines uint64_t pSource, 35f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines uint64_t pTargetSymValue) const; 36f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 37f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines // observers 38f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines const std::string& name() const; 39f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 40f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines const uint8_t* getContent() const; 41f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 42f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines size_t size() const; 43f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 44f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines size_t alignment() const; 45f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 47f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines HexagonAbsoluteStub(const HexagonAbsoluteStub&); 48f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 49f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines HexagonAbsoluteStub& operator=(const HexagonAbsoluteStub&); 50f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 51f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines /// for doClone 52f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines HexagonAbsoluteStub(const uint32_t* pData, 5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines size_t pSize, 5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines const_fixup_iterator pBegin, 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines const_fixup_iterator pEnd); 56f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 57f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines /// doClone 58f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Stub* doClone(); 59f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 61f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines std::string m_Name; 62f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines static const uint32_t TEMPLATE[]; 63f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines const uint32_t* m_pData; 64f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines size_t m_Size; 65f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines}; 66f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 6737b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 68f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif // TARGET_HEXAGON_HEXAGONABSOLUTESTUB_H_ 70