187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===- MipsLA25Stub.h -----------------------------------------------------===//
287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//
387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//                     The MCLinker Project
487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//
587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// This file is distributed under the University of Illinois Open Source
687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// License. See LICENSE.TXT for details.
787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//
887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef TARGET_MIPS_MIPSLA25STUB_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define TARGET_MIPS_MIPSLA25STUB_H_
1187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Fragment/Stub.h"
1387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1437b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld {
1587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1687f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass MipsGNULDBackend;
1787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass Relocation;
1887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===----------------------------------------------------------------------===//
2087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// MipsLA25Stub
2187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===----------------------------------------------------------------------===//
2287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/** \class MipsLA25Stub
2387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines *  \brief Mips stub for a non-PIC interface to a PIC function.
2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines */
2537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass MipsLA25Stub : public Stub {
2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  explicit MipsLA25Stub(const MipsGNULDBackend& pTarget);
2887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines private:
3087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  // Stub
3187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  Stub* doClone();
3287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  bool isMyDuty(const Relocation& pReloc,
3387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines                uint64_t pSource,
3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines                uint64_t pTargetSymValue) const;
3587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  const std::string& name() const;
3687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  const uint8_t* getContent() const;
3787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  size_t size() const;
3887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  size_t alignment() const;
3987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines private:
4187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  MipsLA25Stub(const MipsLA25Stub&);
4287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  MipsLA25Stub& operator=(const MipsLA25Stub&);
4387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  MipsLA25Stub(const MipsGNULDBackend& pTarget,
4587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines               const uint32_t* pData,
4687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines               size_t pSize,
4787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines               const_fixup_iterator pBegin,
4887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines               const_fixup_iterator pEnd);
4987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
5037b74a387bb3993387029859c2d9d051c41c724eStephen Hines private:
5187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  const MipsGNULDBackend& m_Target;
5287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  const std::string m_Name;
5387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  const uint32_t* m_pData;
5487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  const size_t m_Size;
5587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines};
5687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
5887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // TARGET_MIPS_MIPSLA25STUB_H_
60