From 0a1d0403d15d3968a84c528c914251d1b827085b Mon Sep 17 00:00:00 2001 From: fincs Date: Wed, 20 Aug 2014 22:16:28 +0200 Subject: [PATCH] __ctru_exit(): perform svcExitProcess() if there's no retAddr --- libctru/include/3ds/svc.h | 4 ++-- libctru/source/initSystem.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libctru/include/3ds/svc.h b/libctru/include/3ds/svc.h index 9d4dcf6..535229a 100644 --- a/libctru/include/3ds/svc.h +++ b/libctru/include/3ds/svc.h @@ -27,9 +27,9 @@ typedef enum { u32* getThreadCommandBuffer(void); s32 svcControlMemory(u32* addr_out, u32 addr0, u32 addr1, u32 size, MemOp op, MemPerm perm); -void svcExitProcess(); +void __attribute__((noreturn)) svcExitProcess(); s32 svcCreateThread(Handle* thread, ThreadFunc entrypoint, u32 arg, u32* stack_top, s32 thread_priority, s32 processor_id); -void svcExitThread(); +void __attribute__((noreturn)) svcExitThread(); void svcSleepThread(s64 ns); s32 svcCreateMutex(Handle* mutex, bool initially_locked); s32 svcReleaseMutex(Handle handle); diff --git a/libctru/source/initSystem.c b/libctru/source/initSystem.c index 1f51c03..6176b34 100644 --- a/libctru/source/initSystem.c +++ b/libctru/source/initSystem.c @@ -20,7 +20,7 @@ extern char* fake_heap_end; static void initArgv(); -void __ctru_exit(int rc) +void __attribute__((noreturn)) __ctru_exit(int rc) { // Run the global destructors __libc_fini_array(); @@ -35,8 +35,8 @@ void __ctru_exit(int rc) if (__system_retAddr) __system_retAddr(); - // Since above did not jump: hang - for (;;); + // Since above did not jump, end this process + svcExitProcess(); } void initSystem(void (*retAddr)(void))