From owner-freebsd-current@FreeBSD.ORG Tue Oct 11 19:05:14 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 3903D106566C; Tue, 11 Oct 2011 19:05:14 +0000 (UTC) (envelope-from ler@lerctr.org) Received: from thebighonker.lerctr.org (lrosenman-1-pt.tunnel.tserv8.dal1.ipv6.he.net [IPv6:2001:470:1f0e:3ad::2]) by mx1.freebsd.org (Postfix) with ESMTP id EF4BA8FC15; Tue, 11 Oct 2011 19:05:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lerctr.org; s=lerami; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:References:Subject:CC:To:MIME-Version:From:Date:Message-ID; bh=nHtMY8FmWij98zYjmdI1uE4x52lcmXFixQ7LF3VKl3o=; b=ZXY6y+iuE7V2amZ8pGDgnMLFIapPKeg9BZvJscRP+wDvoLELYnnT8yB0+67UIJmk3hy823ugiI9WRzwim0lRUcU5GPpgbD3MpH5nRujXSSy6DD9fL5G2xPIckaLl9IMHVfoEVfdA5V/glAYwd3Oy4oyBWPRhhjpSYEtTqPjWkP8=; Received: from [32.97.110.60] (port=9002 helo=[9.41.58.142]) by thebighonker.lerctr.org with esmtpsa (TLSv1:CAMELLIA256-SHA:256) (Exim 4.76 (FreeBSD)) (envelope-from ) id 1RDhdX-000IHC-Iz; Tue, 11 Oct 2011 14:05:13 -0500 Message-ID: <4E949351.5040904@lerctr.org> Date: Tue, 11 Oct 2011 14:04:49 -0500 From: Larry Rosenman Organization: LERCTR Consulting 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: Arnaud Lacombe References: <4E942FF1.9000805@FreeBSD.org> <4E948D59.5020006@lerctr.org> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -2.9 (--) X-LERCTR-Spam-Score: -2.9 (--) X-Spam-Report: SpamScore (-2.9/5.0) ALL_TRUSTED=-1,BAYES_00=-1.9 X-LERCTR-Spam-Report: SpamScore (-2.9/5.0) ALL_TRUSTED=-1,BAYES_00=-1.9 Cc: =?ISO-8859-1?Q?Ren=E9_Ladan?= , freebsd-current@freebsd.org, Dimitry Andric 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 19:05:14 -0000 On 10/11/2011 1:52 PM, Arnaud Lacombe wrote: > Hi, > > On Tue, Oct 11, 2011 at 2:39 PM, Larry Rosenman wrote: >> On 10/11/2011 1:36 PM, Arnaud Lacombe wrote: >>> Hi, >>> >>> On Tue, Oct 11, 2011 at 8:00 AM, Dimitry Andric wrote: >>>> 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. >>>> >>> #ifdef _KERNEL/#endif protected part of system headers shall NEVER be >>> accessed by userland. It is a fault to have them present in >>> /usr/include. Linux got it right there, all those part are removed >>> upon headers' installation. >>> >>> - Arnaud >> Then lsof would NOT be compilable / usable at all, as it delves into >> /dev/kmem to get information. >> > AFAIK, Linux is capable of supporting lsof in a backward compatible > manner, without exposing its internal guts. > > FWIW, KVM is a bad kernel/userland interface, as it does not guarantee > backward compatibility. > >> And it **NEEDS** to know what the structures are. >> > No, not kernel-only structure. Now, if these structure are not meant > to be kernel only, move them out of _KERNEL area, but beware of > backward compatibility issue in the future. Therein lies the rub. In order to do it's job, it DOES need to grovel around in kernel only structures. > >> That is unless someone(tm) writes the Kernel interfaces to get the info. >> > Yes, this is the core of the problem and a classical chicken/eggs > problem solves the very wrongest way. > > At some point, I thought to modify the build system to pass kernel's > headers through unifdef(1), but I quickly forgot about that: > > % git grep 'define _KERNEL' * | grep -v '^sys' | wc -l > 27 > > - Arnaud This is not going to fix things until/unless someone(tm) takes the bull by the horns, and writes a userland<->kernel interface to get ALL the data that lsof currently gathers from groveling around in /dev/kmem. I don't have the skills nor time to do that. We can go around and around on this topic, but until/unless either the clang headers/built-ins are changed to match the system/kernel headers, or someone(tm) writes the interfaces, clang will NOT be supported to compile sysutils/lsof. -- Larry Rosenman http://www.lerctr.org/~ler Phone: +1 512-248-2683 E-Mail: ler@lerctr.org US Mail: 430 Valona Loop, Round Rock, TX 78681-3893