Date: Tue, 11 Oct 2011 14:00:49 +0200 From: Dimitry Andric <dim@FreeBSD.org> To: Larry Rosenman <ler@lerctr.org> Cc: =?ISO-8859-1?Q?Ren=E9_Ladan?= <rene@freebsd.org>, freebsd-current@FreeBSD.ORG Subject: Re: System headers with clang? Message-ID: <4E942FF1.9000805@FreeBSD.org> In-Reply-To: <alpine.BSF.2.00.1110091229550.43656@lrosenman.dyndns.org> References: <alpine.BSF.2.00.1110091229550.43656@lrosenman.dyndns.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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 <sys/param.h> and <sys/systm.h> before <sys/ufs/ufs/ufsmount.h>. ... > 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 <sys/conf.h> ++#ifdef ffs ++#undef ffs ++#endif + + # if defined(HAS_VM_MEMATTR_T) + #undef vm_memattr_t --------------050500050106010307010605--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E942FF1.9000805>