diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 25 | 
1 files changed, 20 insertions, 5 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 6c4af7e47..b488b508d 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/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  | 
