summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authoriwubcode <iwubcode@users.noreply.github.com>2022-12-23 11:57:31 -0600
committeriwubcode <iwubcode@users.noreply.github.com>2022-12-23 12:31:33 -0600
commit31bf9d0019618522dc73be1eec80caf11f5be43e (patch)
tree84f3e2ffa6bca7e9ca6f386b0653fe9859425631 /Source/Core
parent190cf5af3085fa3d62575dedb03419fc72a24ffe (diff)
Core: add option to apply memory patch to not store the existing value (used during locking)
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Debugger/PPCDebugInterface.cpp17
-rw-r--r--Source/Core/Core/Debugger/PPCDebugInterface.h2
2 files changed, 13 insertions, 6 deletions
diff --git a/Source/Core/Core/Debugger/PPCDebugInterface.cpp b/Source/Core/Core/Debugger/PPCDebugInterface.cpp
index 33042cef19..75488237ab 100644
--- a/Source/Core/Core/Debugger/PPCDebugInterface.cpp
+++ b/Source/Core/Core/Debugger/PPCDebugInterface.cpp
@@ -24,7 +24,7 @@
#include "Core/PowerPC/PPCSymbolDB.h"
#include "Core/PowerPC/PowerPC.h"
-void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch)
+void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch, bool store_existing_value)
{
if (patch.value.empty())
return;
@@ -36,9 +36,16 @@ void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch)
for (u32 offset = 0; offset < size; ++offset)
{
- const u8 value = PowerPC::HostRead_U8(address + offset);
- PowerPC::HostWrite_U8(patch.value[offset], address + offset);
- patch.value[offset] = value;
+ if (store_existing_value)
+ {
+ const u8 value = PowerPC::HostRead_U8(address + offset);
+ PowerPC::HostWrite_U8(patch.value[offset], address + offset);
+ patch.value[offset] = value;
+ }
+ else
+ {
+ PowerPC::HostWrite_U8(patch.value[offset], address + offset);
+ }
if (((address + offset) % 4) == 3)
PowerPC::ScheduleInvalidateCacheThreadSafe(Common::AlignDown(address + offset, 4));
@@ -53,7 +60,7 @@ void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch)
void PPCPatches::ApplyExistingPatch(std::size_t index)
{
auto& patch = m_patches[index];
- ApplyMemoryPatch(patch);
+ ApplyMemoryPatch(patch, false);
}
void PPCPatches::Patch(std::size_t index)
diff --git a/Source/Core/Core/Debugger/PPCDebugInterface.h b/Source/Core/Core/Debugger/PPCDebugInterface.h
index 316ca14c10..4d44481a8b 100644
--- a/Source/Core/Core/Debugger/PPCDebugInterface.h
+++ b/Source/Core/Core/Debugger/PPCDebugInterface.h
@@ -12,7 +12,7 @@
#include "Common/DebugInterface.h"
#include "Core/NetworkCaptureLogger.h"
-void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch);
+void ApplyMemoryPatch(Common::Debug::MemoryPatch& patch, bool store_existing_value = true);
class PPCPatches final : public Common::Debug::MemoryPatches
{