DebugInterface: MemoryPatches methods added

CodeView: Restore instruction added
This commit is contained in:
Sepalani
2018-05-21 18:46:03 +04:00
parent 7eaba154a4
commit 8fa898fe9a
15 changed files with 365 additions and 81 deletions

View File

@ -45,6 +45,7 @@ enum
IDM_INSERTBLR,
IDM_INSERTNOP,
IDM_ASSEMBLE,
IDM_RESTORE,
IDM_RUNTOHERE,
IDM_JITRESULTS,
IDM_FOLLOWBRANCH,
@ -201,36 +202,10 @@ u32 CCodeView::AddrToBranch(u32 addr)
return 0;
}
void CCodeView::InsertBlrNop(int Blr)
void CCodeView::InsertBlrNop(int blr)
{
// Check if this address has been modified
int find = -1;
for (u32 i = 0; i < m_blrList.size(); i++)
{
if (m_blrList.at(i).address == m_selection)
{
find = i;
break;
}
}
// Save the old value
if (find >= 0)
{
m_debugger->WriteExtraMemory(0, m_blrList.at(find).oldValue, m_selection);
m_blrList.erase(m_blrList.begin() + find);
}
else
{
BlrStruct temp;
temp.address = m_selection;
temp.oldValue = m_debugger->ReadMemory(m_selection);
m_blrList.push_back(temp);
if (Blr == 0)
m_debugger->Patch(m_selection, 0x4e800020);
else
m_debugger->Patch(m_selection, 0x60000000);
}
m_debugger->UnsetPatch(m_selection);
m_debugger->SetPatch(m_selection, (blr == 0) ? 0x4e800020 : 0x60000000);
Refresh();
}
@ -320,13 +295,19 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event)
unsigned long code;
if (dialog.GetValue().ToULong(&code, 0) && code <= std::numeric_limits<u32>::max())
{
m_debugger->Patch(m_selection, code);
m_debugger->UnsetPatch(m_selection);
m_debugger->SetPatch(m_selection, code);
Refresh();
}
}
break;
}
case IDM_RESTORE:
m_debugger->UnsetPatch(m_selection);
Refresh();
break;
case IDM_JITRESULTS:
{
// Propagate back to the parent window and tell it
@ -451,6 +432,8 @@ void CCodeView::OnMouseUpR(wxMouseEvent& event)
menu.Append(IDM_INSERTBLR, _("&Insert blr"))->Enable(Core::IsRunning());
menu.Append(IDM_INSERTNOP, _("Insert &nop"))->Enable(Core::IsRunning());
menu.Append(IDM_ASSEMBLE, _("Re&place instruction"))->Enable(Core::IsRunning());
menu.Append(IDM_RESTORE, _("Restore instruction"))
->Enable(Core::IsRunning() && m_debugger->HasEnabledPatch(m_selection));
// menu.Append(IDM_PATCHALERT, _("Patch alert"))->Enable(Core::IsRunning());
PopupMenu(&menu);
event.Skip();