diff options
author | jb <jb@FreeBSD.org> | 1998-03-10 07:04:18 +0000 |
---|---|---|
committer | jb <jb@FreeBSD.org> | 1998-03-10 07:04:18 +0000 |
commit | b12189af60a4a86ed715ab9a9915cbdd4548cfa1 (patch) | |
tree | 17e3983f8ad464cc75c68c4335c84112c73f50eb /lib/csu/alpha | |
parent | 8839778db0018a91d6b4398d8d98460787e193bf (diff) | |
download | FreeBSD-src-b12189af60a4a86ed715ab9a9915cbdd4548cfa1.zip FreeBSD-src-b12189af60a4a86ed715ab9a9915cbdd4548cfa1.tar.gz |
Trash startup sources from NetBSD in favour of jdp's FreeBSD source
now that has been committed.
The makefile is derived from the i386-elf version, modified to pick
up most of the source (except crt1.c) from i386-elf. With minor changes
to i386-elf/crt1.c, this directory can be combined with i386-elf to
be a single csu/elf directory for all seasons.
Diffstat (limited to 'lib/csu/alpha')
-rw-r--r-- | lib/csu/alpha/Makefile | 64 | ||||
-rw-r--r-- | lib/csu/alpha/crt0.c | 243 | ||||
-rw-r--r-- | lib/csu/alpha/crtbegin.c | 120 | ||||
-rw-r--r-- | lib/csu/alpha/crtend.c | 15 |
4 files changed, 23 insertions, 419 deletions
diff --git a/lib/csu/alpha/Makefile b/lib/csu/alpha/Makefile index 7a3291d..e25f050 100644 --- a/lib/csu/alpha/Makefile +++ b/lib/csu/alpha/Makefile @@ -1,41 +1,23 @@ -# $Id$ -# From: NetBSD: Makefile,v 1.15 1997/10/24 21:18:25 thorpej Exp - -CPPFLAGS+= -DLIBC_SCCS -DPIC -DDYNAMIC -DELFSIZE=64 -CPPFLAGS+= -I${.CURDIR}/../../../libexec/ld.elf_so -COPT+= -fPIC - -OBJS= crt0.o gcrt0.o crtbegin.o crtend.o - -CLEANFILES+= core a.out - -all: ${OBJS} - -crt0.o: crt0.c - ${CC} -DCRT0 -c ${.CURDIR}/crt0.c -o ${.TARGET}.o - @${LD} -x -r -o ${.TARGET} ${.TARGET}.o - @rm -f ${.TARGET}.o - -gcrt0.o: crt0.c - ${CC} -DMCRT0 -c ${.CURDIR}/crt0.c -o ${.TARGET}.o - @${LD} -x -r -o ${.TARGET} ${.TARGET}.o - @rm -f ${.TARGET}.o - -crtbegin.o: crtbegin.c - ${CC} -c ${.CURDIR}/crtbegin.c -o ${.TARGET}.o - @${LD} -x -r -o ${.TARGET} ${.TARGET}.o - @rm -f ${.TARGET}.o - -crtend.o: crtend.c - ${CC} -c ${.CURDIR}/crtend.c -o ${.TARGET}.o - @${LD} -x -r -o ${.TARGET} ${.TARGET}.o - @rm -f ${.TARGET}.o - -install: - ${INSTALL} ${COPY} -o ${BINOWN} -g ${BINGRP} -m 444 ${OBJS} \ - ${DESTDIR}/usr/lib - rm -f ${DESTDIR}/usr/lib/crtbeginS.o ${DESTDIR}/usr/lib/crtendS.o - ln ${DESTDIR}/usr/lib/crtbegin.o ${DESTDIR}/usr/lib/crtbeginS.o - ln ${DESTDIR}/usr/lib/crtend.o ${DESTDIR}/usr/lib/crtendS.o - -.include <bsd.prog.mk> +# +# $Id: Makefile,v 1.1.1.1 1998/03/07 20:27:10 jdp Exp $ +# + +.PATH: ${.CURDIR}/../i386-elf +SRCS= crt1.c crtbegin.c crtend.c crti.S crtn.S +OBJS= ${SRCS:N*.h:R:S/$/.o/g} +SOBJS= crtbegin.so crtend.so +CFLAGS+= -Wall -Wno-unused +NOMAN= true +NOPIC= true +NOPROFILE= true +INTERNALLIB= true + +all: ${OBJS} ${SOBJS} + +realinstall: +.for file in ${OBJS} ${SOBJS} + ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ + ${file} ${DESTDIR}${LIBDIR}/${file:S/.so$/S.o/} +.endfor + +.include <bsd.lib.mk> diff --git a/lib/csu/alpha/crt0.c b/lib/csu/alpha/crt0.c deleted file mode 100644 index 0e5688e..0000000 --- a/lib/csu/alpha/crt0.c +++ /dev/null @@ -1,243 +0,0 @@ -/* $Id$ */ -/* From: NetBSD: crt0.c,v 1.11 1997/10/20 20:41:09 thorpej Exp */ - -/* - * Copyright (c) 1995 Christopher G. Demetriou - * 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 Christopher G. Demetriou - * for the NetBSD Project. - * 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 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 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. - */ - -#ifdef ECOFF_COMPAT -#undef DYNAMIC -#endif - -#include <sys/param.h> -#include <sys/exec.h> -#include <sys/syscall.h> -#include <vm/vm.h> - -#include <stdlib.h> -#ifdef DYNAMIC -#include <dlfcn.h> -#include "rtld.h" -#else -typedef void Obj_Entry; -#endif - -/* - * Lots of the chunks of this file cobbled together from pieces of - * other NetBSD crt files, including the common code. - */ - -extern int __syscall __P((int, ...)); -#define _exit(v) __syscall(SYS_exit, (v)) -#define write(fd, s, n) __syscall(SYS_write, (fd), (s), (n)) - -#define _FATAL(str) \ - do { \ - write(2, str, sizeof(str)); \ - _exit(1); \ - } while (0) - -static char *_strrchr __P((char *, char)); - - -char **environ; -char *__progname = ""; -struct ps_strings *__ps_strings = 0; - -#ifndef ECOFF_COMPAT -extern void __init __P((void)); -extern void __fini __P((void)); -#endif /* ECOFF_COMPAT */ - -#ifdef DYNAMIC -void rtld_setup __P((void (*)(void), const Obj_Entry *obj)); - -const Obj_Entry *__mainprog_obj; - -/* - * Arrange for _DYNAMIC to be weak and undefined (and therefore to show up - * as being at address zero, unless something else defines it). That way, - * if we happen to be compiling without -static but with without any - * shared libs present, things will still work. - */ -asm(".weak _DYNAMIC"); -extern int _DYNAMIC; -#endif /* DYNAMIC */ - -#ifdef MCRT0 -extern void monstartup __P((u_long, u_long)); -extern void _mcleanup __P((void)); -extern unsigned char _etext, _eprol; -#endif /* MCRT0 */ - -void __start __P((char **, void (*cleanup) __P((void)), const Obj_Entry *, - struct ps_strings *)); -int main __P((int, char **, char **)); - -void -__start(sp, cleanup, obj, ps_strings) - char **sp; - void (*cleanup) __P((void)); /* from shared loader */ - const Obj_Entry *obj; /* from shared loader */ - struct ps_strings *ps_strings; -{ - long argc; - char **argv, *namep; - - argc = *(long *)sp; - argv = sp + 1; - environ = sp + 2 + argc; /* 2: argc + NULL ending argv */ - - if ((namep = argv[0]) != NULL) { /* NULL ptr if argc = 0 */ - if ((__progname = _strrchr(namep, '/')) == NULL) - __progname = namep; - else - __progname++; - } - - if (ps_strings != (struct ps_strings *)0 && - ps_strings != (struct ps_strings *)0xbabefacedeadbeef) - __ps_strings = ps_strings; - -#ifdef DYNAMIC - if (&_DYNAMIC != NULL) - rtld_setup(cleanup, obj); -#endif - -#ifdef MCRT0 - atexit(_mcleanup); - monstartup((u_long)&_eprol, (u_long)&_etext); -#endif - -#ifndef ECOFF_COMPAT - atexit(__fini); - __init(); -#endif /* ECOFF_COMPAT */ - - exit(main(argc, argv, environ)); -} - -/* - * NOTE: Leave the RCS ID _after_ __start(), in case it gets placed in .text. - */ -#if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: crt0.c,v 1.11 1997/10/20 20:41:09 thorpej Exp $"); -#endif /* LIBC_SCCS and not lint */ - -static char * -_strrchr(p, ch) -register char *p, ch; -{ - register char *save; - - for (save = NULL;; ++p) { - if (*p == ch) - save = (char *)p; - if (!*p) - return(save); - } -/* NOTREACHED */ -} - -#ifdef MCRT0 -asm (" .text"); -asm ("_eprol:"); -#endif - -#ifdef DYNAMIC -void -rtld_setup(cleanup, obj) - void (*cleanup) __P((void)); - const Obj_Entry *obj; -{ - - if ((obj == NULL) || (obj->magic != RTLD_MAGIC)) - _FATAL("Corrupt Obj_Entry pointer in GOT"); - if (obj->version != RTLD_VERSION) - _FATAL("Dynamic linker version mismatch"); - - __mainprog_obj = obj; - atexit(cleanup); -} - -void * -dlopen(name, mode) - const char *name; - int mode; -{ - - if (__mainprog_obj == NULL) - return NULL; - return (__mainprog_obj->dlopen)(name, mode); -} - -int -dlclose(fd) - void *fd; -{ - - if (__mainprog_obj == NULL) - return -1; - return (__mainprog_obj->dlclose)(fd); -} - -void * -dlsym(fd, name) - void *fd; - const char *name; -{ - - if (__mainprog_obj == NULL) - return NULL; - return (__mainprog_obj->dlsym)(fd, name); -} - -#if 0 /* not supported for ELF shlibs, apparently */ -int -dlctl(fd, cmd, arg) - void *fd, *arg; - int cmd; -{ - - if (__mainprog_obj == NULL) - return -1; - return (__mainprog_obj->dlctl)(fd, cmd, arg); -} -#endif - -char * -dlerror() -{ - - if (__mainprog_obj == NULL) - return NULL; - return (__mainprog_obj->dlerror)(); -} -#endif /* DYNAMIC */ diff --git a/lib/csu/alpha/crtbegin.c b/lib/csu/alpha/crtbegin.c deleted file mode 100644 index 2a6cac7..0000000 --- a/lib/csu/alpha/crtbegin.c +++ /dev/null @@ -1,120 +0,0 @@ -/* $Id$ */ -/* From: NetBSD: crtbegin.c,v 1.2 1997/03/21 05:47:28 cgd Exp */ - -/* - * Copyright (c) 1993 Paul Kranenburg - * 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 Paul Kranenburg. - * 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 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 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. - */ - -#ifndef ECOFF_COMPAT - -/* - * XXX EVENTUALLY SHOULD BE MERGED BACK WITH c++rt0.c - */ - -/* - * Run-time module which handles constructors and destructors, - * and NetBSD identification. - * - * The linker constructs the following arrays of pointers to global - * constructors and destructors. The first element contains the - * number of pointers in each or -1 to indicate that the run-time - * code should figure out how many there are. The tables are also - * null-terminated. - */ - -#include <sys/param.h> -#include <sys/exec.h> -#include <sys/exec_elf.h> -#include <stdlib.h> - -/* #include "sysident.h" */ - -static void (*__CTOR_LIST__[1]) __P((void)) - __attribute__((section(".ctors"))) = { (void *)-1 }; /* XXX */ -static void (*__DTOR_LIST__[1]) __P((void)) - __attribute__((section(".dtors"))) = { (void *)-1 }; /* XXX */ - -static void __dtors __P((void)); -static void __ctors __P((void)); - -static void -__dtors() -{ - unsigned long i = (unsigned long) __DTOR_LIST__[0]; - void (**p)(void); - - if (i == -1) { - for (i = 1; __DTOR_LIST__[i] != NULL; i++) - ; - i--; - } - p = __DTOR_LIST__ + i; - while (i--) - (**p--)(); -} - -static void -__ctors() -{ - void (**p)(void) = __CTOR_LIST__ + 1; - - while (*p) - (**p++)(); -} - -extern void __init(void) __attribute__((section(".init"))); - -void -__init() -{ - static int initialized = 0; - - /* - * Call global constructors. - * Arrange to call global destructors at exit. - */ - if (!initialized) { - initialized = 1; - __ctors(); - } - -} - -extern void __fini(void) __attribute__((section(".fini"))); - -void -__fini() -{ - /* - * Call global destructors. - */ - __dtors(); -} - -#endif /* !ECOFF_COMPAT */ diff --git a/lib/csu/alpha/crtend.c b/lib/csu/alpha/crtend.c deleted file mode 100644 index 826aa45..0000000 --- a/lib/csu/alpha/crtend.c +++ /dev/null @@ -1,15 +0,0 @@ -/* $Id$ */ -/* From: NetBSD: crtend.c,v 1.2 1997/10/10 08:45:30 mrg Exp */ - -#ifndef ECOFF_COMPAT - -#include <sys/cdefs.h> - -static void (*__CTOR_LIST__[1]) __P((void)) - __attribute__((__unused__)) - __attribute__((section(".ctors"))) = { (void *)0 }; /* XXX */ -static void (*__DTOR_LIST__[1]) __P((void)) - __attribute__((__unused__)) - __attribute__((section(".dtors"))) = { (void *)0 }; /* XXX */ - -#endif /* !ECOFF_COMPAT */ |