Skip to content
Snippets Groups Projects
Commit 8042731d authored by David Marcec's avatar David Marcec
Browse files

Added break types to svcBreak

There seems to be more such as type 1, and 2. Unsure what these currently are but when a game hits them we can investigate and add the rest
parent 40c63073
No related branches found
No related tags found
No related merge requests found
...@@ -374,9 +374,18 @@ static ResultCode ArbitrateUnlock(VAddr mutex_addr) { ...@@ -374,9 +374,18 @@ static ResultCode ArbitrateUnlock(VAddr mutex_addr) {
return Mutex::Release(mutex_addr); return Mutex::Release(mutex_addr);
} }
enum BreakType : u32 {
Panic = 0,
PreNROLoad = 3,
PostNROLoad = 4,
PreNROUnload = 5,
PostNROUnload = 6,
};
struct BreakReason { struct BreakReason {
union { union {
u32 raw; u32 raw;
BitField<0, 30, BreakType> break_type;
BitField<31, 1, u32> signal_debugger; BitField<31, 1, u32> signal_debugger;
}; };
}; };
...@@ -384,12 +393,41 @@ struct BreakReason { ...@@ -384,12 +393,41 @@ struct BreakReason {
/// Break program execution /// Break program execution
static void Break(u32 reason, u64 info1, u64 info2) { static void Break(u32 reason, u64 info1, u64 info2) {
BreakReason break_reason{reason}; BreakReason break_reason{reason};
if (break_reason.signal_debugger) {
switch (break_reason.break_type) {
case BreakType::Panic:
LOG_ERROR(Debug_Emulated, "Signalling debugger, PANIC! info1=0x{:016X}, info2=0x{:016X}",
info1, info2);
break;
case BreakType::PreNROLoad:
LOG_ERROR(Debug_Emulated,
"Signalling debugger, Attempting to load an NRO at 0x{:016X} with size 0x{:016X}",
info1, info2);
break;
case BreakType::PostNROLoad:
LOG_ERROR(Debug_Emulated,
"Signalling debugger, Loaded an NRO at 0x{:016X} with size 0x{:016X}", info1,
info2);
break;
case BreakType::PreNROUnload:
LOG_ERROR( LOG_ERROR(
Debug_Emulated, Debug_Emulated,
"Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", "Signalling debugger, Attempting to unload an NRO at 0x{:016X} with size 0x{:016X}",
reason, info1, info2); info1, info2);
} else { break;
case BreakType::PostNROUnload:
LOG_ERROR(Debug_Emulated,
"Signalling debugger, Unloaded an NRO at 0x{:016X} with size 0x{:016X}", info1,
info2);
break;
default:
LOG_ERROR(Debug_Emulated,
"Signalling debugger, Unknown break reason {}, info1=0x{:016X}, info2=0x{:016X}",
static_cast<u32>(break_reason.break_type), info1, info2);
break;
}
if (!break_reason.signal_debugger) {
LOG_CRITICAL( LOG_CRITICAL(
Debug_Emulated, Debug_Emulated,
"Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", "Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment