187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===- MipsPLT.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_MIPSPLT_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define TARGET_MIPS_MIPSPLT_H_
1187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/MemoryRegion.h"
1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Target/PLT.h"
1487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesnamespace mcld {
1687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1787f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass MipsGOTPLT;
1887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===----------------------------------------------------------------------===//
2087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// MipsPLT
2187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===----------------------------------------------------------------------===//
2287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/** \class MipsPLT
2387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines *  \brief Mips Procedure Linkage Table
2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines */
2537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass MipsPLT : public PLT {
2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  explicit MipsPLT(LDSection& pSection);
2887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
29cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines  void finalizeSectionSize();
30cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines
3187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  // hasPLT1 - return if this PLT has any PLTA/PLTB entries
3287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  bool hasPLT1() const;
3387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  uint64_t emit(MemoryRegion& pRegion);
3587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
36cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines  PLTEntryBase* create();
3787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
3887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  void applyAllPLT(MipsGOTPLT& pGOTPLT);
3987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines};
4087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
4287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // TARGET_MIPS_MIPSPLT_H_
44