From e7c57fbd0bec18f346991f4bf4120c2dbd7f4054 Mon Sep 17 00:00:00 2001 From: TuxSH Date: Wed, 31 Jan 2018 01:22:45 +0100 Subject: [PATCH] Fix 85d7ac4 --- nx/source/runtime/env.c | 4 ++-- nx/source/runtime/init.c | 4 ++-- nx/source/runtime/switch_crt0.s | 11 ++++------- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/nx/source/runtime/env.c b/nx/source/runtime/env.c index 6cbd2c73..fc5b7f0a 100644 --- a/nx/source/runtime/env.c +++ b/nx/source/runtime/env.c @@ -4,7 +4,7 @@ #include "services/sm.h" #include "services/fatal.h" -void NORETURN __nx_exit(LoaderReturnFn retaddr, Result rc); +void NORETURN __nx_exit(Result rc, LoaderReturnFn retaddr); static bool g_isNso = false; static Handle g_mainThreadHandle = INVALID_HANDLE; @@ -90,7 +90,7 @@ void envSetup(void* ctx, Handle main_thread, LoaderReturnFn saved_lr) if (ent->Flags & EntryFlag_IsMandatory) { // Encountered unknown but mandatory key, bail back to loader. - __nx_exit(g_loaderRetAddr, MAKERESULT(346, 100 + ent->Key)); + __nx_exit(MAKERESULT(346, 100 + ent->Key), g_loaderRetAddr); } break; diff --git a/nx/source/runtime/init.c b/nx/source/runtime/init.c index 1c46c812..536f8265 100644 --- a/nx/source/runtime/init.c +++ b/nx/source/runtime/init.c @@ -8,7 +8,7 @@ #include "runtime/devices/fs_dev.h" void* __stack_top; -void NORETURN __nx_exit(LoaderReturnFn retaddr, Result rc); +void NORETURN __nx_exit(Result rc, LoaderReturnFn retaddr); void virtmemSetup(void); void newlibSetup(void); @@ -134,5 +134,5 @@ void __attribute__((weak)) NORETURN __libnx_exit(int rc) // Clean up services. __appExit(); - __nx_exit(envGetExitFuncPtr(), 0); + __nx_exit(0, envGetExitFuncPtr()); } diff --git a/nx/source/runtime/switch_crt0.s b/nx/source/runtime/switch_crt0.s index 11986e5e..3fe3083f 100644 --- a/nx/source/runtime/switch_crt0.s +++ b/nx/source/runtime/switch_crt0.s @@ -62,13 +62,10 @@ bss_loop: .global __nx_exit .type __nx_exit, %function __nx_exit: - mov x8, x0 - // restore stack pointer - adrp x0, __stack_top - ldr x0, [x0, #:lo12:__stack_top] - mov sp, x0 + adrp x8, __stack_top + ldr x8, [x8, #:lo12:__stack_top] + mov sp, x8 // jump back to loader - mov x0, #0 - br x8 + br x1