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