From 31bf9d0019618522dc73be1eec80caf11f5be43e Mon Sep 17 00:00:00 2001 From: iwubcode Date: Fri, 23 Dec 2022 11:57:31 -0600 Subject: [PATCH] Core: add option to apply memory patch to not store the existing value (used during locking) --- Source/Core/Core/Debugger/PPCDebugInterface.cpp | 17 ++++++++++++----- Source/Core/Core/Debugger/PPCDebugInterface.h | 2 +- 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 {