diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/csu/hppa/Makefile | 27 | ||||
-rw-r--r-- | lib/csu/hppa/crt0.c | 103 |
2 files changed, 130 insertions, 0 deletions
diff --git a/lib/csu/hppa/Makefile b/lib/csu/hppa/Makefile new file mode 100644 index 00000000000..4744524bde7 --- /dev/null +++ b/lib/csu/hppa/Makefile @@ -0,0 +1,27 @@ +# $OpenBSD: Makefile,v 1.1 2001/08/19 19:57:54 mickey Exp $ + +CFLAGS+= -DLIBC_SCCS -DELFSIZE=32 -I${.CURDIR}/.. + +#OBJS= crt0.o gcrt0.o +OBJS= crt0.o +SRCS= crt0.c +NOPROFILE=noprofile +NOPIC= nopic +NOMAN= noman + +CLEANFILES+= core a.out + +all: ${OBJS} + +crt0.o: ${SRCS} + @echo ${COMPILE.c} -DCRT0 ${.CURDIR}/${SRCS} -o ${.TARGET} + @${COMPILE.c} -DCRT0 ${.CURDIR}/${SRCS} -o ${.TARGET}.o + @${LD} -x -r -o ${.TARGET} ${.TARGET}.o + @rm -f ${.TARGET}.o + +install: + ${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} -m 444 ${OBJS} \ + ${DESTDIR}/usr/lib + +.include <bsd.prog.mk> + diff --git a/lib/csu/hppa/crt0.c b/lib/csu/hppa/crt0.c new file mode 100644 index 00000000000..56a7ebf0221 --- /dev/null +++ b/lib/csu/hppa/crt0.c @@ -0,0 +1,103 @@ +/* $OpenBSD: crt0.c,v 1.1 2001/08/19 19:57:54 mickey Exp $ */ + +/* + * Copyright (c) 2001 Michael Shalayeff + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Michael Shalayeff. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +int global __asm ("$global$") = 0; +int sh_func_adrs __asm ("$$sh_func_adrs") = 0; + +#if defined(LIBC_SCCS) && !defined(lint) +static const char rcsid[] = "$OpenBSD: crt0.c,v 1.1 2001/08/19 19:57:54 mickey Exp $"; +#endif /* LIBC_SCCS and not lint */ + +#include <stdlib.h> +#include <sys/syscall.h> +#include <sys/fcntl.h> +#include <sys/exec.h> +#include <paths.h> + +#include "common.h" + +typedef char Obj_Entry; + +/* + * Lots of the chunks of this file cobbled together from pieces of + * other OpenBSD crt files, including the common code. + */ + +char **environ; + +extern void __init __P((void)); +extern void __fini __P((void)); + +#ifdef MCRT0 +extern void monstartup __P((u_long, u_long)); +extern void _mcleanup __P((void)); +extern u_int etext, eprol; +#endif /* MCRT0 */ + +void __main() {} + +void +__start(sp, cleanup, obj) + char **sp; + void (*cleanup) __P((void)); /* from shared loader */ + const Obj_Entry *obj; /* from shared loader */ +{ + struct ps_strings *arginfo = (struct ps_strings *)sp; + char **argv, *namep; + + __asm __volatile (".import $global$, data\n\t" + "ldil L%%$global$, %%r27\n\t" + "ldo R%%$global$(%%r27), %%r27" ::: "r27"); + + argv = arginfo->ps_argvstr; + environ = arginfo->ps_envstr; + if ((namep = argv[0]) != NULL) { /* NULL ptr if argc = 0 */ + if ((__progname = _strrchr(namep, '/')) == NULL) + __progname = namep; + else + __progname++; + } + +#ifdef MCRT0 + atexit(_mcleanup); + monstartup((u_long)&eprol, (u_long)&etext); +#endif + + exit(main(arginfo->ps_nargvstr, argv, environ)); +} + +#include "common.c" + +#ifdef MCRT0 +__asm __volatile(".export eprol, entry\neprol"); +#endif |