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