summaryrefslogtreecommitdiff
path: root/libc/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps')
-rw-r--r--libc/sysdeps/linux/alpha/crt0.S48
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