diff --git a/Core/MIPS/JitCommon/JitCommon.cpp b/Core/MIPS/JitCommon/JitCommon.cpp index 26c2954a6f..22cd53854a 100644 --- a/Core/MIPS/JitCommon/JitCommon.cpp +++ b/Core/MIPS/JitCommon/JitCommon.cpp @@ -168,11 +168,15 @@ const char *ppsspp_resolver(struct ud*, } // But these do. - if (MIPSComp::jit->IsInSpace((u8 *)(intptr_t)addr)) { - *offset = addr - (uint64_t)MIPSComp::jit->GetBasePtr(); - return "jitcode"; - } + // UGLY HACK because the API is terrible + static char buf[128]; + std::string str; + if (MIPSComp::jit->DescribeCodePtr((u8 *)(uintptr_t)addr, str)) { + *offset = 0; + truncate_cpy(buf, sizeof(buf), str.c_str()); + return buf; + } return NULL; } diff --git a/Core/MIPS/x86/Jit.cpp b/Core/MIPS/x86/Jit.cpp index 88bcfff1a2..e1f2c517b1 100644 --- a/Core/MIPS/x86/Jit.cpp +++ b/Core/MIPS/x86/Jit.cpp @@ -441,34 +441,51 @@ void Jit::AddContinuedBlock(u32 dest) } bool Jit::DescribeCodePtr(const u8 *ptr, std::string &name) { - u32 jitAddr = blocks.GetAddressFromBlockPtr(ptr); + if (ptr == applyRoundingMode) + name = "applyRoundingMode"; + else if (ptr == updateRoundingMode) + name = "updateRoundingMode"; + else if (ptr == dispatcher) + name = "dispatcher"; + else if (ptr == dispatcherInEAXNoCheck) + name = "dispatcher (PC in EAX)"; + else if (ptr == dispatcherNoCheck) + name = "dispatcherNoCheck"; + else if (ptr == dispatcherCheckCoreState) + name = "dispatcherCheckCoreState"; + else if (ptr == enterDispatcher) + name = "enterDispatcher"; + else if (ptr == restoreRoundingMode) + name = "restoreRoundingMode"; + else { + u32 jitAddr = blocks.GetAddressFromBlockPtr(ptr); - // Returns 0 when it's valid, but unknown. - if (jitAddr == 0) { - name = "UnknownOrDeletedBlock"; - } else if (jitAddr != (u32)-1) { - char temp[1024]; - const std::string label = symbolMap.GetDescription(jitAddr); - if (!label.empty()) - snprintf(temp, sizeof(temp), "%08x_%s", jitAddr, label.c_str()); - else - snprintf(temp, sizeof(temp), "%08x", jitAddr); - name = temp; - } else if (IsInSpace(ptr)) { - if (ptr < endOfPregeneratedCode) { - name = "PreGenCode"; + // Returns 0 when it's valid, but unknown. + if (jitAddr == 0) { + name = "UnknownOrDeletedBlock"; + } else if (jitAddr != (u32)-1) { + char temp[1024]; + const std::string label = symbolMap.GetDescription(jitAddr); + if (!label.empty()) + snprintf(temp, sizeof(temp), "%08x_%s", jitAddr, label.c_str()); + else + snprintf(temp, sizeof(temp), "%08x", jitAddr); + name = temp; + } else if (IsInSpace(ptr)) { + if (ptr < endOfPregeneratedCode) { + name = "PreGenCode"; + } else { + name = "Unknown"; + } + } else if (thunks.IsInSpace(ptr)) { + name = "Thunk"; + } else if (safeMemFuncs.IsInSpace(ptr)) { + name = "JitSafeMem"; } else { - name = "Unknown"; + // Not anywhere in jit, then. + return false; } - } else if (thunks.IsInSpace(ptr)) { - name = "Thunk"; - } else if (safeMemFuncs.IsInSpace(ptr)) { - name = "JitSafeMem"; - } else { - // Not anywhere in jit, then. - return false; } - // If we got here, one of the above cases matched. return true; }