From 5754be9ff9299fcc9935cfbf2ed7ee1cc89ffd19 Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Mon, 25 Jun 2018 22:25:47 -0600 Subject: [PATCH] Fatal: Only exit process if required, exit cleanly. --- nx/include/switch/services/fatal.h | 2 +- nx/source/services/fatal.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) 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(); + } }