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//===----------------------------------------------------------------------===//
9551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#ifndef TARGET_X86_X86GOTPLT_H
10551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#define TARGET_X86_X86GOTPLT_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
12cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <llvm/ADT/DenseMap.h>
13cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao
146f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include "X86GOT.h"
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld {
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass X86PLT;
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSection;
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 */
266f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesclass X86_32GOTPLT : public X86_32GOT
27d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao{
28d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaopublic:
296f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  X86_32GOTPLT(LDSection &pSection);
306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  ~X86_32GOTPLT();
326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  // hasGOT1 - return if this section has any GOT1 entry
346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  bool hasGOT1() const;
356f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  void applyGOT0(uint64_t pAddress);
376f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines
386f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  void applyAllGOTPLT(const X86PLT& pPLT);
39d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao};
40d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines/** \class X86_64GOTPLT
426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines *  \brief X86_64 .got.plt section.
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
446f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesclass X86_64GOTPLT : public X86_64GOT
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  X86_64GOTPLT(LDSection &pSection);
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines  ~X86_64GOTPLT();
50d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // hasGOT1 - return if this section has any GOT1 entry
5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  bool hasGOT1() const;
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  void applyGOT0(uint64_t pAddress);
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  void applyAllGOTPLT(const X86PLT& pPLT);
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
63