summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/alpha/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/alpha/start.S')
-rw-r--r--mdk-stage1/dietlibc/alpha/start.S35
1 files changed, 35 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/alpha/start.S b/mdk-stage1/dietlibc/alpha/start.S
new file mode 100644
index 000000000..00b8e950d
--- /dev/null
+++ b/mdk-stage1/dietlibc/alpha/start.S
@@ -0,0 +1,35 @@
+#include "start.h"
+
+#ifdef __alpha__
+
+.text
+.align 2
+ .set noreorder
+
+.global __start
+__start:
+.global _start
+_start:
+ clr $fp /* clear frame pointer */
+
+ br $gp,.Lstart /* set global pointer */
+.Lstart:
+ ldgp $gp, 0($gp)
+
+/* prepare to call main */
+ ldl $16, 0($sp) /* argc */
+
+ lda $17, 8($sp) /* argv */
+
+ addq $16, 1, $18 /* argp */
+ s8addq $18, $17, $18 /* (8*(argc+1))+argv -> argp */
+
+ stq $18, environ
+
+ mov $0, $21 /* mov v0(dynload) to a5 */
+
+ jsr $26, main
+ mov $0, $16
+ jsr $26, exit /* YES, CALL! for threads and atexit ! (+4 byte) */
+
+#endif