diff options
| author | iwubcode <iwubcode@users.noreply.github.com> | 2022-12-23 11:57:31 -0600 |
|---|---|---|
| committer | iwubcode <iwubcode@users.noreply.github.com> | 2022-12-23 12:31:33 -0600 |
| commit | 31bf9d0019618522dc73be1eec80caf11f5be43e (patch) | |
| tree | 84f3e2ffa6bca7e9ca6f386b0653fe9859425631 /Source/Core | |
| parent | 190cf5af3085fa3d62575dedb03419fc72a24ffe (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.cpp | 17 | ||||
| -rw-r--r-- | 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 { |
