Make the address sanitizer optional for CMock kernel unit tests (#526)

* Make the address sanitizer optional

The address sanitizer is now disabled by default for CMock tests because it introduces additional branches into the compiled code. When make is run with the ENABLE_SANITIZER=1 argument, the address sanitizer is enabled and coverage data may not be accurate.

* Change from ifdef to ifeq ($(ENABLE_SANITIZER),1) to address PR comment
This commit is contained in:
Paul Bartell
2021-03-16 13:55:01 -07:00
committed by GitHub
parent cbc96ff596
commit 6257160ee6
2 changed files with 11 additions and 2 deletions

View File

@ -60,6 +60,11 @@ $ make coverage
Would build all unit tests, runs them one after the other, then generates html code Would build all unit tests, runs them one after the other, then generates html code
coverage and places them in build/coverage with initial file index.html coverage and places them in build/coverage with initial file index.html
## Runing tests with Address Sanitizer enabled ##
The GCC address sanitizer can be enabled by passing in "ENABLE_SANITIZER=1" when calling make.
Note: Enabling the address sanitizer will introduce additional branches that may not be possible to get test coverage of. For this reason, the address sanitizer is not enabled by default. It is recommended that developers enable the address sanitizer when modifying or developing new test cases.
## Running individual tests ## Running individual tests
From each test directory, you can build, run the test, and generate gcov coverage with the default "all" target like so: From each test directory, you can build, run the test, and generate gcov coverage with the default "all" target like so:
``` ```

View File

@ -41,20 +41,24 @@ CPPFLAGS :=
# Compiler flags # Compiler flags
CFLAGS := $(INCLUDE_DIR) -O0 -ggdb -pthread --std=c99 -Werror -Wall CFLAGS := $(INCLUDE_DIR) -O0 -ggdb -pthread --std=c99 -Werror -Wall
CFLAGS += -fsanitize=address,undefined -fsanitize-recover=address
CFLAGS += -fstack-protector-all CFLAGS += -fstack-protector-all
CFLAGS += -Wformat -Werror=format-security -Werror=array-bounds CFLAGS += -Wformat -Werror=format-security -Werror=array-bounds
CFLAGS += -D_FORTIFY_SOURCE=2 CFLAGS += -D_FORTIFY_SOURCE=2
ifeq ($(ENABLE_SANITIZER),1)
CFLAGS += -fsanitize=address,undefined -fsanitize-recover=address
endif
# Linker flags # Linker flags
LDFLAGS := -L$(LIB_DIR) -Wl,-rpath,$(LIB_DIR) LDFLAGS := -L$(LIB_DIR) -Wl,-rpath,$(LIB_DIR)
LDFLAGS += -fsanitize=address,undefined
LDFLAGS += -pthread LDFLAGS += -pthread
LDFLAGS += -lunity LDFLAGS += -lunity
LDFLAGS += -lunitymemory LDFLAGS += -lunitymemory
LDFLAGS += -lcexception LDFLAGS += -lcexception
LDFLAGS += -lcmock LDFLAGS += -lcmock
LDFLAGS += -lgcov LDFLAGS += -lgcov
ifeq ($(ENABLE_SANITIZER),1)
LDFLAGS += -fsanitize=address,undefined
endif
# Shared libraries # Shared libraries
LIBS := libunity LIBS := libunity