sys/proc.h inclusion of sys/time.h
Bruce Evans
brde at optusnet.com.au
Wed Jul 9 11:06:35 UTC 2014
On Wed, 9 Jul 2014, Bruce Evans wrote:
> On Tue, 8 Jul 2014, Bryan Drewery wrote:
>
>> In r34924 sys/proc.h was changed to only include sys/time.h if not building
>> in kernel.
> ...
>> struct proc {
>> ..
>> struct itimerval p_realtimer; /* (c) Alarm timer. */
>>
>> This manifests when (hackishly) including sys/proc.h with _KERNEL defined:
>>
>>> In file included from
>>> /root/svn/base/usr.sbin/tcpdump/tcpdump/../../../contrib/tcpdump/print-pflog.c:37:
>>> /usr/include/sys/proc.h:524:19: error: field has incomplete type 'struct
>>> itimerval'
>>> struct itimerval p_realtimer; /* (c) Alarm timer. */
>>
>> (Why am I doing this? I need PID_MAX and NO_PID for a tcpdump change I am
>> testing that is intended for upstreaming. Perhaps I can use kern.pid_max in
>> __FreeBSD__ and other hacks on other platforms, I have not yet decided on
>> this.)
>
> Ah, you were chummy with the implementation, but not chummy enough to
> know all the details of the kernel environment that must be duplicated
> to use the hack of defining _KERNEL. It seems to be necessary to include
> sys/param.h and define _KERNEL before that. There may be collateral
> pollution and further chumminess to avoid problems with it.
PS: in some old cleanups, proc.h caused similar problems but I was
able to avoid them by not including it at all. It is less needed for
abuse outside the kernel than most kernel headers.
% diff -u2 ./kvm.c~ ./kvm.c
% --- ./kvm.c~ Wed Jun 9 06:13:50 2004
% +++ ./kvm.c Wed Jun 9 06:13:51 2004
% @@ -46,10 +46,10 @@
%
% #include <sys/param.h>
% -#include <sys/user.h>
% -#include <sys/proc.h>
These cleanups are mainly to combine with ones for sys/user.h. Here I
mainly just wanted to sort it. but sys/proc.h dependend on the sys/time.h
pollution in it.
% +#include <sys/errno.h>
% #include <sys/ioctl.h>
% +#include <sys/linker.h>
% #include <sys/stat.h>
% #include <sys/sysctl.h>
% -#include <sys/linker.h>
% +#include <sys/user.h>
%
% #include <vm/vm.h>
% diff -u2 ./kvm_file.c~ ./kvm_file.c
% --- ./kvm_file.c~ Fri Aug 1 21:47:20 2003
% +++ ./kvm_file.c Fri Aug 1 21:47:53 2003
% @@ -48,23 +48,14 @@
% */
%
% -#include <sys/param.h>
% -#include <sys/user.h>
% -#include <sys/proc.h>
% +#include <sys/types.h>
% #define _KERNEL
% #include <sys/file.h>
% #undef _KERNEL
sys/param.h turns out to be mustly unnecessary here. Defining _KERNEL
before including it was not needed partly because including it at all
is not needed, except possibly for other things that are not needed.
% -#include <sys/stat.h>
% -#include <sys/ioctl.h>
% -#include <nlist.h>
% -#include <kvm.h>
% -
% -#include <vm/vm.h>
% -#include <vm/vm_param.h>
% -
% #include <sys/sysctl.h>
%
% +#include <kvm.h>
% #include <limits.h>
% -#include <ndbm.h>
% -#include <paths.h>
% +#include <nlist.h>
% +#include <stddef.h>
%
% #include "kvm_private.h"
% diff -u2 ./kvm_i386.c~ ./kvm_i386.c
% --- ./kvm_i386.c~ Thu Oct 11 20:18:31 2001
% +++ ./kvm_i386.c Sun Sep 8 01:05:29 2002
% @@ -52,5 +52,4 @@
% #include <sys/param.h>
% #include <sys/user.h>
% -#include <sys/proc.h>
% #include <sys/stat.h>
% #include <stdlib.h>
% @@ -60,4 +59,5 @@
%
% #include <vm/vm.h>
% +#include <vm/pmap.h>
% #include <vm/vm_param.h>
%
PS2: grepping for PID_MAX shows that ps used to use BSD_PID_MAX (defined
as 99999. That was supposed to be a copy of the kernel PID_MAX, perhaps
to avoid the namespace problem. It now uses kern.pid_max with a
fallback to 99999.
Bruce
More information about the freebsd-arch
mailing list