| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | /* Initial C runtime code for Blackfin * * Copyright (C) 2004-2006 Erik Andersen <andersen@uclibc.org> * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. *//* When we enter this piece of code, the user stack looks like this:* [SP] argc            argument counter (integer)*      argv[0]         program name (pointer)*      argv[1...N]     program args (pointers)*      NULL*      env[0...N]      environment variables (pointers)*      NULL*   When we are done here, we want*	R0=argc*	R1=argv*	R2=__init*	SP=__fini*/#include <features.h>.text.align 2.global __start;.type	__start,STT_FUNC;.global ___uClibc_main;.type	___uClibc_main,STT_FUNC;#define __UCLIBC_CTOR_DTOR__#if defined(__UCLIBC_CTOR_DTOR__).weak	__init;.weak	__fini;#endif__start:/*	clear the frame pointer and the L registers.  */	FP = 0;	L0 = 0;	L1 = 0;	L2 = 0;	L3 = 0;/*	Load register R0 (argc) from the stack to its final resting place */	P0 = SP;	R0 = [P0++];/*	Copy argv pointer into R1 */	R1 = P0;#if defined(__UCLIBC_CTOR_DTOR__)/*	Load __init into R2 */	R2.H = __init;	R2.L = __init;/*	Load __fini onto the stack */	SP += -16;	R3.H = __fini;	R3.L = __fini;	[SP+12] = R3;#else/*	Just fixup the stack */	sp += -12;#endif/*	Ok, now run uClibc's main() -- shouldn't return */	jump.l	___uClibc_main;.size __start,.-__start
 |