12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /* Startup code compliant to the ELF CRIS ABI */
- #include <features.h>
- /* The first piece of initialized data. */
- .data
- .global __data_start
- .align 2
- .type __data_start, @object
- .size __data_start, 4
- __data_start:
- .dword 0
- .text
- .align 1
- .global _start
- .type _start,%function
- #if defined(__UCLIBC_CTOR_DTOR__)
- .type _init,%function
- .type _fini,%function
- #else
- .weak _init
- .weak _fini
- #endif
- .type main,%function
- .type __uClibc_main,%function
- /*
- * On the stack we have argc. We can calculate argv/envp
- * from that and the succeeding stack location, but fix so
- * we get the right calling convention (regs in r10/r11).
- *
- * Please view linux/fs/binfmt_elf.c for a complete
- * understanding of this.
- */
- /*
- * Need to call __uClibc_main(main, argc, argv, _init, _fini)
- */
- _start:
- pop $r10
- move.d $sp, $r11
- jump .L1
- .L1:
- Push $srp
- Subq 4,$sp
- move.d $r10,$r9
- move.d $r11,$r12
- move.d _fini,$r13
- move.d $r13,[$sp]
- move.d main,$r10
- move.d $r9,$r11
- move.d _init,$r13
- /* Leave control to the libc */
- jsr __uClibc_main
- .size _start,.-_start
|