diff --git a/arch/mips/arch_mips.cpp b/arch/mips/arch_mips.cpp index 692679ecd..6150e5787 100644 --- a/arch/mips/arch_mips.cpp +++ b/arch/mips/arch_mips.cpp @@ -2727,10 +2727,6 @@ class MipsArchitecture: public Architecture return registers; } - - MipsVersion GetMIPSVersion() { - return m_version; - } }; class MipsO32CallingConvention: public CallingConvention @@ -3412,8 +3408,11 @@ class MipsElfRelocationHandler: public RelocationHandler uint32_t inst2 = *(uint32_t*)(cur->relocationDataCache); Instruction instruction; memset(&instruction, 0, sizeof(instruction)); - MipsArchitecture& march = dynamic_cast(*arch); - if (mips_decompose(&inst2, sizeof(uint32_t), &instruction, march.GetMIPSVersion(), cur->address, arch->GetEndianness(), DECOMPOSE_FLAGS_PSEUDO_OP)) + auto version = arch->GetAddressSize() == 8 ? MIPS_64 : MIPS_32; + if (Architecture::GetByName("r5900l") == arch) + version = MIPS_R5900; + if (mips_decompose(&inst2, sizeof(uint32_t), &instruction, + version, cur->address, arch->GetEndianness(), DECOMPOSE_FLAGS_PSEUDO_OP)) break; int32_t immediate = swap(inst2) & 0xffff;