Home | History | Annotate | Download | only in X86
      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 MCLD_X86_GOTPLT_H
     10 #define MCLD_X86_GOTPLT_H
     11 #ifdef ENABLE_UNITTEST
     12 #include <gtest.h>
     13 #endif
     14 
     15 #include <llvm/ADT/DenseMap.h>
     16 
     17 #include "X86GOT.h"
     18 
     19 namespace mcld {
     20 
     21 class X86PLT;
     22 class LDSection;
     23 
     24 const unsigned int X86GOTPLT0Num = 3;
     25 
     26 /** \class X86_32GOTPLT
     27  *  \brief X86_32 .got.plt section.
     28  */
     29 class X86_32GOTPLT : public X86_32GOT
     30 {
     31 public:
     32   X86_32GOTPLT(LDSection &pSection);
     33 
     34   ~X86_32GOTPLT();
     35 
     36   // hasGOT1 - return if this section has any GOT1 entry
     37   bool hasGOT1() const;
     38 
     39   void applyGOT0(uint64_t pAddress);
     40 
     41   void applyAllGOTPLT(const X86PLT& pPLT);
     42 };
     43 
     44 /** \class X86_64GOTPLT
     45  *  \brief X86_64 .got.plt section.
     46  */
     47 class X86_64GOTPLT : public X86_64GOT
     48 {
     49 public:
     50   X86_64GOTPLT(LDSection &pSection);
     51 
     52   ~X86_64GOTPLT();
     53 
     54   // hasGOT1 - return if this section has any GOT1 entry
     55   bool hasGOT1() const;
     56 
     57   void applyGOT0(uint64_t pAddress);
     58 
     59   void applyAllGOTPLT(const X86PLT& pPLT);
     60 };
     61 
     62 } // namespace of mcld
     63 
     64 #endif
     65 
     66