debug: Disable "at exit" LSAN leak check

Disable "at exit" memory leak check by LSAN if building for a 64-bit
target with GCC. This is need to fix a potential deadlock in GCCs
libasan implementation.

Fixes #20122

Signed-off-by: Jan Van Winkel <jan.van_winkel@dxplore.eu>
This commit is contained in:
Jan Van Winkel 2019-10-27 14:50:25 +01:00 committed by Andrew Boie
commit 4286cb830f
3 changed files with 28 additions and 0 deletions

View file

@ -5,4 +5,9 @@ zephyr_sources_ifdef(
openocd.c
)
zephyr_sources_ifdef(
CONFIG_ASAN
asan.c
)
add_subdirectory(tracing)

View file

@ -52,6 +52,11 @@ config ASAN
recent-ish compiler with the ``-fsanitize=address`` command line option,
and the libasan library.
Note that at exit leak detection is disabled for 64-bit boards when
GCC is used due to potential risk of a deadlock in libasan.
This behavior can be changes by adding leak_check_at_exit=1 to the
environment variable ASAN_OPTIONS.
config UBSAN
bool "Build with undefined behavior sanitizer"
depends on ARCH_POSIX

18
subsys/debug/asan.c Normal file
View file

@ -0,0 +1,18 @@
/*
* Copyright (c) 2019 Jan Van Winkel <jan.van_winkel@dxplore.eu>
*
* SPDX-License-Identifier: Apache-2.0
*/
const char *__asan_default_options(void)
{
return
#if defined(CONFIG_64BIT) && defined(__GNUC__) && !defined(__clang__)
/* Running leak detection at exit could lead to a deadlock on
* 64-bit boards if GCC is used.
* https://github.com/zephyrproject-rtos/zephyr/issues/20122
*/
"leak_check_at_exit=0:"
#endif
"";
}