|
@@ -36,96 +36,51 @@
|
|
|
|
|
|
#include <features.h>
|
|
|
|
|
|
- .file "crt0.S"
|
|
|
.text
|
|
|
.globl _start
|
|
|
- .type _start,@function
|
|
|
- .type main,@function
|
|
|
- .size _start,_start_end - _start
|
|
|
+ .type _start,%function
|
|
|
+ .type main,%function
|
|
|
_start:
|
|
|
/* Clear the frame pointer since this is the outermost frame. */
|
|
|
mov #0, r14
|
|
|
|
|
|
/* Pop argc off the stack and save a pointer to argv */
|
|
|
- mov.l @r15+,r4
|
|
|
- mov r15, r5
|
|
|
-
|
|
|
-#if defined L_crt0 || ! defined __UCLIBC_CTOR_DTOR__
|
|
|
- /*
|
|
|
- * Setup the value for the environment pointer:
|
|
|
- * r6 = (argc + 1) * 4
|
|
|
- * r6 += argv (in delay slot)
|
|
|
- */
|
|
|
- mov r4,r6
|
|
|
- add #1,r6
|
|
|
- shll2 r6
|
|
|
-
|
|
|
- /* jump to __uClibc_main (argc, argv, envp) */
|
|
|
- mov.l L_main, r0
|
|
|
- jsr @r0
|
|
|
- add r5, r6 /* delay slot */
|
|
|
+ mov.l @r15+,r5
|
|
|
+ mov r15, r6
|
|
|
|
|
|
- /* We should not get here. */
|
|
|
- mov.l L_abort, r0
|
|
|
- jmp @r0
|
|
|
- nop
|
|
|
+ /* Push the fini func onto the stack */
|
|
|
+ mov.l r4,@-r15
|
|
|
+ mov.l L_fini,r0
|
|
|
+ mov.l r0,@-r15
|
|
|
|
|
|
-_start_end:
|
|
|
- .align 2
|
|
|
+ /* Set up the main/init funcs that go in registers */
|
|
|
+ mov.l L_main,r4
|
|
|
+ mov.l L_init,r7
|
|
|
|
|
|
-L_main:
|
|
|
- .long __uClibc_main /* in libuClibc.*.so */
|
|
|
-
|
|
|
-#else /* (L_crt1) && __UCLIBC_CTOR_DTOR__ */
|
|
|
- /* Push the finip argument to __uClibc_start_main() onto the stack */
|
|
|
- mov.l L_fini,r6
|
|
|
- mov.l r6,@-r15
|
|
|
-
|
|
|
- /* Setup the value for the initp argument */
|
|
|
- mov.l L_init, r7
|
|
|
-
|
|
|
- /*
|
|
|
- * Setup the value for the environment pointer:
|
|
|
- * r6 = (argc + 1) * 4
|
|
|
- * r6 += argv (in delay slot)
|
|
|
- */
|
|
|
- mov r4,r6
|
|
|
- add #1,r6
|
|
|
- shll2 r6
|
|
|
-
|
|
|
- /* jump to __uClibc_start_main (argc, argv, envp, app_init, app_fini) */
|
|
|
- mov.l L_main, r0
|
|
|
- jsr @r0
|
|
|
- add r5, r6 /* delay slot */
|
|
|
+ /* __uClibc_main (main, argc, argv, init, fini) */
|
|
|
+
|
|
|
+ /* Let the libc call main and exit with its return code. */
|
|
|
+ mov.l L_uClibc_main,r1
|
|
|
+ jsr @r1
|
|
|
+ nop
|
|
|
/* We should not get here. */
|
|
|
- mov.l L_abort, r0
|
|
|
- jmp @r0
|
|
|
+ mov.l L_abort,r1
|
|
|
+ jmp @r1
|
|
|
nop
|
|
|
-_start_end:
|
|
|
+
|
|
|
+ .size _start,.-_start
|
|
|
.align 2
|
|
|
|
|
|
L_main:
|
|
|
- .long __uClibc_start_main /* in libuClibc.*.so */
|
|
|
-
|
|
|
- .weak _init
|
|
|
- .type _init,@function
|
|
|
-_init:
|
|
|
- rts
|
|
|
- nop
|
|
|
-
|
|
|
- .size _init,.-_init
|
|
|
- .weak _fini
|
|
|
- .set _fini,_init
|
|
|
-
|
|
|
+ .long main
|
|
|
L_init:
|
|
|
- .long _init
|
|
|
+ .long _init
|
|
|
L_fini:
|
|
|
- .long _fini
|
|
|
-
|
|
|
-#endif
|
|
|
-
|
|
|
+ .long _fini
|
|
|
+L_uClibc_main:
|
|
|
+ .long __uClibc_main
|
|
|
L_abort:
|
|
|
- .long abort
|
|
|
+ .long abort
|
|
|
|
|
|
/* Define a symbol for the first piece of initialized data. */
|
|
|
.data
|