diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-01-03 17:39:24 -0700 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-01-03 17:39:24 -0700 |
commit | a6c1ed4716cf02626ea035beb6dd4a921642ba80 (patch) | |
tree | ef582c1b52819e27bdd16097ec03b69799d04ede /newlib/libc/sys/sparc64/crt0.S | |
parent | f6c9a624fa8a6878a7fb2b02f55e4990a20feb59 (diff) |
Use libc from agbcc instead of standalone newlib\nYou must have AGBCC commit 80d029caec189587f8b9294b6c8a5a489b8f5f88 in order to compile pmd_red.gbalibc
Diffstat (limited to 'newlib/libc/sys/sparc64/crt0.S')
-rw-r--r-- | newlib/libc/sys/sparc64/crt0.S | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/newlib/libc/sys/sparc64/crt0.S b/newlib/libc/sys/sparc64/crt0.S deleted file mode 100644 index ed2cb7e..0000000 --- a/newlib/libc/sys/sparc64/crt0.S +++ /dev/null @@ -1,123 +0,0 @@ -! C run time start off - -! This file supports: -! -! - both 32bit pointer and 64bit pointer environments (at compile time) -! - an imposed stack bias (of 2047) (at run time) -! - medium/low and medium/anywhere code models (at run time) - -! Initial stack setup: -! -! bottom of stack (higher memory address) -! ... -! text of environment strings -! text of argument strings -! envp[envc] = 0 (4/8 bytes) -! ... -! env[0] (4/8 bytes) -! argv[argc] = 0 (4/8 bytes) -! ... -! argv[0] (4/8 bytes) -! argc (4/8 bytes) -! register save area (64 bits by 16 registers = 128 bytes) -! top of stack (%sp) - -! Stack Bias: -! -! It is the responsibility of the o/s to set this up. -! We handle both a 0 and 2047 value for the stack bias. - -! Medium/Anywhere code model support: -! -! In this model %g4 points to the start of the data segment. -! The text segment can go anywhere, but %g4 points to the *data* segment. -! It is up to the compiler/linker to get this right. -! -! Since this model is statically linked the start of the data segment -! is known at link time. Eg: -! -! sethi %hh(data_start), %g1 -! sethi %lm(data_start), %g4 -! or %g1, %hm(data_start), %g1 -! or %g4, %lo(data_start), %g4 -! sllx %g1, 32, %g1 -! or %g4, %g1, %g4 -! -! FIXME: For now we just assume 0. - -! FIXME: if %g1 contains a non-zero value, atexit() should be invoked -! with this value. - -#include <sys/syscallasm.h> - - TEXT_SECTION - ALIGN (4) - GLOBAL (ASM_PRIVATE_SYMBOL (start)) -ASM_PRIVATE_SYMBOL (start): - clr %fp - -! We use %g4 even if the code model is Medium/Low (simplifies the code). - - clr %g4 ! Medium/Anywhere base reg - -! If there is a stack bias in effect, account for it in %g5. Then always -! add %g5 to stack references below. This way the code can be used with -! or without an imposed bias. - - andcc %sp, 1, %g5 - bnz,a .LHaveBias - mov 2047, %g5 -.LHaveBias: - add %sp, %g5, %sp - -#if TARGET_PTR_SIZE == 32 - ! FIXME: We apparently assume here that there is no reserved word. - ! This is probably correct, but try to verify it. - ld [%sp + 0x80], %o0 ! argc - add %sp, 0x84, %o1 ! argv - add %o0, 1, %o2 - sll %o2, 2, %o2 -#else /* TARGET_PTR_SIZE == 64 */ - ld [%sp + 0x8c], %o0 ! argc.lo - add %sp, 0x90, %o1 ! argv - add %o0, 1, %o2 - sll %o2, 3, %o2 -#endif - add %o1, %o2, %o2 ! envp - sethi %hi (ASM_SYMBOL (environ)), %o3 - or %o3, %lo (ASM_SYMBOL (environ)), %o3 -#if TARGET_PTR_SIZE == 32 - st %o2, [%o3 + %g4] -#else /* TARGET_PTR_SIZE == 64 */ - stx %o2, [%o3 + %g4] -#endif - -! Restore any stack bias before we call main() ... - - sub %sp, %g5, %sp - - GLOBAL (ASM_SYMBOL (main)) - call ASM_SYMBOL (main) - -! FIXME: Not sure if this is needed anymore. -#if TARGET_PTR_SIZE == 32 - sub %sp, 0x20, %sp ! room to push args -#else /* TARGET_PTR_SIZE == 64 */ - sub %sp, 0x30, %sp ! room to push args -#endif - - GLOBAL (ASM_SYMBOL (exit)) - call ASM_SYMBOL (exit) - nop - - GLOBAL (ASM_SYMBOL (_exit)) - call ASM_SYMBOL (_exit) - nop - - set SYS_exit, %g1 - ta SYSCALL_TRAP ! in case user redefines __exit - -! If all the above methods fail to terminate the program, try an illegal insn. -! If that does not work, the o/s is hosed more than we are. - - WORD (0) |