From 192b88b6a21d83345a4635deba417c191c156c80 Mon Sep 17 00:00:00 2001 From: Dave Murphy Date: Tue, 30 Dec 2014 22:37:53 +0000 Subject: [PATCH] allow user configurable stack --- libctru/source/system/ctru_exit.c | 2 +- libctru/source/system/initSystem.c | 2 +- libctru/source/system/stack_adjust.s | 49 ++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 libctru/source/system/stack_adjust.s diff --git a/libctru/source/system/ctru_exit.c b/libctru/source/system/ctru_exit.c index 058ea7c..f4c99f1 100644 --- a/libctru/source/system/ctru_exit.c +++ b/libctru/source/system/ctru_exit.c @@ -11,7 +11,7 @@ void __appExit(); void __libc_fini_array(void); -void __attribute__((weak)) __attribute__((noreturn)) __ctru_exit(int rc) +void __attribute__((weak)) __attribute__((noreturn)) __libctru_exit(int rc) { u32 tmp=0; diff --git a/libctru/source/system/initSystem.c b/libctru/source/system/initSystem.c index 080d125..501cfaa 100644 --- a/libctru/source/system/initSystem.c +++ b/libctru/source/system/initSystem.c @@ -18,7 +18,7 @@ void __libc_init_array(void); void __ctru_exit(int rc); -void __attribute__((weak)) initSystem(void (*retAddr)(void)) +void __attribute__((weak)) __libctru_init(void (*retAddr)(void)) { // Register newlib exit() syscall diff --git a/libctru/source/system/stack_adjust.s b/libctru/source/system/stack_adjust.s new file mode 100644 index 0000000..e2d9b37 --- /dev/null +++ b/libctru/source/system/stack_adjust.s @@ -0,0 +1,49 @@ + + .arm + .align 2 + + .global initSystem + .type initSystem, %function + +initSystem: + ldr r2, =saved_stack + str sp, [r2] + str lr, [r2,#4] + + bl __libctru_init + + ldr r2, =fake_heap_start + ldr sp, [r2] + + ldr r3, =__stacksize__ + ldr r3, [r3] + add sp, r3, #7 + bics sp, sp, #7 + str sp, [r2] + + ldr r2, =saved_stack + ldr lr, [r2,#4] + bx lr + + + .global __ctru_exit + .type __ctru_exit, %function + +__ctru_exit: + ldr r2, =saved_stack + ldr sp, [r2] + b __libctru_exit + + .data + .align 2 +__stacksize__: + .word 32 * 1024 + .weak __stacksize__ + + + .bss + .align 2 +saved_stack: + .space 8 + +