15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- X86GOTPLT.h --------------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef TARGET_X86_X86GOTPLT_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define TARGET_X86_X86GOTPLT_H_
11cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao
126f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include "X86GOT.h"
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include <llvm/ADT/DenseMap.h>
1537b74a387bb3993387029859c2d9d051c41c724eStephen Hines
1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld {
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSection;
1937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass X86PLT;
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
21cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liaoconst unsigned int X86GOTPLT0Num = 3;
22cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao
236f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines/** \class X86_32GOTPLT
246f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines *  \brief X86_32 .got.plt section.
256f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines */
2637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass X86_32GOTPLT : public X86_32GOT {
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  explicit X86_32GOTPLT(LDSection& pSection);
296f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  ~X86_32GOTPLT();
316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  // hasGOT1 - return if this section has any GOT1 entry
336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  bool hasGOT1() const;
346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
356f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  void applyGOT0(uint64_t pAddress);
366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
376f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  void applyAllGOTPLT(const X86PLT& pPLT);
38d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao};
39d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines/** \class X86_64GOTPLT
416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines *  \brief X86_64 .got.plt section.
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass X86_64GOTPLT : public X86_64GOT {
4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines  explicit X86_64GOTPLT(LDSection& pSection);
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  ~X86_64GOTPLT();
48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // hasGOT1 - return if this section has any GOT1 entry
5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  bool hasGOT1() const;
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  void applyGOT0(uint64_t pAddress);
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  void applyAllGOTPLT(const X86PLT& pPLT);
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // TARGET_X86_X86GOTPLT_H_
60