diff options
| author | 2018-10-09 16:57:37 -0400 | |
|---|---|---|
| committer | 2018-10-09 16:57:37 -0400 | |
| commit | fe16905de1433064ffcf601755d364f4c0438ea4 (patch) | |
| tree | 2b07c1f1bd1e06cc504f40575126ecdbc2e3c7e8 /src | |
| parent | Merge pull request #1465 from lioncash/telemetry (diff) | |
| parent | Added bitfield instead of manually checking if the bit is set (diff) | |
| download | yuzu-fe16905de1433064ffcf601755d364f4c0438ea4.tar.gz yuzu-fe16905de1433064ffcf601755d364f4c0438ea4.tar.xz yuzu-fe16905de1433064ffcf601755d364f4c0438ea4.zip | |
Merge pull request #1459 from ogniK5377/break
svcBreak, Signalling to the debugger should not kill execution
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 6c4af7e47..b488b508d 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -301,13 +301,28 @@ static ResultCode ArbitrateUnlock(VAddr mutex_addr) { | |||
| 301 | return Mutex::Release(mutex_addr); | 301 | return Mutex::Release(mutex_addr); |
| 302 | } | 302 | } |
| 303 | 303 | ||
| 304 | struct BreakReason { | ||
| 305 | union { | ||
| 306 | u64 raw; | ||
| 307 | BitField<31, 1, u64> dont_kill_application; | ||
| 308 | }; | ||
| 309 | }; | ||
| 310 | |||
| 304 | /// Break program execution | 311 | /// Break program execution |
| 305 | static void Break(u64 reason, u64 info1, u64 info2) { | 312 | static void Break(u64 reason, u64 info1, u64 info2) { |
| 306 | LOG_CRITICAL( | 313 | BreakReason break_reason{reason}; |
| 307 | Debug_Emulated, | 314 | if (break_reason.dont_kill_application) { |
| 308 | "Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", | 315 | LOG_ERROR( |
| 309 | reason, info1, info2); | 316 | Debug_Emulated, |
| 310 | ASSERT(false); | 317 | "Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", |
| 318 | reason, info1, info2); | ||
| 319 | } else { | ||
| 320 | LOG_CRITICAL( | ||
| 321 | Debug_Emulated, | ||
| 322 | "Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", | ||
| 323 | reason, info1, info2); | ||
| 324 | ASSERT(false); | ||
| 325 | } | ||
| 311 | } | 326 | } |
| 312 | 327 | ||
| 313 | /// Used to output a message on a debug hardware unit - does nothing on a retail unit | 328 | /// Used to output a message on a debug hardware unit - does nothing on a retail unit |