Home | History | Annotate | Download | only in ARM
      1 //===- THMToARMStub.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_ARM_THMTOARMSTUB_H_
     10 #define TARGET_ARM_THMTOARMSTUB_H_
     11 
     12 #include "mcld/Fragment/Stub.h"
     13 #include <llvm/Support/DataTypes.h>
     14 #include <string>
     15 
     16 namespace mcld {
     17 
     18 class Relocation;
     19 class ResolveInfo;
     20 
     21 /** \class THMToARMStub
     22  *  \brief ARM stub for long call from ARM source to ARM target
     23  *
     24  */
     25 class THMToARMStub : public Stub {
     26  public:
     27   THMToARMStub(bool pIsOutputPIC, bool pUsingThumb2);
     28 
     29   ~THMToARMStub();
     30 
     31   // isMyDuty
     32   bool isMyDuty(const class Relocation& pReloc,
     33                 uint64_t pSource,
     34                 uint64_t pTargetSymValue) const;
     35 
     36   // observers
     37   const std::string& name() const;
     38 
     39   const uint8_t* getContent() const;
     40 
     41   size_t size() const;
     42 
     43   size_t alignment() const;
     44 
     45   // for T bit of this stub
     46   uint64_t initSymValue() const;
     47 
     48  private:
     49   THMToARMStub(const THMToARMStub&);
     50 
     51   THMToARMStub& operator=(const THMToARMStub&);
     52 
     53   /// for doClone
     54   THMToARMStub(const uint32_t* pData,
     55                size_t pSize,
     56                const_fixup_iterator pBegin,
     57                const_fixup_iterator pEnd,
     58                bool pUsingThumb2);
     59 
     60   /// doClone
     61   Stub* doClone();
     62 
     63  private:
     64   static const uint32_t PIC_TEMPLATE[];
     65   static const uint32_t TEMPLATE[];
     66   const uint32_t* m_pData;
     67   std::string m_Name;
     68   size_t m_Size;
     69   bool m_bUsingThumb2;
     70 };
     71 
     72 }  // namespace mcld
     73 
     74 #endif  // TARGET_ARM_THMTOARMSTUB_H_
     75