cvs commit: src/sys/sys sx.h

John Baldwin jhb at
Wed Aug 30 18:38:30 UTC 2006

On Wednesday 30 August 2006 05:37, Bruce Evans wrote:
> On Tue, 29 Aug 2006, John Baldwin wrote:
> > jhb         2006-08-29 20:36:33 UTC
> >
> >  FreeBSD src repository
> >
> >  Modified files:
> >    sys/sys              sx.h
> >  Log:
> >  The _sx_assert() prototype should exist if either of INVARIANTS or
> >  INVARIANT_SUPPORT is defined so you can build a kernel with
> >  INVARIANT_SUPPORT, but build a module with just INVARIANTS on.
> No it shouldn't.  INVARIANT_SUPPORT is a documented prerequisite for
> INVARIANTS.  So is the resulting requirements for using INVARIANTS to
> create non-modular "modules":  From /sys/conf/NOTES:
> # The INVARIANT_SUPPORT option makes us compile in support for
> # verifying some of the internal structures.  It is a prerequisite for
>                                                ^^^^^^^^^^^^^^^^^^^^^^^^
> # 'INVARIANTS', as enabling 'INVARIANTS' will make these functions be
>    ^^^^^^^^^^^^
> # called.  The intent is that you can set 'INVARIANTS' for single
> # source files (by changing the source file or specifying it on the
> # command line) if you have 'INVARIANT_SUPPORT' enabled.  Also, if you
>                                                            ^^^^^^^^^^^^
> # wish to build a kernel module with 'INVARIANTS', then adding
>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # 'INVARIANT_SUPPORT' to your kernel will provide all the necessary
>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> # infrastructure without the added overhead.
>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> However, INVARIANTS is a fairly bogus option.  Last time I looked
> (long ago) it only controlled a small amount of kernel bloat, and there
> are probably many other functions that are defined unconditionally else
> modules with INVARIANTS would be more broken.

Err, the text in NOTES is probably wrong then.  The idea is that INVARIANTS 
enables various assertions.  Similar to how NDEBUG turns off assert() (but 
inverted).  The purpose of INVARIANT_SUPPORT is to provide any needed 
assertion-supporting code (such as _foo_assert()) macros in the kernel.  
Thus, if I want to run any code that uses INVARIANTs, I need to have a kernel 
built with INVARIANT_SUPPORT.  However, I might build only selected portions 
of the kernel with INVARIANTS.  For example, I might build none of the kernel 
with INVARIANTS, but only a kernel module for a device driver being developed 
or a test kernel module (like my crash.c and crash2.c.).

John Baldwin

More information about the cvs-src mailing list