System headers with clang?
Arnaud Lacombe
lacombar at gmail.com
Tue Oct 11 18:52:27 UTC 2011
Hi,
On Tue, Oct 11, 2011 at 2:39 PM, Larry Rosenman <ler at lerctr.org> wrote:
> On 10/11/2011 1:36 PM, Arnaud Lacombe wrote:
>>
>> Hi,
>>
>> On Tue, Oct 11, 2011 at 8:00 AM, Dimitry Andric<dim at freebsd.org> 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.
> 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
More information about the freebsd-current
mailing list