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