diff --git a/nx/include/switch/services/fatal.h b/nx/include/switch/services/fatal.h index e446fb99..45ddc553 100644 --- a/nx/include/switch/services/fatal.h +++ b/nx/include/switch/services/fatal.h @@ -26,4 +26,4 @@ void NORETURN fatalSimple(Result err); * @param err[in] Type of fatal error to throw. * @note This function does not return. */ -void NORETURN fatalWithType(Result err, FatalType type); +void fatalWithType(Result err, FatalType type); diff --git a/nx/source/services/fatal.c b/nx/source/services/fatal.c index 12c3e686..c3efd037 100644 --- a/nx/source/services/fatal.c +++ b/nx/source/services/fatal.c @@ -10,9 +10,11 @@ void NORETURN fatalSimple(Result err) { /* By default, do not generate an error report. */ fatalWithType(err, FatalType_ErrorScreen); + svcExitProcess(); + __builtin_unreachable(); } -void NORETURN fatalWithType(Result err, FatalType type) { +void fatalWithType(Result err, FatalType type) { Result rc = 0; if (detectDebugger()) { @@ -49,7 +51,14 @@ void NORETURN fatalWithType(Result err, FatalType type) { ipcDispatch(srv); } } - - ((void(*)())0xBADC0DE)(); - __builtin_unreachable(); + + switch (type) { + case FatalType_ErrorReport: + break; + case FatalType_ErrorReportAndErrorScreen: + case FatalType_ErrorScreen: + default: + svcExitProcess(); + __builtin_unreachable(); + } }