diff options
Diffstat (limited to 'Source/Core/DolphinQt2/Debugger/CodeViewWidget.cpp')
| -rw-r--r-- | Source/Core/DolphinQt2/Debugger/CodeViewWidget.cpp | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/Source/Core/DolphinQt2/Debugger/CodeViewWidget.cpp b/Source/Core/DolphinQt2/Debugger/CodeViewWidget.cpp index 01e9f726c9..5cf89ebc60 100644 --- a/Source/Core/DolphinQt2/Debugger/CodeViewWidget.cpp +++ b/Source/Core/DolphinQt2/Debugger/CodeViewWidget.cpp @@ -199,26 +199,8 @@ void CodeViewWidget::SetAddress(u32 address, SetAddressUpdate update) void CodeViewWidget::ReplaceAddress(u32 address, ReplaceWith replace) { - auto found = std::find_if(m_repl_list.begin(), m_repl_list.end(), - [address](ReplStruct r) { return r.address == address; }); - - if (found != m_repl_list.end()) - { - PowerPC::debug_interface.WriteExtraMemory(0, found->old_value, address); - m_repl_list.erase(found); - } - else - { - ReplStruct repl; - - repl.address = address; - repl.old_value = PowerPC::debug_interface.ReadInstruction(address); - - m_repl_list.push_back(repl); - - PowerPC::debug_interface.Patch(address, replace == ReplaceWith::BLR ? 0x4e800020 : 0x60000000); - } - + PowerPC::debug_interface.UnsetPatch(address); + PowerPC::debug_interface.SetPatch(address, replace == ReplaceWith::BLR ? 0x4e800020 : 0x60000000); Update(); } @@ -261,6 +243,8 @@ void CodeViewWidget::OnContextMenu() auto* insert_nop_action = AddAction(menu, tr("Insert &nop"), this, &CodeViewWidget::OnInsertNOP); auto* replace_action = AddAction(menu, tr("Re&place instruction"), this, &CodeViewWidget::OnReplaceInstruction); + auto* restore_action = + AddAction(menu, tr("Restore instruction"), this, &CodeViewWidget::OnRestoreInstruction); follow_branch_action->setEnabled(running && GetBranchFromAddress(addr)); @@ -271,6 +255,8 @@ void CodeViewWidget::OnContextMenu() for (auto* action : {symbol_rename_action, symbol_size_action, symbol_end_action}) action->setEnabled(has_symbol); + restore_action->setEnabled(running && PowerPC::debug_interface.HasEnabledPatch(addr)); + menu->exec(QCursor::pos()); Update(); } @@ -474,11 +460,20 @@ void CodeViewWidget::OnReplaceInstruction() if (good) { - PowerPC::debug_interface.Patch(addr, code); + PowerPC::debug_interface.UnsetPatch(addr); + PowerPC::debug_interface.SetPatch(addr, code); Update(); } } +void CodeViewWidget::OnRestoreInstruction() +{ + const u32 addr = GetContextAddress(); + + PowerPC::debug_interface.UnsetPatch(addr); + Update(); +} + void CodeViewWidget::resizeEvent(QResizeEvent*) { Update(); |
