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
This commit is contained in:
parent
40c63073a9
commit
8042731da9
|
@ -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 {
|
||||||
/// 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}",
|
||||||
|
|
Reference in New Issue