| //===- MipsPLT.h ----------------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef TARGET_MIPS_MIPSPLT_H |
| #define TARGET_MIPS_MIPSPLT_H |
| |
| #include <mcld/Target/PLT.h> |
| #include <mcld/Support/MemoryRegion.h> |
| |
| namespace mcld { |
| |
| class MipsGOTPLT; |
| |
| //===----------------------------------------------------------------------===// |
| // MipsPLT |
| //===----------------------------------------------------------------------===// |
| /** \class MipsPLT |
| * \brief Mips Procedure Linkage Table |
| */ |
| class MipsPLT : public PLT |
| { |
| public: |
| MipsPLT(LDSection& pSection); |
| |
| // hasPLT1 - return if this PLT has any PLTA/PLTB entries |
| bool hasPLT1() const; |
| |
| uint64_t emit(MemoryRegion& pRegion); |
| |
| Fragment* consume(); |
| |
| void applyAllPLT(MipsGOTPLT& pGOTPLT); |
| |
| public: |
| // PLT |
| void reserveEntry(size_t pNum = 1); |
| void finalizeSectionSize(); |
| |
| private: |
| // the last consumed entry. |
| SectionData::iterator m_Last; |
| }; |
| |
| } // namespace of mcld |
| |
| #endif |