From owner-freebsd-current@FreeBSD.ORG Tue Oct 11 12:00:49 2011 Return-Path: Delivered-To: freebsd-current@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DCDE71065676; Tue, 11 Oct 2011 12:00:49 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from tensor.andric.com (cl-327.ede-01.nl.sixxs.net [IPv6:2001:7b8:2ff:146::2]) by mx1.freebsd.org (Postfix) with ESMTP id 5E7A98FC24; Tue, 11 Oct 2011 12:00:49 +0000 (UTC) Received: from [IPv6:2001:7b8:3a7:0:a106:2522:e412:93aa] (unknown [IPv6:2001:7b8:3a7:0:a106:2522:e412:93aa]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by tensor.andric.com (Postfix) with ESMTPSA id 442C55C37; Tue, 11 Oct 2011 14:00:48 +0200 (CEST) Message-ID: <4E942FF1.9000805@FreeBSD.org> Date: Tue, 11 Oct 2011 14:00:49 +0200 From: Dimitry Andric Organization: The FreeBSD Project User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1 MIME-Version: 1.0 To: Larry Rosenman References: In-Reply-To: Content-Type: multipart/mixed; boundary="------------050500050106010307010605" Cc: =?ISO-8859-1?Q?Ren=E9_Ladan?= , freebsd-current@FreeBSD.ORG Subject: Re: System headers with clang? X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Oct 2011 12:00:49 -0000 This is a multi-part message in MIME format. --------------050500050106010307010605 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 2011-10-09 19:32, Larry Rosenman wrote: > I had gotten a PR about sysutils/lsof not compiling with clang. I had > Vic Abell check it out, and the problem is NOT with lsof per se, but > with the system headers. > > Is there a project afoot to update the system headers to make them clang > compilable? The problem isn't that clang can't compile the system headers, but normally these don't get included from userspace. And they certainly won't work as expected when you define _KERNEL in userspace, as the lsof port foolishly does. It probably can't be avoided in such a tool, though. ... > In file included from ckkv.c:43: > In file included from ./../lsof.h:195: > In file included from ./../dlsof.h:190: > In file included from /usr/src/sys/ufs/ufs/ufsmount.h:36: > /usr/src/sys/sys/buf.h:388:2: warning: implicit declaration of function 'KASSERT' is invalid in C99 > [-Wimplicit-function-declaration] > KASSERT(bp->b_bufobj != NULL, ("bwrite: no bufobj bp=%p", bp)); > ^ > /usr/src/sys/sys/buf.h:388:33: warning: expression result unused [-Wunused-value] > KASSERT(bp->b_bufobj != NULL, ("bwrite: no bufobj bp=%p", bp)); > ^~~~~~~~~~~~~~~~~~~~~~~~~ These are more or less harmless warnings, as long as nobody calls a function that uses KASSERT. They occur because lsof's headers don't include and before . ... > In file included from ckkv.c:43: > In file included from ./../lsof.h:195: > In file included from ./../dlsof.h:432: > In file included from /usr/include/string.h:45: > /usr/include/strings.h:47:6: error: conflicting types for '__builtin_ffs' > int ffs(int) __pure2; > ^ > /usr/include/machine/cpufunc.h:140:24: note: expanded from: > #define ffs(x) __builtin_ffs(x) > ^ > /usr/include/strings.h:47:6: note: '__builtin_ffs' is a builtin with type 'int (unsigned int)' This is because the amd64 system headers redefine ffs to __builtin_ffs, after which it conflicts with the declaration in /usr/include/strings.h. On i386, ffs is not redefined, but I have no idea why. In any case, gcc does not complain about the incompatible redeclaration, which may be a bug, or just stupid luck, depending on your POV. :) I've attached a fix for the lsof port, which also makes it build on 10.0-CURRENT (this was easy to fix here, as lsof uses its own hand-rolled configuration script). Let me know if it works for you. --------------050500050106010307010605 Content-Type: text/plain; name="clangports-sysutils-lsof-1.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="clangports-sysutils-lsof-1.diff" Index: sysutils/lsof/files/patch-Configure =================================================================== RCS file: sysutils/lsof/files/patch-Configure diff -N sysutils/lsof/files/patch-Configure --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ sysutils/lsof/files/patch-Configure 11 Oct 2011 11:44:44 -0000 @@ -0,0 +1,72 @@ +--- Configure.orig 2011-08-15 18:15:56.000000000 +0200 ++++ Configure 2011-10-11 13:30:37.000000000 +0200 +@@ -1428,7 +1428,7 @@ + 3.5*) + LSOF_VERS=3050 + ;; +- 3*) ++ 3.*) + LSOF_VERS=3050 + echo "!!!WARNING!!! Unsupported FreeBSD version: $LSOF_VSTR" + echo "!!!WARNING!!! Configuring for FreeBSD 3.5" +@@ -1481,7 +1481,7 @@ + LSOF_TSTBIGF=" " + LSOF_VERS=4110 + ;; +- 4*) ++ 4.*) + LSOF_VERS=4100 + echo "!!!WARNING!!! Unsupported FreeBSD version: $LSOF_VSTR" + echo "!!!WARNING!!! Configuring for FreeBSD 4.10" +@@ -1510,7 +1510,7 @@ + LSOF_TSTBIGF=" " + LSOF_VERS=5050 + ;; +- 5*) ++ 5.*) + LSOF_VERS=5050 + echo "!!!WARNING!!! Unsupported FreeBSD version: $LSOF_VSTR" + echo "!!!WARNING!!! Configuring for FreeBSD 5.5" +@@ -1535,7 +1535,7 @@ + LSOF_TSTBIGF=" " + LSOF_VERS=6040 + ;; +- 6*) ++ 6.*) + LSOF_VERS=6000 + echo "!!!WARNING!!! Unsupported FreeBSD version: $LSOF_VSTR" + echo "!!!WARNING!!! Configuring for FreeBSD 6.0" +@@ -1560,7 +1560,7 @@ + LSOF_TSTBIGF=" " + LSOF_VERS=7040 + ;; +- 7*) ++ 7.*) + LSOF_VERS=7000 + echo "!!!WARNING!!! Unsupported FreeBSD version: $LSOF_VSTR" + echo "!!!WARNING!!! Configuring for FreeBSD 7.0" +@@ -1577,10 +1577,14 @@ + LSOF_TSTBIGF=" " + LSOF_VERS=8020 + ;; +- 9*) ++ 9.*) + LSOF_TSTBIGF=" " + LSOF_VERS=9000 + ;; ++ 10.*) ++ LSOF_TSTBIGF=" " ++ LSOF_VERS=10000 ++ ;; + *) + echo Unknown FreeBSD release: `uname -r` + echo Assuming FreeBSD 2.x +@@ -1684,7 +1688,7 @@ + LSOF_CFGF="$LSOF_CFGF -DHASVMLOCKH" + fi # } + ;; +- 4000|4010|4020|4030|4040|4050|4060|4070|4080|4090|4100|4110|5000|5010|5020|5030|5040|5050|6000|6010|6020|6030|6040|7000|7010|7020|7030|7040|8000|8010|8020|9000) ++ 4000|4010|4020|4030|4040|4050|4060|4070|4080|4090|4100|4110|5000|5010|5020|5030|5040|5050|6000|6010|6020|6030|6040|7000|7010|7020|7030|7040|8000|8010|8020|9000|10000) + if test -r ${LSOF_INCLUDE}/nfs/rpcv2.h # { + then + LSOF_CFGF="$LSOF_CFGF -DHASRPCV2H" Index: sysutils/lsof/files/patch-dialects-freebsd-dlsof.h =================================================================== RCS file: sysutils/lsof/files/patch-dialects-freebsd-dlsof.h diff -N sysutils/lsof/files/patch-dialects-freebsd-dlsof.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ sysutils/lsof/files/patch-dialects-freebsd-dlsof.h 11 Oct 2011 11:44:44 -0000 @@ -0,0 +1,12 @@ +--- dialects/freebsd/dlsof.h.orig 2011-08-15 18:15:57.000000000 +0200 ++++ dialects/freebsd/dlsof.h 2011-10-11 13:34:59.000000000 +0200 +@@ -88,6 +88,9 @@ + # endif /* defined(NEEDS_BOOLEAN_T) */ + + #include ++#ifdef ffs ++#undef ffs ++#endif + + # if defined(HAS_VM_MEMATTR_T) + #undef vm_memattr_t --------------050500050106010307010605--