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