david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[libc] Allow assertions to be globally enabled or disabled

Assertions are enabled for objects built with any debug level
(including an explicit debug level of zero).  It is sometimes useful
to be able to enable assertions across all objects; this currently
requires manually hacking include/assert.h.

Allow assertions to be globally enabled by adding ASSERT=1 to the
build command line.  For example:

  make bin/8086100e.mrom ASSERT=1

Similarly, allow assertions to be globally disabled by adding ASSERT=0
to the build command line.  If no ASSERT=... is specified on the
build command line, then only objects mentioned in DEBUG=... will have
assertions enabled (as is currently the case).

Note than globally enabling assertions imposes a relatively heavy
runtime penalty, primarily due to the various sanity checks performed
by list_add(), list_for_each_entry(), etc.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2016-07-05 13:28:51 +01:00
parent 6e1ce52d14
commit 46719f2264
2 changed files with 29 additions and 0 deletions

View File

@ -720,6 +720,33 @@ config/named.h : $(CONFIG_LIST)
.PRECIOUS : config/named.h
# (Single-element) list of assertion configuration
#
ASSERT_LIST := $(BIN)/.assert.list
ifeq ($(wildcard $(ASSERT_LIST)),)
ASSERT_OLD := <invalid>
else
ASSERT_OLD := $(shell cat $(ASSERT_LIST))
endif
ifneq ($(ASSERT_OLD),$(ASSERT))
$(shell $(ECHO) "$(ASSERT)" > $(ASSERT_LIST))
endif
$(ASSERT_LIST) : $(MAKEDEPS)
VERYCLEANUP += $(ASSERT_LIST)
# Assertion configuration
#
ifneq ($(ASSERT),)
CFLAGS += -DASSERTING=$(ASSERT)
endif
include/assert.h : $(ASSERT_LIST)
$(Q)$(TOUCH) $@
.PRECIOUS : include/assert.h
# These files use .incbin inline assembly to include a binary file.
# Unfortunately ccache does not detect this dependency and caches
# builds even when the binary file has changed.

View File

@ -12,11 +12,13 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#ifndef ASSERTING
#ifdef NDEBUG
#define ASSERTING 0
#else
#define ASSERTING 1
#endif
#endif
extern unsigned int assertion_failures;