On 10/11/2011 1:52 PM, Arnaud Lacombe wrote:
Hi,
On Tue, Oct 11, 2011 at 2:39 PM, Larry Rosenman<l...@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<d...@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: l...@lerctr.org
US Mail: 430 Valona Loop, Round Rock, TX 78681-3893
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"