Re: System headers with clang?

From: Larry Rosenman <ler_at_lerctr.org>
Date: Tue, 11 Oct 2011 14:04:49 -0500
On 10/11/2011 1:52 PM, Arnaud Lacombe wrote:
> 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.
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_at_lerctr.org
US Mail: 430 Valona Loop, Round Rock, TX 78681-3893
Received on Tue Oct 11 2011 - 17:05:14 UTC

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