1//===- X86GOTPLT.h --------------------------------------------------------===//
2//
3//                     The MCLinker Project
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9#ifndef TARGET_X86_X86GOTPLT_H
10#define TARGET_X86_X86GOTPLT_H
11
12#include <llvm/ADT/DenseMap.h>
13
14#include "X86GOT.h"
15
16namespace mcld {
17
18class X86PLT;
19class LDSection;
20
21const unsigned int X86GOTPLT0Num = 3;
22
23/** \class X86_32GOTPLT
24 *  \brief X86_32 .got.plt section.
25 */
26class X86_32GOTPLT : public X86_32GOT
27{
28public:
29  X86_32GOTPLT(LDSection &pSection);
30
31  ~X86_32GOTPLT();
32
33  // hasGOT1 - return if this section has any GOT1 entry
34  bool hasGOT1() const;
35
36  void applyGOT0(uint64_t pAddress);
37
38  void applyAllGOTPLT(const X86PLT& pPLT);
39};
40
41/** \class X86_64GOTPLT
42 *  \brief X86_64 .got.plt section.
43 */
44class X86_64GOTPLT : public X86_64GOT
45{
46public:
47  X86_64GOTPLT(LDSection &pSection);
48
49  ~X86_64GOTPLT();
50
51  // hasGOT1 - return if this section has any GOT1 entry
52  bool hasGOT1() const;
53
54  void applyGOT0(uint64_t pAddress);
55
56  void applyAllGOTPLT(const X86PLT& pPLT);
57};
58
59} // namespace of mcld
60
61#endif
62
63