diff options
| author | 2022-07-11 22:48:08 +0100 | |
|---|---|---|
| committer | 2022-07-15 10:03:30 +0100 | |
| commit | 40e39ddd46c90c75e55970a86ac99dc3cab0a26d (patch) | |
| tree | d49ad509eba3c93b0813e14c471349578439dd4a /src | |
| parent | Merge pull request #8540 from lat9nq/copy-nv-ffmpeg (diff) | |
| download | yuzu-40e39ddd46c90c75e55970a86ac99dc3cab0a26d.tar.gz yuzu-40e39ddd46c90c75e55970a86ac99dc3cab0a26d.tar.xz yuzu-40e39ddd46c90c75e55970a86ac99dc3cab0a26d.zip | |
dynarmic: Abort watchpoints ASAP
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/arm/arm_interface.cpp | 1 | ||||
| -rw-r--r-- | src/core/arm/arm_interface.h | 2 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 4 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 4 |
4 files changed, 3 insertions, 8 deletions
diff --git a/src/core/arm/arm_interface.cpp b/src/core/arm/arm_interface.cpp index cef79b245..e72b250be 100644 --- a/src/core/arm/arm_interface.cpp +++ b/src/core/arm/arm_interface.cpp | |||
| @@ -147,7 +147,6 @@ void ARM_Interface::Run() { | |||
| 147 | 147 | ||
| 148 | // Notify the debugger and go to sleep if a watchpoint was hit. | 148 | // Notify the debugger and go to sleep if a watchpoint was hit. |
| 149 | if (Has(hr, watchpoint)) { | 149 | if (Has(hr, watchpoint)) { |
| 150 | RewindBreakpointInstruction(); | ||
| 151 | if (system.DebuggerEnabled()) { | 150 | if (system.DebuggerEnabled()) { |
| 152 | system.GetDebugger().NotifyThreadWatchpoint(current_thread, *HaltedWatchpoint()); | 151 | system.GetDebugger().NotifyThreadWatchpoint(current_thread, *HaltedWatchpoint()); |
| 153 | } | 152 | } |
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index 8a066ed91..c092db9ff 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h | |||
| @@ -203,7 +203,7 @@ public: | |||
| 203 | static constexpr Dynarmic::HaltReason break_loop = Dynarmic::HaltReason::UserDefined2; | 203 | static constexpr Dynarmic::HaltReason break_loop = Dynarmic::HaltReason::UserDefined2; |
| 204 | static constexpr Dynarmic::HaltReason svc_call = Dynarmic::HaltReason::UserDefined3; | 204 | static constexpr Dynarmic::HaltReason svc_call = Dynarmic::HaltReason::UserDefined3; |
| 205 | static constexpr Dynarmic::HaltReason breakpoint = Dynarmic::HaltReason::UserDefined4; | 205 | static constexpr Dynarmic::HaltReason breakpoint = Dynarmic::HaltReason::UserDefined4; |
| 206 | static constexpr Dynarmic::HaltReason watchpoint = Dynarmic::HaltReason::UserDefined5; | 206 | static constexpr Dynarmic::HaltReason watchpoint = Dynarmic::HaltReason::MemoryAbort; |
| 207 | static constexpr Dynarmic::HaltReason no_execute = Dynarmic::HaltReason::UserDefined6; | 207 | static constexpr Dynarmic::HaltReason no_execute = Dynarmic::HaltReason::UserDefined6; |
| 208 | 208 | ||
| 209 | protected: | 209 | protected: |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index 1be5fe1c1..d566e0eea 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp | |||
| @@ -155,7 +155,7 @@ public: | |||
| 155 | const auto match{parent.MatchingWatchpoint(addr, size, type)}; | 155 | const auto match{parent.MatchingWatchpoint(addr, size, type)}; |
| 156 | if (match) { | 156 | if (match) { |
| 157 | parent.halted_watchpoint = match; | 157 | parent.halted_watchpoint = match; |
| 158 | ReturnException(parent.jit.load()->Regs()[15], ARM_Interface::watchpoint); | 158 | parent.jit.load()->HaltExecution(ARM_Interface::watchpoint); |
| 159 | return false; | 159 | return false; |
| 160 | } | 160 | } |
| 161 | 161 | ||
| @@ -204,7 +204,6 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable* | |||
| 204 | 204 | ||
| 205 | // Code cache size | 205 | // Code cache size |
| 206 | config.code_cache_size = 512_MiB; | 206 | config.code_cache_size = 512_MiB; |
| 207 | config.far_code_offset = 400_MiB; | ||
| 208 | 207 | ||
| 209 | // Allow memory fault handling to work | 208 | // Allow memory fault handling to work |
| 210 | if (system.DebuggerEnabled()) { | 209 | if (system.DebuggerEnabled()) { |
| @@ -215,7 +214,6 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable* | |||
| 215 | if (!page_table) { | 214 | if (!page_table) { |
| 216 | // Don't waste too much memory on null_jit | 215 | // Don't waste too much memory on null_jit |
| 217 | config.code_cache_size = 8_MiB; | 216 | config.code_cache_size = 8_MiB; |
| 218 | config.far_code_offset = 4_MiB; | ||
| 219 | } | 217 | } |
| 220 | 218 | ||
| 221 | // Safe optimizations | 219 | // Safe optimizations |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index c437f24b8..8a38ca888 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp | |||
| @@ -198,7 +198,7 @@ public: | |||
| 198 | const auto match{parent.MatchingWatchpoint(addr, size, type)}; | 198 | const auto match{parent.MatchingWatchpoint(addr, size, type)}; |
| 199 | if (match) { | 199 | if (match) { |
| 200 | parent.halted_watchpoint = match; | 200 | parent.halted_watchpoint = match; |
| 201 | ReturnException(parent.jit.load()->GetPC(), ARM_Interface::watchpoint); | 201 | parent.jit.load()->HaltExecution(ARM_Interface::watchpoint); |
| 202 | return false; | 202 | return false; |
| 203 | } | 203 | } |
| 204 | 204 | ||
| @@ -264,7 +264,6 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable* | |||
| 264 | 264 | ||
| 265 | // Code cache size | 265 | // Code cache size |
| 266 | config.code_cache_size = 512_MiB; | 266 | config.code_cache_size = 512_MiB; |
| 267 | config.far_code_offset = 400_MiB; | ||
| 268 | 267 | ||
| 269 | // Allow memory fault handling to work | 268 | // Allow memory fault handling to work |
| 270 | if (system.DebuggerEnabled()) { | 269 | if (system.DebuggerEnabled()) { |
| @@ -275,7 +274,6 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable* | |||
| 275 | if (!page_table) { | 274 | if (!page_table) { |
| 276 | // Don't waste too much memory on null_jit | 275 | // Don't waste too much memory on null_jit |
| 277 | config.code_cache_size = 8_MiB; | 276 | config.code_cache_size = 8_MiB; |
| 278 | config.far_code_offset = 4_MiB; | ||
| 279 | } | 277 | } |
| 280 | 278 | ||
| 281 | // Safe optimizations | 279 | // Safe optimizations |