Date: Fri, 21 Apr 1995 17:00:44 +0200 From: Dirk Steinberg <Dirk.Steinberg@gmd.de> To: hackers@FreeBSD.org Subject: Patches to compile Kernel and Libraries with '-O3 -fomit-frame-pointer' Message-ID: <9504211500.ZM15146@tonic.gmd.de>
next in thread | raw e-mail | index | archive | help
Hi, After some deadly failures I succeeded in compiling and running FreeBSD-950417 with maximum gcc optimization: "-O3 -fomit-frame-pointer". As for the gcc flags, this is easily accomplished by editing /etc/make.conf for the user-level code. For the kernel itself the appropriate line in the Makefile containing the "COPTFLAGS" definition needs to be adapted. Needless to say, for both the kernel and the user-land, this didn't work at first: /usr/libexec/ld.so fails horribly when compiled with "-fomit-frame-pointer". I learned the hard way :-( (after compiling /bin and /sbin dynamically...). For the kernel compile, the functions dummyinit() in in kern/init_main.c and dummy_cleanup() in kern/kern_xxx.c get optimized away by gcc when compiling with an optimization setting higher than "-O2", e.g. "-O3". The following patch fixes these problems. Apart from these, the machine now runs happily with an uptime of 3 days... - Dirk PS: If I could only get a new sup from freefall... It replies to ping, but the supfilesrv seems to have died. diff -ur 950417/lib/csu/i386/Makefile ./lib/csu/i386/Makefile --- 950417/lib/csu/i386/Makefile Thu Mar 30 11:09:46 1995 +++ ./lib/csu/i386/Makefile Sun Apr 23 23:36:35 1995 @@ -1,7 +1,7 @@ # from: @(#)Makefile 5.6 (Berkeley) 5/22/91 # $Id: Makefile,v 1.15 1995/03/30 06:40:31 phk Exp $ -CFLAGS+= -DLIBC_SCCS -DDYNAMIC +CFLAGS+= -DLIBC_SCCS -DDYNAMIC -fno-omit-frame-pointer OBJS= crt0.o gcrt0.o c++rt0.o CLEANFILES+= a.out MAN3+= dlopen.3 diff -ur 950417/sys/kern/init_main.c ./sys/kern/init_main.c --- 950417/sys/kern/init_main.c Mon Apr 10 22:20:26 1995 +++ ./sys/kern/init_main.c Mon Apr 17 19:54:21 1995 @@ -110,7 +110,7 @@ * called to initialize various pseudo-devices and whatnot. */ -static void dummyinit() {} +void dummyinit() {} TEXT_SET(pseudo_set, dummyinit); typedef void (*pseudo_func_t)(void); diff -ur 950417/sys/kern/kern_xxx.c ./sys/kern/kern_xxx.c --- 950417/sys/kern/kern_xxx.c Sun Dec 4 20:58:43 1994 +++ ./sys/kern/kern_xxx.c Mon Apr 17 19:53:16 1995 @@ -46,7 +46,7 @@ /* This implements a "TEXT_SET" for cleanup functions */ -static void +void dummy_cleanup() {} TEXT_SET(cleanup_set, dummy_cleanup); ------------ snip, snip ----------------- -- ------------------------------------------------------------------------------ Dirk W. Steinberg - German National Research Center for Computer Science (GMD) Institute for Application-Oriented Software- and Systems Technology (ISA-NW) Network Engineering Department - Rathausallee 10 - D-53754 Sankt Augustin Phone: +49 2241 14-3182 - Fax: +49 2241 14-3038 - Email: Dirk.Steinberg@gmd.de
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9504211500.ZM15146>