mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-29 23:19:01 -05:00 
			
		
		
		
	Merge pull request #1551 from ogniK5377/improved-svcbreak
Added break types to svcBreak
This commit is contained in:
		| @@ -375,9 +375,19 @@ static ResultCode ArbitrateUnlock(VAddr mutex_addr) { | ||||
|     return Mutex::Release(mutex_addr); | ||||
| } | ||||
|  | ||||
| enum class BreakType : u32 { | ||||
|     Panic = 0, | ||||
|     AssertionFailed = 1, | ||||
|     PreNROLoad = 3, | ||||
|     PostNROLoad = 4, | ||||
|     PreNROUnload = 5, | ||||
|     PostNROUnload = 6, | ||||
| }; | ||||
|  | ||||
| struct BreakReason { | ||||
|     union { | ||||
|         u32 raw; | ||||
|         BitField<0, 30, BreakType> break_type; | ||||
|         BitField<31, 1, u32> signal_debugger; | ||||
|     }; | ||||
| }; | ||||
| @@ -385,12 +395,48 @@ struct BreakReason { | ||||
| /// Break program execution | ||||
| static void Break(u32 reason, u64 info1, u64 info2) { | ||||
|     BreakReason break_reason{reason}; | ||||
|     if (break_reason.signal_debugger) { | ||||
|         LOG_ERROR( | ||||
|  | ||||
|     switch (break_reason.break_type) { | ||||
|     case BreakType::Panic: | ||||
|         LOG_CRITICAL(Debug_Emulated, "Signalling debugger, PANIC! info1=0x{:016X}, info2=0x{:016X}", | ||||
|                      info1, info2); | ||||
|         break; | ||||
|     case BreakType::AssertionFailed: | ||||
|         LOG_CRITICAL(Debug_Emulated, | ||||
|                      "Signalling debugger, Assertion failed! info1=0x{:016X}, info2=0x{:016X}", | ||||
|                      info1, info2); | ||||
|         break; | ||||
|     case BreakType::PreNROLoad: | ||||
|         LOG_WARNING( | ||||
|             Debug_Emulated, | ||||
|             "Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", | ||||
|             reason, info1, info2); | ||||
|     } else { | ||||
|             "Signalling debugger, Attempting to load an NRO at 0x{:016X} with size 0x{:016X}", | ||||
|             info1, info2); | ||||
|         break; | ||||
|     case BreakType::PostNROLoad: | ||||
|         LOG_WARNING(Debug_Emulated, | ||||
|                     "Signalling debugger, Loaded an NRO at 0x{:016X} with size 0x{:016X}", info1, | ||||
|                     info2); | ||||
|         break; | ||||
|     case BreakType::PreNROUnload: | ||||
|         LOG_WARNING( | ||||
|             Debug_Emulated, | ||||
|             "Signalling debugger, Attempting to unload an NRO at 0x{:016X} with size 0x{:016X}", | ||||
|             info1, info2); | ||||
|         break; | ||||
|     case BreakType::PostNROUnload: | ||||
|         LOG_WARNING(Debug_Emulated, | ||||
|                     "Signalling debugger, Unloaded an NRO at 0x{:016X} with size 0x{:016X}", info1, | ||||
|                     info2); | ||||
|         break; | ||||
|     default: | ||||
|         LOG_WARNING( | ||||
|             Debug_Emulated, | ||||
|             "Signalling debugger, Unknown break reason {}, info1=0x{:016X}, info2=0x{:016X}", | ||||
|             static_cast<u32>(break_reason.break_type.Value()), info1, info2); | ||||
|         break; | ||||
|     } | ||||
|  | ||||
|     if (!break_reason.signal_debugger) { | ||||
|         LOG_CRITICAL( | ||||
|             Debug_Emulated, | ||||
|             "Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei