KASSERT(9) | Kernel Developer's Manual | KASSERT(9)

# NAME

`KASSERT`, `KASSERTMSG`, `KDASSERT`, `KDASSERTMSG` —
kernel expression verification macros

# SYNOPSIS

void
`KASSERT`(expression);

void
`KASSERTMSG`(expression, format, ...);

void
`KDASSERT`(expression);

void
`KDASSERTMSG`(expression, format, ...);

# DESCRIPTION

These machine independent assertion-checking macros cause a kernel panic(9) if the given expression evaluates to false. Two compile-time options(4) define the behavior of the checks.

1. The `KASSERT`() and `KASSERTMSG`() tests are included only in kernels compiled with the `DIAGNOSTIC` configuration option. In a kernel that does not have this configuration option, the macros are defined to be no-ops.
2. The `KDASSERT`() and `KDASSERTMSG`() tests are included only in kernels compiled with the `DEBUG` configuration option. The `KDASSERT`() and `KASSERT`() macros are identical except for the controlling option (`DEBUG` vs `DIAGNOSTIC`). Basically, `KASSERT`() should be used for light-weight checks and `KDASSERT`() should be used for heavier ones.

Callers should not rely on the side effects of expression because, depending on the kernel compile options mentioned above, expression might not be evaluated at all.

The panic message will display the style of assertion (debugging vs. diagnostic), the expression that failed and the filename, and line number the failure happened on. The `KASSERTMSG`() and `KDASSERTMSG`() macros append to the panic(9) format string the message specified by format and its subsequent arguments, similar to printf(9) functions.

# SEE ALSO

config(1), options(4), CTASSERT(9), panic(9), printf(9)

# AUTHORS

These macros were written by Chris G. Demetriou ⟨cgd@netbsd.org⟩.

September 27, 2011 | NetBSD 9.0