summaryrefslogtreecommitdiff
path: root/lib/csu/alpha
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
commitd6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch)
treeece253b876159b39c620e62b6c9b1174642e070e /lib/csu/alpha
initial import of NetBSD tree
Diffstat (limited to 'lib/csu/alpha')
-rw-r--r--lib/csu/alpha/Makefile25
-rw-r--r--lib/csu/alpha/crt0.s107
2 files changed, 132 insertions, 0 deletions
diff --git a/lib/csu/alpha/Makefile b/lib/csu/alpha/Makefile
new file mode 100644
index 00000000000..276f37501f0
--- /dev/null
+++ b/lib/csu/alpha/Makefile
@@ -0,0 +1,25 @@
+# $NetBSD: Makefile,v 1.1 1995/02/10 17:53:00 cgd Exp $
+
+CFLAGS= -DLIBC_SCCS
+OBJS= crt0.o gcrt0.o
+CLEANFILES+= core a.out
+
+all: ${OBJS}
+
+crt0.o: crt0.s
+ ${CPP} -DCRT0 ${CFLAGS} ${.ALLSRC} | ${AS} -o $@
+ @${LD} -x -r ${.TARGET}
+ @mv a.out ${.TARGET}
+
+gcrt0.o: crt0.s
+ ${CPP} -DMCRT0 ${CFLAGS} ${.ALLSRC} | ${AS} -o $@
+ @${LD} -x -r ${.TARGET}
+ @mv a.out ${.TARGET}
+
+install:
+ install ${COPY} -o ${BINOWN} -g ${BINGRP} -m 444 ${OBJS} \
+ ${DESTDIR}/usr/lib
+
+depend lint tags:
+
+.include <bsd.prog.mk>
diff --git a/lib/csu/alpha/crt0.s b/lib/csu/alpha/crt0.s
new file mode 100644
index 00000000000..de058c8f24c
--- /dev/null
+++ b/lib/csu/alpha/crt0.s
@@ -0,0 +1,107 @@
+/* $NetBSD: crt0.s,v 1.2 1995/10/09 23:54:37 cgd Exp $ */
+
+/*
+ * Copyright (c) 1994, 1995 Carnegie-Mellon University.
+ * All rights reserved.
+ *
+ * Author: Chris G. Demetriou
+ *
+ * Permission to use, copy, modify and distribute this software and
+ * its documentation is hereby granted, provided that both the copyright
+ * notice and this permission notice appear in all copies of the
+ * software, derivative works or modified versions, and any portions
+ * thereof, and that both notices appear in supporting documentation.
+ *
+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
+ * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * Carnegie Mellon requests users of this software to return to
+ *
+ * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
+ * School of Computer Science
+ * Carnegie Mellon University
+ * Pittsburgh PA 15213-3890
+ *
+ * any improvements or extensions that they make and grant Carnegie the
+ * rights to redistribute these changes.
+ */
+
+#include <machine/asm.h>
+
+#define SETGP(pv) ldgp gp,0(pv)
+
+#define MF_FPCR(x) mf_fpcr x
+#define MT_FPCR(x) mt_fpcr x
+#define JMP(loc) br zero,loc
+#define CONST(c,reg) ldiq reg, c
+
+/*
+ * Set up the global variables provided by crt0:
+ * environ and __progname
+ */
+BSS(environ, 8)
+ .data
+ .align 3
+EXPORT(__progname)
+ .quad $L1
+$L1:
+ .quad 0 /* Null string, plus padding. */
+ .text
+
+LEAF(__start, 0) /* XXX */
+ .set noreorder
+ br pv, 1f
+1: SETGP(pv)
+
+ ldq s0, 0(sp) /* get argc from stack */
+ lda s1, 8(sp) /* get pointer to argv */
+ s8addq s0, s1, s2 /* add number of argv pointers */
+ addq s2, 8, s2 /* and skip the null pointer */
+ stq s2, environ /* save the newly-found env pointer */
+
+#ifdef MCRT0
+eprol:
+ lda a0, eprol
+ lda a1, _etext
+ CALL(monstartup) /* monstartup(eprol, etext); */
+ lda a0, _mcleanup
+ CALL(atexit) /* atext(_mcleanup); */
+ stl zero, errno
+#endif
+
+ ldq a0, 0(s1) /* a0 = argv[0]; */
+ beq a0, 2f /* if it's null, then punt */
+ CONST(0x2f, a1) /* a1 = '/' */
+ CALL(strrchr)
+ addq v0, 1, a0 /* move past the /, if there was one */
+ bne v0, 1f /* if a / found */
+ ldq a0, 0(s1) /* a0 = argv[0]; */
+1:
+ stq a0, __progname /* store the program name */
+2:
+ /* call main() */
+ mov s0, a0
+ mov s1, a1
+ mov s2, a2
+ CALL(main) /* v0 = main(argc, argv, env); */
+
+ /* on return from main, call exit() with its return value. */
+ mov v0, a0
+ CALL(exit) /* exit(rv); */
+
+ /* if that failed, bug out. */
+ call_pal 0x81 /* XXX op_bugchk */
+ .set reorder
+END(__start)
+
+#ifndef MCRT0
+LEAF(moncontrol, 0)
+ RET
+END(moncontrol)
+
+LEAF(_mcount, 0)
+ /* XXX -- dunno what we have to do here! */
+ call_pal 0x81 /* XXX op_bugchk */
+END(_mcount)
+#endif