diff options
| -rw-r--r-- | libc/sysdeps/linux/alpha/crt0.S | 48 | 
1 files changed, 24 insertions, 24 deletions
| diff --git a/libc/sysdeps/linux/alpha/crt0.S b/libc/sysdeps/linux/alpha/crt0.S index a489622bf..1f93a4dc4 100644 --- a/libc/sysdeps/linux/alpha/crt0.S +++ b/libc/sysdeps/linux/alpha/crt0.S @@ -18,6 +18,19 @@     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA     02111-1307 USA.  */ +#define a0      $16     /* argument registers (caller-saved) */ +#define a1      $17 +#define a2      $18 +#define a3      $19 +#define a4      $20 +#define a5      $21 +#define ra      $26     /* return address register */ + +#define s6      $15 +#define fp      s6      /* frame-pointer (s6 in frame-less procedures) */ +#define gp      $29     /* global pointer */ +#define sp      $30     /* stack pointer */ +#define zero    $31     /* reads as zero, writes are noops */  	.text  	.align 3 @@ -25,34 +38,21 @@  	.ent _start, 0  	.type _start,@function  _start: -	.frame $15, 0, $31 -	mov	$31, $15 -	br	$29, 1f -1:	ldgp	$29, 0($29) -	subq	$30, 16, $30 +	.frame fp, 0, zero +	mov	zero, fp +	br	gp, 1f +1:	ldgp	gp, 0(gp) +	subq	sp, 16, sp  	.prologue 0 -  /* Load address of the user's main function.  */ -	lda	$16, main - -	ldl	$17, 16($30)	/* get argc */ -	lda	$18, 24($30)	/* get argv */ - -#if 0 -  /* Load address of our own entry points to .fini and .init.  */ -	lda	$19, _init -	lda	$20, _fini - -  /* Store address of the shared library termination function.  */ -	mov	$0, $21 - -  /* Provide the highest stack address to the user code.  */ -	stq	$30, 0($30) -#endif +	ldl	a0, 16(sp)	/* get argc */ +	lda	a1, 24(sp)	/* get argv */ +	addq    a0, 1, a2 +	s8addq  a2, a1, a2      /* Calculate environ */    /* Call the user's main function, and exit with its value.       But let the libc call main.  */ -	jsr	$26, __uClibc_main +	jsr	ra, __uClibc_main    /* Die very horribly if exit returns.  Call_pal hlt is callable from       kernel mode only; this will result in an illegal instruction trap.  */ @@ -61,7 +61,7 @@ _start:  /* For ECOFF backwards compatibility. */  .weak    __start; -    __start    =   _start +	__start    =   _start  /* Define a symbol for the first piece of initialized data.  */  	.data | 
