summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorPokechu22 <pokechu022@gmail.com>2022-10-29 12:34:00 -0700
committerGitHub <noreply@github.com>2022-10-29 12:34:00 -0700
commit6dcf8a6fc98a1aa4451d6ed40cd057bf9e6430be (patch)
treecdc0e576e82d202bfa307972b0dac74afea5d4b4 /Source
parentaeb0fcb8abdcd8cec3aa36b0c43753ecdf876800 (diff)
parente2f4400f4941def98af3e2b30696f531baada7a7 (diff)
Merge pull request #11201 from JoshuaMKW/fix-instruction-patches
MemoryPatches: Fix instruction patches
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Common/Debug/MemoryPatches.cpp15
-rw-r--r--Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp2
2 files changed, 5 insertions, 12 deletions
diff --git a/Source/Core/Common/Debug/MemoryPatches.cpp b/Source/Core/Common/Debug/MemoryPatches.cpp
index cbe7258bed..8dd9b5716d 100644
--- a/Source/Core/Common/Debug/MemoryPatches.cpp
+++ b/Source/Core/Common/Debug/MemoryPatches.cpp
@@ -32,6 +32,7 @@ void MemoryPatches::SetPatch(u32 address, u32 value)
void MemoryPatches::SetPatch(u32 address, std::vector<u8> value)
{
+ UnsetPatch(address);
const std::size_t index = m_patches.size();
m_patches.emplace_back(address, std::move(value));
Patch(index);
@@ -44,20 +45,14 @@ const std::vector<MemoryPatch>& MemoryPatches::GetPatches() const
void MemoryPatches::UnsetPatch(u32 address)
{
- const auto it = std::remove_if(m_patches.begin(), m_patches.end(),
- [address](const auto& patch) { return patch.address == address; });
+ const auto it = std::find_if(m_patches.begin(), m_patches.end(),
+ [address](const auto& patch) { return patch.address == address; });
if (it == m_patches.end())
return;
- const std::size_t size = m_patches.size();
- std::size_t index = size - std::distance(it, m_patches.end());
- while (index < size)
- {
- DisablePatch(index);
- ++index;
- }
- m_patches.erase(it, m_patches.end());
+ const std::size_t index = std::distance(m_patches.begin(), it);
+ RemovePatch(index);
}
void MemoryPatches::EnablePatch(std::size_t index)
diff --git a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
index cdccd40732..06676c4b21 100644
--- a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
@@ -513,7 +513,6 @@ void CodeViewWidget::SetAddress(u32 address, SetAddressUpdate update)
void CodeViewWidget::ReplaceAddress(u32 address, ReplaceWith replace)
{
- PowerPC::debug_interface.UnsetPatch(address);
PowerPC::debug_interface.SetPatch(address, replace == ReplaceWith::BLR ? 0x4e800020 : 0x60000000);
Update();
}
@@ -823,7 +822,6 @@ void CodeViewWidget::OnReplaceInstruction()
if (dialog.exec() == QDialog::Accepted)
{
- PowerPC::debug_interface.UnsetPatch(addr);
PowerPC::debug_interface.SetPatch(addr, dialog.GetCode());
Update();
}