From 5ff8219dab93d9119346dd6e1a64956a942c57b7 Mon Sep 17 00:00:00 2001 From: aliaspider Date: Fri, 6 Nov 2015 13:47:17 +0100 Subject: [PATCH] (3ds) override __libctru_init. --- ctr/ctr_system.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/ctr/ctr_system.c b/ctr/ctr_system.c index 8e84d90124..3824d467bc 100644 --- a/ctr/ctr_system.c +++ b/ctr/ctr_system.c @@ -1,5 +1,6 @@ #include <3ds.h> +#include #include #include #include @@ -27,11 +28,36 @@ void __libc_fini_array(void); void __libctru_init(void (*retAddr)(void)); void __appInit(); void __libc_init_array(void); +void __system_allocateHeaps(); +void __system_initArgv(); +void __ctru_exit(int rc); +int __libctru_gtod(struct _reent *ptr, struct timeval *tp, struct timezone *tz); +void (*__system_retAddr)(void); +extern void* __service_ptr; u32 __stack_bottom; u32 __stack_size_extra; +Result __sync_init(void) __attribute__((weak)); + +void __attribute__((weak)) __libctru_init(void (*retAddr)(void)) +{ + // Register newlib exit() syscall + __syscalls.exit = __ctru_exit; + __syscalls.gettod_r = __libctru_gtod; + + __system_retAddr = __service_ptr ? retAddr : NULL; + + if (__sync_init) + __sync_init(); + + __system_allocateHeaps(); + + // Build argc/argv if present + __system_initArgv(); + +} void __system_allocateHeaps() { u32 tmp=0;