122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- ARMToTHMStub.h -----------------------------------------------------===//
222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//                     The MCLinker Project
422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// This file is distributed under the University of Illinois Open Source
622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// License. See LICENSE.TXT for details.
722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef TARGET_ARM_ARMTOTHMSTUB_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define TARGET_ARM_ARMTOTHMSTUB_H_
1122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Fragment/Stub.h"
1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <llvm/Support/DataTypes.h>
1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <string>
1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <vector>
1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld {
1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Relocation;
2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass ResolveInfo;
2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class ARMToTHMStub
2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao *  \brief ARM stub for long call from ARM source to ARM target
2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao *
2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao */
2637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass ARMToTHMStub : public Stub {
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  explicit ARMToTHMStub(bool pIsOutputPIC);
2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  ~ARMToTHMStub();
3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // isMyDuty
3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  bool isMyDuty(const class Relocation& pReloc,
3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                uint64_t pSource,
3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                uint64_t pTargetSymValue) const;
3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // observers
3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const std::string& name() const;
3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const uint8_t* getContent() const;
4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  size_t size() const;
4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  size_t alignment() const;
4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines private:
4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  ARMToTHMStub(const ARMToTHMStub&);
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  ARMToTHMStub& operator=(const ARMToTHMStub&);
5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// for doClone
5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  ARMToTHMStub(const uint32_t* pData,
5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao               size_t pSize,
5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao               const_fixup_iterator pBegin,
5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao               const_fixup_iterator pEnd);
5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// doClone
5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  Stub* doClone();
5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines private:
6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  static const uint32_t PIC_TEMPLATE[];
6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  static const uint32_t TEMPLATE[];
6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const uint32_t* m_pData;
640dea6bc96bb52346737966839ac68644f7939f58Stephen Hines  std::string m_Name;
6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  size_t m_Size;
6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao};
6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
6837b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
7037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // TARGET_ARM_ARMTOTHMSTUB_H_
71