diff options
Diffstat (limited to 'src/core/hle/kernel')
| -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 |