|
@@ -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
|