summaryrefslogtreecommitdiff
path: root/Source/Core/DebuggerWX/Src/JitWindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DebuggerWX/Src/JitWindow.cpp')
-rw-r--r--Source/Core/DebuggerWX/Src/JitWindow.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/Source/Core/DebuggerWX/Src/JitWindow.cpp b/Source/Core/DebuggerWX/Src/JitWindow.cpp
index 4b8de3a64c..81c57e7328 100644
--- a/Source/Core/DebuggerWX/Src/JitWindow.cpp
+++ b/Source/Core/DebuggerWX/Src/JitWindow.cpp
@@ -141,12 +141,26 @@ void CJitWindow::Compare(u32 em_address)
int block_num = jit.GetBlockNumberFromAddress(em_address);
if (block_num < 0)
{
- ppc_box->SetValue(wxString::FromAscii(StringFromFormat("(non-code address: %08x)", em_address).c_str()));
- x86_box->SetValue(wxString::FromAscii(StringFromFormat("(no translation)").c_str()));
- return;
+ for (int i = 0; i < 500; i++) {
+ block_num = jit.GetBlockNumberFromAddress(em_address - 4 * i);
+ if (block_num >= 0)
+ break;
+ }
+ if (block_num >= 0) {
+ Jit64::JitBlock *block = jit.GetBlock(block_num);
+ if (!(block->originalAddress <= em_address && block->originalSize + block->originalAddress >= em_address))
+ block_num = -1;
+ }
+ // Do not merge this "if" with the above - block_num changes inside it.
+ if (block_num < 0) {
+ ppc_box->SetValue(wxString::FromAscii(StringFromFormat("(non-code address: %08x)", em_address).c_str()));
+ x86_box->SetValue(wxString::FromAscii(StringFromFormat("(no translation)").c_str()));
+ return;
+ }
}
Jit64::JitBlock *block = jit.GetBlock(block_num);
+ // 800031f0
// == Fill in x86 box
memset(xDis, 0, 65536);