mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	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}",
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user