On Mon, Nov 15, 2010 at 10:41:55PM +0000, David Laight wrote: > > Indeed. Properly speaking though, headers that are exported to > > userland should define only the precise symbols that userland needs; > > kernel-only material should be kept elsewhere. > > One start would be to add a sys/proc_internal.h so that sys/proc > can be reduced to only stuff that userspace and some kernel parts > are really expected to use.
The right way (TM) is to create src/sys/include and put kernel-only headers in there, to be included as e.g. <proc.h>. In the long term the user-visible parts would go in src/sys/include/kern/proc.h, which would be included as <kern/proc.h>. (It has to be kern/ and not sys/ because a couple decades of standards creep and poor API maintenance has led to half of sys/*.h properly belonging to libc. In order to avoid repeating this problem in the future, all APIs should be defined without direct reference to any kern/*.h files; those should only be included from other libc or kernel headers. So libc would grow its own <sys/proc.h> because that's part of the libkvm API.) When done completely the entire kern/ subtree is the same for both userland and the kernel, including MD headers, no other random kernel headers need to be installed, and there's no longer any need for #ifdef _KERNEL. As much as this probably sounds obvious, the first couple of times I set out to do it myself I got it wrong. (And it's wrong in Linux too.) -- David A. Holland dholl...@netbsd.org