1f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen 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//===----------------------------------------------------------------------===//
9f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
10551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#ifndef TARGET_HEXAGON_HEXAGONABSOLUTESTUB_H
11551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#define TARGET_HEXAGON_HEXAGONABSOLUTESTUB_H
12f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
13f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <llvm/Support/DataTypes.h>
14f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <mcld/Fragment/Stub.h>
15f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <string>
16f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <vector>
17f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
18f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesnamespace mcld
19f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines{
20f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
21f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesclass Relocation;
22f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesclass ResolveInfo;
23f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
24f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines/** \class HexagonAbsoluteStub
25f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines *  \brief Hexagon stub for abs long call from source to target
26f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines *
27f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines */
28f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesclass HexagonAbsoluteStub : public Stub
29f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines{
30f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinespublic:
31f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  HexagonAbsoluteStub(bool pIsOutputPIC);
32f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
33f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  ~HexagonAbsoluteStub();
34f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
35f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  // isMyDuty
36f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  bool isMyDuty(const class Relocation& pReloc,
37f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines                uint64_t pSource,
38f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines                uint64_t pTargetSymValue) const;
39f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
40f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  // observers
41f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  const std::string& name() const;
42f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
43f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  const uint8_t* getContent() const;
44f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
45f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  size_t size() const;
46f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
47f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  size_t alignment() const;
48f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
49f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesprivate:
50f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  HexagonAbsoluteStub(const HexagonAbsoluteStub&);
51f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
52f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  HexagonAbsoluteStub& operator=(const HexagonAbsoluteStub&);
53f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
54f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  /// for doClone
55f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  HexagonAbsoluteStub(const uint32_t* pData,
56f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines               size_t pSize,
57f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines               const_fixup_iterator pBegin,
58f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines               const_fixup_iterator pEnd);
59f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
60f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  /// doClone
61f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  Stub* doClone();
62f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
63f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesprivate:
64f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  std::string m_Name;
65f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  static const uint32_t TEMPLATE[];
66f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  const uint32_t* m_pData;
67f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  size_t m_Size;
68f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines};
69f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
70f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines} // namespace of mcld
71f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
72f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#endif
73