[debug] Allow debug messages to be initially disabled at runtime
authorMichael Brown <mcb30@ipxe.org>
Tue, 5 Jul 2016 09:19:36 +0000 (10:19 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 5 Jul 2016 11:34:15 +0000 (12:34 +0100)
commit6e1ce52d146fe8197c1b58e2e3b0ebcf9ccda349
tree9e7b87b2c3fd99f757ee40fadd0a5146040e0097
parente2c0a20d60cac7e29f8aa6ed8231338eb34e9736
[debug] Allow debug messages to be initially disabled at runtime

Extend the DEBUG=... syntax to allow debug messages to be compiled in
but disabled by default.  For example:

  make bin/undionly.kpxe DEBUG=netdevice:3:1

would compile in the messages as for DEBUG=netdevice:3, but would set
the debug level mask so that only the DEBUG=netdevice:1 messages would
be displayed.

This allows for external code to selectively enable the additional
debug messages at runtime, without being overwhelmed by unwanted
initial noise.  For example, a developer of a new protocol may want to
temporarily enable tracing of all packets received: this can be done
by building with DEBUG=netdevice:3:1 and using

  // temporarily enable per-packet messages
  DBG_ENABLE_OBJECT ( netdevice, DBGLVL_EXTRA );
  ...
  // disable per-packet messages
  DBG_DISABLE_OBJECT ( netdevice, DBGLVL_EXTRA );

Note that unlike the usual DBG_ENABLE() and DBG_DISABLE() macros,
DBG_ENABLE_OBJECT() and DBG_DISABLE_OBJECT() will not be removed via
dead code elimination if debugging is disabled in the specified
object.  In particular, this means that using either of these macros
will always result in a symbol reference to the specified object.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/Makefile.housekeeping
src/include/compiler.h