1f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines//===- HexagonGOTPLT.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_HEXAGONGOTPLT_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define TARGET_HEXAGON_HEXAGONGOTPLT_H_
11f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
12f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include "HexagonGOT.h"
1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include <llvm/ADT/DenseMap.h>
14f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
15f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesnamespace mcld {
16f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
17f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesclass HexagonPLT;
18f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesclass LDSection;
19f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
20f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines// Hexagon creates 4 entries for the GOTPLT0 entry
21f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesconst unsigned int HexagonGOTPLT0Num = 4;
22f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
23f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines/** \class HexagonGOTPLT
24f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines *  \brief Hexagon .got.plt section.
25f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines */
2637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass HexagonGOTPLT : public HexagonGOT {
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  explicit HexagonGOTPLT(LDSection& pSection);
29f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
30f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  ~HexagonGOTPLT();
31f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
32f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  // hasGOT1 - return if this section has any GOT1 entry
33f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  bool hasGOT1() const;
34f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
35f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  void applyGOT0(uint64_t pAddress);
36f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
37f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  void applyAllGOTPLT(const HexagonPLT& pPLT);
38f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines};
39f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
41f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines
4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // TARGET_HEXAGON_HEXAGONGOTPLT_H_
43