diff --git a/Makefile.inc1 b/Makefile.inc1 index c03c5922a0e0..8ba6c03bff99 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -650,6 +650,7 @@ includes: .if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}) cd ${.CURDIR}/lib/csu/${MACHINE_ARCH}; ${MAKE} beforeinstall .endif + cd ${.CURDIR}/gnu/lib/csu; ${MAKE} beforeinstall cd ${.CURDIR}/lib/libalias; ${MAKE} beforeinstall cd ${.CURDIR}/lib/libatm; ${MAKE} beforeinstall cd ${.CURDIR}/lib/libdevstat; ${MAKE} beforeinstall @@ -745,7 +746,7 @@ _libkeycap= usr.sbin/pcvt/keycap .endif libraries: -.for _lib in ${_csu} lib/libmd lib/libcrypt ${_secure_lib} ${_kerberosIV_lib} \ +.for _lib in ${_csu} gnu/lib/csu lib/libmd lib/libcrypt ${_secure_lib} ${_kerberosIV_lib} \ ${_kerberos5_lib} gnu/lib/libgcc lib/libcom_err ${_libm} lib/libncurses \ lib/libopie lib/libradius lib/libskey lib/libtacplus lib/libutil \ lib/libz lib gnu/lib \ diff --git a/gnu/lib/Makefile b/gnu/lib/Makefile index a577f54e3e32..e2accacdcf34 100644 --- a/gnu/lib/Makefile +++ b/gnu/lib/Makefile @@ -1,6 +1,6 @@ # $FreeBSD$ -SUBDIR= libdialog libgcc libgcc_r libgmp libmp libregex libreadline +SUBDIR= csu libdialog libgcc libgcc_r libgmp libmp libregex libreadline .if !defined(NO_CXX) SUBDIR+= libstdc++ diff --git a/gnu/lib/csu/Makefile b/gnu/lib/csu/Makefile new file mode 100644 index 000000000000..3a94ab8d84e5 --- /dev/null +++ b/gnu/lib/csu/Makefile @@ -0,0 +1,56 @@ +# $FreeBSD$ + +GCCDIR= ${.CURDIR}/../../../contrib/gcc.295 +.PATH: ${GCCDIR} + +SRCS= crtstuff.c tm.h +OBJS= crtbegin.o crtend.o +SOBJS= crtbegin.So crtend.So +CFLAGS+= -I${GCCDIR}/config -I. -DIN_GCC \ + -finhibit-size-directive -fno-inline-functions \ + -fno-exceptions -fno-omit-frame-pointer +NOMAN= true +NOPIC= true +NOPROFILE= true +INTERNALLIB= true +CLEANFILES+= tm.h + +CRTS_CFLAGS= -DCRTSTUFFS_O ${PICFLAG} + +all: ${OBJS} ${SOBJS} + +crtbegin.o: crtstuff.c tm.h + ${CC} ${CFLAGS} -g0 -DCRT_BEGIN \ + -c -o ${.TARGET} ${GCCDIR}/crtstuff.c + +crtbegin.So: crtstuff.c tm.h + ${CC} ${CFLAGS} -g0 -DCRT_BEGIN ${CRTS_CFLAGS} \ + -c -o ${.TARGET} ${GCCDIR}/crtstuff.c + +crtend.o: crtstuff.c tm.h + ${CC} ${CFLAGS} -g0 -DCRT_END \ + -c -o ${.TARGET} ${GCCDIR}/crtstuff.c + +crtend.So: crtstuff.c tm.h + ${CC} ${CFLAGS} -g0 -DCRT_END ${CRTS_CFLAGS} \ + -c -o ${.TARGET} ${GCCDIR}/crtstuff.c + +# KEEP THIS IN SYNC with src/gnu/usr.bin/cc/cc_tools/Makefile !! +tm.h: + echo '#include "${MACHINE_ARCH}/${MACHINE_ARCH}.h"' > ${.TARGET} +.if ${MACHINE_ARCH} == "i386" + echo '#include "${MACHINE_ARCH}/att.h"' >> ${.TARGET} +.endif + echo '#include ' >> ${.TARGET} + echo '#include "${MACHINE_ARCH}/freebsd.h"' >> ${.TARGET} +.if ${MACHINE_ARCH} == "i386" + echo '#include "${MACHINE_ARCH}/perform.h"' >> ${.TARGET} +.endif + +realinstall: +.for file in ${OBJS} ${SOBJS} + ${INSTALL} ${COPY} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ + ${file} ${DESTDIR}${LIBDIR}/${file:S/.So$/S.o/} +.endfor + +.include diff --git a/lib/csu/alpha/Makefile b/lib/csu/alpha/Makefile index d2155684420a..519446e85b5d 100644 --- a/lib/csu/alpha/Makefile +++ b/lib/csu/alpha/Makefile @@ -2,11 +2,11 @@ # $FreeBSD$ # -SRCS= crt1.c crtbegin.c crtend.c -OBJS= crt1.o crtbegin.o crtend.o +SRCS= crt1.c +OBJS= crt1.o OBJS+= gcrt1.o -SOBJS= crtbegin.So crtend.So -CFLAGS+= -Wall -Wno-unused +CFLAGS+= -Wall -Wno-unused \ + -I${.CURDIR}/../common NOMAN= true NOPIC= true NOPROFILE= true diff --git a/lib/csu/alpha/crt1.c b/lib/csu/alpha/crt1.c index 095effc3a022..40c08988cc32 100644 --- a/lib/csu/alpha/crt1.c +++ b/lib/csu/alpha/crt1.c @@ -38,6 +38,7 @@ #endif #include +#include "crtbrand.c" struct Struct_Obj_Entry; struct ps_strings; diff --git a/lib/csu/amd64/Makefile b/lib/csu/amd64/Makefile index 70e66b16d165..2082a7050069 100644 --- a/lib/csu/amd64/Makefile +++ b/lib/csu/amd64/Makefile @@ -2,11 +2,11 @@ # $FreeBSD$ # -SRCS= crt1.c crtbegin.c crtend.c crti.S crtn.S +SRCS= crt1.c crti.S crtn.S OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= gcrt1.o -SOBJS= crtbegin.So crtend.So -CFLAGS+= -elf -Wall -fkeep-inline-functions +CFLAGS+= -elf -Wall -fkeep-inline-functions \ + -I${.CURDIR}/../common LDFLAGS+= -elf NOMAN= true NOPIC= true diff --git a/lib/csu/amd64/crt1.c b/lib/csu/amd64/crt1.c index 0ee070227107..ad1d25f95b81 100644 --- a/lib/csu/amd64/crt1.c +++ b/lib/csu/amd64/crt1.c @@ -31,6 +31,7 @@ #include #include +#include "crtbrand.c" typedef void (*fptr)(void); diff --git a/lib/csu/amd64/crti.S b/lib/csu/amd64/crti.S index 536d2c243efa..82b262f4dcbe 100644 --- a/lib/csu/amd64/crti.S +++ b/lib/csu/amd64/crti.S @@ -25,7 +25,14 @@ * $FreeBSD$ */ -/* - * This file is not used any more. It will go away as soon as the gcc - * linker specs have been updated accordingly. - */ + .section .init,"ax",@progbits + .align 4 + .globl _init + .type _init,@function +_init: + + .section .fini,"ax",@progbits + .align 4 + .globl _fini + .type _fini,@function +_fini: diff --git a/lib/csu/amd64/crtn.S b/lib/csu/amd64/crtn.S index 536d2c243efa..361ab1e2e157 100644 --- a/lib/csu/amd64/crtn.S +++ b/lib/csu/amd64/crtn.S @@ -25,7 +25,8 @@ * $FreeBSD$ */ -/* - * This file is not used any more. It will go away as soon as the gcc - * linker specs have been updated accordingly. - */ + .section .init,"ax",@progbits + ret + + .section .fini,"ax",@progbits + ret diff --git a/lib/csu/common/crtbegin.c b/lib/csu/common/crtbegin.c index 7693d2be64ed..172ee4bafd86 100644 --- a/lib/csu/common/crtbegin.c +++ b/lib/csu/common/crtbegin.c @@ -82,21 +82,4 @@ _fini(void) (*p_do_dtors)(); } -/* - * Special ".note" entry specifying the ABI version. See - * http://www.netbsd.org/Documentation/kernel/elf-notes.html - * for more information. - */ -static const struct { - int32_t namesz; - int32_t descsz; - int32_t type; - char name[sizeof ABI_VENDOR]; - int32_t desc; -} abitag __attribute__ ((section (ABI_SECTION))) = { - sizeof ABI_VENDOR, - sizeof(int32_t), - ABI_NOTETYPE, - ABI_VENDOR, - __FreeBSD_version -}; +#include "crtbegin.c" diff --git a/lib/csu/common/crtbrand.c b/lib/csu/common/crtbrand.c new file mode 100644 index 000000000000..aef659af8d39 --- /dev/null +++ b/lib/csu/common/crtbrand.c @@ -0,0 +1,51 @@ +/*- + * Copyright 1996, 1997, 1998, 2000 John D. Polstra. + * 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. + * + * 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. + * + * $FreeBSD$ + */ + +#include + +#define ABI_VENDOR "FreeBSD" +#define ABI_SECTION ".note.ABI-tag" +#define ABI_NOTETYPE 1 + +/* + * Special ".note" entry specifying the ABI version. See + * http://www.netbsd.org/Documentation/kernel/elf-notes.html + * for more information. + */ +static const struct { + int32_t namesz; + int32_t descsz; + int32_t type; + char name[sizeof ABI_VENDOR]; + int32_t desc; +} abitag __attribute__ ((section (ABI_SECTION))) = { + sizeof ABI_VENDOR, + sizeof(int32_t), + ABI_NOTETYPE, + ABI_VENDOR, + __FreeBSD_version +}; diff --git a/lib/csu/i386-elf/Makefile b/lib/csu/i386-elf/Makefile index 70e66b16d165..2082a7050069 100644 --- a/lib/csu/i386-elf/Makefile +++ b/lib/csu/i386-elf/Makefile @@ -2,11 +2,11 @@ # $FreeBSD$ # -SRCS= crt1.c crtbegin.c crtend.c crti.S crtn.S +SRCS= crt1.c crti.S crtn.S OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= gcrt1.o -SOBJS= crtbegin.So crtend.So -CFLAGS+= -elf -Wall -fkeep-inline-functions +CFLAGS+= -elf -Wall -fkeep-inline-functions \ + -I${.CURDIR}/../common LDFLAGS+= -elf NOMAN= true NOPIC= true diff --git a/lib/csu/i386-elf/crt1.c b/lib/csu/i386-elf/crt1.c index 0ee070227107..ad1d25f95b81 100644 --- a/lib/csu/i386-elf/crt1.c +++ b/lib/csu/i386-elf/crt1.c @@ -31,6 +31,7 @@ #include #include +#include "crtbrand.c" typedef void (*fptr)(void); diff --git a/lib/csu/i386-elf/crti.S b/lib/csu/i386-elf/crti.S index 536d2c243efa..82b262f4dcbe 100644 --- a/lib/csu/i386-elf/crti.S +++ b/lib/csu/i386-elf/crti.S @@ -25,7 +25,14 @@ * $FreeBSD$ */ -/* - * This file is not used any more. It will go away as soon as the gcc - * linker specs have been updated accordingly. - */ + .section .init,"ax",@progbits + .align 4 + .globl _init + .type _init,@function +_init: + + .section .fini,"ax",@progbits + .align 4 + .globl _fini + .type _fini,@function +_fini: diff --git a/lib/csu/i386-elf/crtn.S b/lib/csu/i386-elf/crtn.S index 536d2c243efa..361ab1e2e157 100644 --- a/lib/csu/i386-elf/crtn.S +++ b/lib/csu/i386-elf/crtn.S @@ -25,7 +25,8 @@ * $FreeBSD$ */ -/* - * This file is not used any more. It will go away as soon as the gcc - * linker specs have been updated accordingly. - */ + .section .init,"ax",@progbits + ret + + .section .fini,"ax",@progbits + ret diff --git a/lib/csu/ia64/Makefile b/lib/csu/ia64/Makefile index fc988570ed3a..41c0aa8806b0 100644 --- a/lib/csu/ia64/Makefile +++ b/lib/csu/ia64/Makefile @@ -7,6 +7,7 @@ OBJS= crt1.o crtbegin.o crtend.o OBJS+= gcrt1.o SOBJS= crtbegin.So crtend.So CFLAGS+= -Wall -Wno-unused +CFLAGS+= -I${.CURDIR}/../common NOMAN= true NOPIC= true NOPROFILE= true diff --git a/lib/csu/ia64/crt1.c b/lib/csu/ia64/crt1.c index 8fa06ba64257..4f5923339e8e 100644 --- a/lib/csu/ia64/crt1.c +++ b/lib/csu/ia64/crt1.c @@ -38,6 +38,7 @@ #endif #include +#include "crtbrand.c" struct Struct_Obj_Entry; struct ps_strings;