doc/guides/build-system/debugging_aids.md
RIOT contains Makefile convenience support for gcc/clang's undefined behaviour sanitizer.
Both gcc and clang allow generation of code that does runtime checks for undefined behavior (UB).
E.g., the following code might trigger UB for some parameters:
void test(int foo)
{
return (foo << 24);
}
In this case, the signed shift would be alright unless:
foo is negative, with implementation-specific runtime results.Using ubsan, these can be caught at runtime.
There are three modes for ubsan that define what happens when the sanitizer observed undefined behaviour:
trap -> cause a trapmsg_exit -> print a message and exitmsg_recover -> print a message and continuetrap is available on all RIOT platforms, whereas msg_exit and msg_recover
are currently only available on native when building with gcc, as they require runtime support in
the form of libubsan.
The default is trap, or msg_exit if available (currently, on native:gnu only).
build with make all-ubsan.
build with UBSAN_MODE=[trap|msg_exit|msg_recover] make all-ubsan to
override the ubsan mode.