Re: New Kernel Breaks IPFW

From: Terry Lambert <tlambert2_at_mindspring.com>
Date: Tue, 10 Jun 2003 03:58:29 -0700
Ian Freislich wrote:
> Alas make buildworld fails for the past few days:
> ===> usr.sbin/config
> <snip>
> In file included from config.c:1:
> /usr/include/stdlib.h:102: conflicting types for `restrict'
> /usr/include/stdlib.h:102: previous declaration of `restrict'
> /usr/include/stdlib.h:102: warning: redundant redeclaration of `restrict' in same scope
> /usr/include/stdlib.h:102: warning: previous declaration of `restrict'
> /usr/include/stdlib.h:103: conflicting types for `restrict'
> <snip>
> (and also stdio.h, string.h, sys/types.h, select.h)

>From <sys/cdefs.h>:
-----------------------------------------------------------------------------
/*
 * GCC 2.95 provides `__restrict' as an extension to C90 to support the
 * C99-specific `restrict' type qualifier.  We happen to use `__restrict' as
 * a way to define the `restrict' type qualifier without disturbing older
 * software that is unaware of C99 keywords.
 */
#if !(__GNUC__ == 2 && __GNUC_MINOR__ == 95)
#if __STDC_VERSION__ < 199901
#define __restrict
#else
#define __restrict      restrict
#endif
#endif
-----------------------------------------------------------------------------

The <stdlib.h> hasn't changed in over two months; <sys/cdefs.h>
hasn't changed in about 7 weeks.

Apparently, someone hosed the compiler flags.  Looking at your
cribbed link:

> Someone posted a link to the failure that I get, so I'll crib:
> http://www.0xfce3.net/error.txt

We see:

cc -O -pipe   -std=iso9899:1999  -I/usr/obj/usr/src/i386/legacy/usr/include 
-static -L/usr/obj/usr/src/i386/legacy/usr/lib -o xinstall xinstall.o -legacy

Works.

cc -O -pipe -I. -I/usr/src/usr.sbin/config -W -Wall -ansi -pedantic
-Wbad-function-cast -Wcast-align  -Wcast-qual -Wchar-subscripts -Winline 
-Wmissing-prototypes -Wnested-externs -Wpointer-arith  -Wredundant-decls
-Wshadow -Wstrict-prototypes -Wwrite-strings   -std=iso9899:1999 
-I/usr/obj/usr/src/i386/legacy/usr/include -c config.c

Hosed.  I believe you'll find that it's the comobination of
the compiler flags "-ansi -pedantic" with "-std-iso9899:1999"...
this might be pilot error in your local make.conf, as well,
since I think it turns off GNU extensions, which we apparently
depend upon, but my money is on:

http://www.freebsd.org/cgi/cvsweb.cgi/src/share/mk/bsd.sys.mk
 
Version 1.29:

"Be C std strict on i386 and amd64 as we can.  Be loose on Alpha
 and ia64".

...or maybe 1.25:

"Turn back on c99, the tree should be ready for it now."


> > Short term, cd /usr/src/sbin/ipfw; make depend && make all install ought
> > to fix it.
> 
> I tried that as well, but the new binary also dumps core, but works
> well with previous versions of the firewall.  Even back as far as
> my kernel.working from May 7 2003.

Bogus header files; specifically, <netinet/ip_fw.h>.  Because you
can't build world, you are compiling the ipfw program with the old
system include files instead of the new ones.  You may also be
missing a cvs update on the ipfw sources themselves (specifically,
ipfw2.c).

-- Terry
Received on Tue Jun 10 2003 - 02:03:54 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:11 UTC