Browse Source
Merge pull request #1459 from ogniK5377/break
svcBreak, Signalling to the debugger should not kill execution
pull/15/merge
bunnei
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
20 additions and
5 deletions
-
src/core/hle/kernel/svc.cpp
|
|
|
@ -301,13 +301,28 @@ static ResultCode ArbitrateUnlock(VAddr mutex_addr) { |
|
|
|
return Mutex::Release(mutex_addr); |
|
|
|
} |
|
|
|
|
|
|
|
struct BreakReason { |
|
|
|
union { |
|
|
|
u64 raw; |
|
|
|
BitField<31, 1, u64> dont_kill_application; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
/// Break program execution
|
|
|
|
static void Break(u64 reason, u64 info1, u64 info2) { |
|
|
|
LOG_CRITICAL( |
|
|
|
Debug_Emulated, |
|
|
|
"Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", |
|
|
|
reason, info1, info2); |
|
|
|
ASSERT(false); |
|
|
|
BreakReason break_reason{reason}; |
|
|
|
if (break_reason.dont_kill_application) { |
|
|
|
LOG_ERROR( |
|
|
|
Debug_Emulated, |
|
|
|
"Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", |
|
|
|
reason, info1, info2); |
|
|
|
} else { |
|
|
|
LOG_CRITICAL( |
|
|
|
Debug_Emulated, |
|
|
|
"Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", |
|
|
|
reason, info1, info2); |
|
|
|
ASSERT(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// Used to output a message on a debug hardware unit - does nothing on a retail unit
|
|
|
|
|