Browse Source

And with this, the alpha port is not basically working.
-Erik

Eric Andersen 23 years ago
parent
commit
61a667b175
1 changed files with 24 additions and 24 deletions
  1. 24 24
      libc/sysdeps/linux/alpha/crt0.S

+ 24 - 24
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