cvs commit: src/sys/sys sx.h
John Baldwin
jhb at freebsd.org
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