| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | /* * Copyright (C) 2016 Andes Technology, Inc. * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. *//* Startup code compliant to the ELF NDS32 ABI */#include <sys/regdef.h>#include <features.h>#define BP_SYM(name) name/* We need to call:   __uClibc_main (int (*main) (int, char **, char **), int argc,		      char **argv, void (*init) (void), void (*fini) (void),		      void (*rtld_fini) (void), void *stack_end)*/.text	.globl	_start	.type	_start,@function	.type	_init,@function	.type	_fini,@function#ifndef __UCLIBC_CTOR_DTOR__	.weak	_init	.weak	_fini#endif	.type	    main,@function	.type	    __uClibc_main,@function#ifdef SHARED.pic1:	ret#endif_start:	movi    $fp,	0		! clear FP	lwi	$r1,	[$sp + 0]	! r1 = argc	addi	$r2,	$sp,	4	! r2 = argv	/* align sp to 8-byte boundary */	movi	$r0,	-8	and	$sp,	$sp,	$r0	addi	$r6,	$sp,	0	! r6 = stack top#ifdef SHARED	/* set gp register */	mfusr 	$r15, 	$PC	sethi	$gp,	HI20(_GLOBAL_OFFSET_TABLE_+4)	ori	$gp,	$gp, LO12(_GLOBAL_OFFSET_TABLE_ + 8)	add	$gp,	$r15,	$gp	la		$r3,	_init@GOTOFF	la		$r4,	_fini@GOTOFF	la		$r0,	main@GOT	/* push everything to stack, r5 is rtld_fini and r7 is garbage */	pushm	$r0,	$r7	/* now start it up */	bal	__uClibc_main@PLT	/* should never get here */	bal	abort@PLT#else	la      $gp, _SDA_BASE_ ! init GP for small data access	la		$r3,	_init	la		$r4,	_fini	la		$r0,	main	/* push everything to stack, r5 is rtld_fini and r7 is garbage */	pushm	$r0,	$r7	/* now start it up */	bal	__uClibc_main	/* should never get here */	bal	abort#endif	ret/* 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
 |