;; Startup code compiant to the ELF CRIS ABI. ;; ;; Highly based on code from glibc. #include <sysdep.h> .syntax no_register_prefix .text .globl _start .type _start,@function #if defined L_crt0 || ! defined __UCLIBC_CTOR_DTOR__ .type __uClibc_main,@function #else .weak _init .weak _fini .type __uClibc_start_main,@function #endif ;; Setup a dummy reference to main so that if an application is linking ;; when the main() function is in a static library we can be sure that ;; the main() actually gets linked in. .type main,@function _start: ;; Clear the frame pointer, to mark the outermost frame. moveq 0, r8 move.d [sp],r11 move.d sp,[sp] move.d sp,r12 addq 4,r12 push r9 #ifdef __PIC__ move.d pc,r0 sub.d .:GOTOFF,r0 move.d _init:PLTG,r13 add.d r0,r13 move.d _fini:PLTG,r9 add.d r0,r9 move.d main:PLTG,r10 add.d r0,r10 #else move.d _init,r13 move.d _fini,r9 move.d main,r10 #endif push r9 #if (defined L_crt1 || defined L_gcrt1) && defined __UCLIBC_CTOR_DTOR__ PLTCALL(__uClibc_start_main) #else PLTCALL(__uClibc_main) #endif ;; Crash if 'exit' returns. test.d [6502] 0: ba 0b nop ;; Define a symbol for the first piece of initialized data. .data .globl __data_start __data_start: .long 0 .weak data_start data_start = __data_start