diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
commit | d6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch) | |
tree | ece253b876159b39c620e62b6c9b1174642e070e /lib/csu/alpha |
initial import of NetBSD tree
Diffstat (limited to 'lib/csu/alpha')
-rw-r--r-- | lib/csu/alpha/Makefile | 25 | ||||
-rw-r--r-- | lib/csu/alpha/crt0.s | 107 |
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 |