diff options
| author | Scott Mansell <phiren@gmail.com> | 2023-02-13 16:08:36 +1300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-13 16:08:36 +1300 |
| commit | a4729a026f97599bbccf9f900d548fba9e391ad3 (patch) | |
| tree | eee7b79d2758d64f44aba40e627b058b3f5a9a1a /Source/Core/Common/DebugInterface.h | |
| parent | f37113204fe8e930c4e33e5e0149fbe0309fe425 (diff) | |
| parent | 6f0266e8deb9b9d46fb6f291db696fed06c1bed0 (diff) | |
Merge pull request #11554 from JosJuice/host-lock-cpu
DolphinQt: Properly lock CPU before accessing emulated memory
Diffstat (limited to 'Source/Core/Common/DebugInterface.h')
| -rw-r--r-- | Source/Core/Common/DebugInterface.h | 61 |
1 files changed, 42 insertions, 19 deletions
diff --git a/Source/Core/Common/DebugInterface.h b/Source/Core/Common/DebugInterface.h index 17c10a1894..da6c2dba82 100644 --- a/Source/Core/Common/DebugInterface.h +++ b/Source/Core/Common/DebugInterface.h @@ -16,6 +16,11 @@ struct MemoryPatch; struct Watch; } // namespace Common::Debug +namespace Core +{ +class CPUThreadGuard; +} // namespace Core + namespace Common { class DebugInterface @@ -42,24 +47,29 @@ public: virtual void ClearWatches() = 0; // Memory Patches - virtual void SetPatch(u32 address, u32 value) = 0; - virtual void SetPatch(u32 address, std::vector<u8> value) = 0; - virtual void SetFramePatch(u32 address, u32 value) = 0; - virtual void SetFramePatch(u32 address, std::vector<u8> value) = 0; + virtual void SetPatch(const Core::CPUThreadGuard& guard, u32 address, u32 value) = 0; + virtual void SetPatch(const Core::CPUThreadGuard& guard, u32 address, std::vector<u8> value) = 0; + virtual void SetFramePatch(const Core::CPUThreadGuard& guard, u32 address, u32 value) = 0; + virtual void SetFramePatch(const Core::CPUThreadGuard& guard, u32 address, + std::vector<u8> value) = 0; virtual const std::vector<Debug::MemoryPatch>& GetPatches() const = 0; - virtual void UnsetPatch(u32 address) = 0; - virtual void EnablePatch(std::size_t index) = 0; - virtual void DisablePatch(std::size_t index) = 0; + virtual void UnsetPatch(const Core::CPUThreadGuard& guard, u32 address) = 0; + virtual void EnablePatch(const Core::CPUThreadGuard& guard, std::size_t index) = 0; + virtual void DisablePatch(const Core::CPUThreadGuard& guard, std::size_t index) = 0; virtual bool HasEnabledPatch(u32 address) const = 0; - virtual void RemovePatch(std::size_t index) = 0; - virtual void ClearPatches() = 0; - virtual void ApplyExistingPatch(std::size_t index) = 0; + virtual void RemovePatch(const Core::CPUThreadGuard& guard, std::size_t index) = 0; + virtual void ClearPatches(const Core::CPUThreadGuard& guard) = 0; + virtual void ApplyExistingPatch(const Core::CPUThreadGuard& guard, std::size_t index) = 0; // Threads - virtual Debug::Threads GetThreads() const = 0; + virtual Debug::Threads GetThreads(const Core::CPUThreadGuard& guard) const = 0; - virtual std::string Disassemble(u32 /*address*/) const { return "NODEBUGGER"; } - virtual std::string GetRawMemoryString(int /*memory*/, u32 /*address*/) const + virtual std::string Disassemble(const Core::CPUThreadGuard* /*guard*/, u32 /*address*/) const + { + return "NODEBUGGER"; + } + virtual std::string GetRawMemoryString(const Core::CPUThreadGuard& /*guard*/, int /*memory*/, + u32 /*address*/) const { return "NODEBUGGER"; } @@ -72,10 +82,20 @@ public: virtual void ClearAllMemChecks() {} virtual bool IsMemCheck(u32 /*address*/, size_t /*size*/) const { return false; } virtual void ToggleMemCheck(u32 /*address*/, bool /*read*/, bool /*write*/, bool /*log*/) {} - virtual u32 ReadMemory(u32 /*address*/) const { return 0; } - virtual void WriteExtraMemory(int /*memory*/, u32 /*value*/, u32 /*address*/) {} - virtual u32 ReadExtraMemory(int /*memory*/, u32 /*address*/) const { return 0; } - virtual u32 ReadInstruction(u32 /*address*/) const { return 0; } + virtual u32 ReadMemory(const Core::CPUThreadGuard& /*guard*/, u32 /*address*/) const { return 0; } + virtual void WriteExtraMemory(const Core::CPUThreadGuard& /*guard*/, int /*memory*/, + u32 /*value*/, u32 /*address*/) + { + } + virtual u32 ReadExtraMemory(const Core::CPUThreadGuard& /*guard*/, int /*memory*/, + u32 /*address*/) const + { + return 0; + } + virtual u32 ReadInstruction(const Core::CPUThreadGuard& /*guard*/, u32 /*address*/) const + { + return 0; + } virtual std::optional<u32> GetMemoryAddressFromInstruction(const std::string& /*instruction*/) const { @@ -85,8 +105,11 @@ public: virtual void SetPC(u32 /*address*/) {} virtual void Step() {} virtual void RunToBreakpoint() {} - virtual u32 GetColor(u32 /*address*/) const { return 0xFFFFFFFF; } + virtual u32 GetColor(const Core::CPUThreadGuard* /*guard*/, u32 /*address*/) const + { + return 0xFFFFFFFF; + } virtual std::string GetDescription(u32 /*address*/) const = 0; - virtual void Clear() = 0; + virtual void Clear(const Core::CPUThreadGuard& guard) = 0; }; } // namespace Common |
