diff --git a/build_tools/cflags.xml b/build_tools/cflags.xml index 43f7d56123..763f07eeff 100644 --- a/build_tools/cflags.xml +++ b/build_tools/cflags.xml @@ -85,6 +85,7 @@ core + HAVE_ADDRESS_SANITIZER extended THREAD_SANITIZER LEAK_SANITIZER @@ -93,12 +94,14 @@ DEBUG_CHAOS + HAVE_THREAD_SANITIZER extended ADDRESS_SANITIZER LEAK_SANITIZER UNDEFINED_SANITIZER + HAVE_LEAK_SANITIZER extended ADDRESS_SANITIZER THREAD_SANITIZER @@ -107,6 +110,7 @@ DEBUG_CHAOS + HAVE_UNDEFINED_SANITIZER extended ADDRESS_SANITIZER THREAD_SANITIZER diff --git a/build_tools/menuselect-deps.in b/build_tools/menuselect-deps.in index edeb848778..f194482e95 100644 --- a/build_tools/menuselect-deps.in +++ b/build_tools/menuselect-deps.in @@ -73,3 +73,7 @@ WINARCH=@PBX_WINARCH@ ZLIB=@PBX_ZLIB@ TIMERFD=@PBX_TIMERFD@ NATIVE_ARCH=@AST_NATIVE_ARCH@ +HAVE_ADDRESS_SANITIZER=@AST_ADDRESS_SANITIZER@ +HAVE_LEAK_SANITIZER=@AST_LEAK_SANITIZER@ +HAVE_THREAD_SANITIZER=@AST_THREAD_SANITIZER@ +HAVE_UNDEFINED_SANITIZER=@AST_UNDEFINED_SANITIZER@ diff --git a/configure b/configure index c382032463..a7ddb517ea 100755 --- a/configure +++ b/configure @@ -697,6 +697,10 @@ AST_TRAMPOLINES AST_DECLARATION_AFTER_STATEMENT GC_LDFLAGS GC_CFLAGS +AST_UNDEFINED_SANITIZER +AST_LEAK_SANITIZER +AST_THREAD_SANITIZER +AST_ADDRESS_SANITIZER PBX_PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP PBX_PTHREAD_RWLOCK_INITIALIZER AST_ASTERISKSSL @@ -17613,6 +17617,134 @@ CFLAGS="$saved_CFLAGS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fsanitize=address support" >&5 +$as_echo_n "checking for -fsanitize=address support... " >&6; } +saved_sanitize_CFLAGS="${CFLAGS}" +saved_sanitize_LDFLAGS="${LDFLAGS}" +CFLAGS="-fsanitize=address -fno-omit-frame-pointer" +LDFLAGS="-fsanitize=address" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +int x = 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + AST_ADDRESS_SANITIZER=1 +else + AST_ADDRESS_SANITIZER= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="${saved_sanitize_CFLAGS}" +LDFLAGS="${saved_sanitize_LDFLAGS}" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fsanitize=thread support" >&5 +$as_echo_n "checking for -fsanitize=thread support... " >&6; } +saved_sanitize_CFLAGS="${CFLAGS}" +saved_sanitize_LDFLAGS="${LDFLAGS}" +CFLAGS="-fno-omit-frame-pointer -pie -fPIE -fsanitize=thread" +LDFLAGS="-fsanitize=thread -pie -fPIE" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +int x = 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + AST_THREAD_SANITIZER=1 +else + AST_THREAD_SANITIZER= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="${saved_sanitize_CFLAGS}" +LDFLAGS="${saved_sanitize_LDFLAGS}" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fsanitize=leak support" >&5 +$as_echo_n "checking for -fsanitize=leak support... " >&6; } +saved_sanitize_CFLAGS="${CFLAGS}" +saved_sanitize_LDFLAGS="${LDFLAGS}" +CFLAGS="-fno-omit-frame-pointer -fsanitize=leak" +LDFLAGS="-fsanitize=leak" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +int x = 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + AST_LEAK_SANITIZER=1 +else + AST_LEAK_SANITIZER= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="${saved_sanitize_CFLAGS}" +LDFLAGS="${saved_sanitize_LDFLAGS}" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fsanitize=undefined support" >&5 +$as_echo_n "checking for -fsanitize=undefined support... " >&6; } +saved_sanitize_CFLAGS="${CFLAGS}" +saved_sanitize_LDFLAGS="${LDFLAGS}" +CFLAGS="-fno-omit-frame-pointer -fsanitize=undefined" +LDFLAGS="-fsanitize=undefined" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +int x = 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + AST_UNDEFINED_SANITIZER=1 +else + AST_UNDEFINED_SANITIZER= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="${saved_sanitize_CFLAGS}" +LDFLAGS="${saved_sanitize_LDFLAGS}" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -ffunction-sections support" >&5 $as_echo_n "checking for -ffunction-sections support... " >&6; } saved_CFLAGS="${CFLAGS}" diff --git a/configure.ac b/configure.ac index 723b0af0f2..14b63da721 100644 --- a/configure.ac +++ b/configure.ac @@ -1051,6 +1051,70 @@ AST_GCC_ATTRIBUTE(may_alias) AST_GCC_ATTRIBUTE(constructor) AST_GCC_ATTRIBUTE(destructor) +AC_MSG_CHECKING(for -fsanitize=address support) +saved_sanitize_CFLAGS="${CFLAGS}" +saved_sanitize_LDFLAGS="${LDFLAGS}" +CFLAGS="-fsanitize=address -fno-omit-frame-pointer" +LDFLAGS="-fsanitize=address" +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([], [int x = 1;])], + AC_MSG_RESULT(yes) + [AST_ADDRESS_SANITIZER=1], + [AST_ADDRESS_SANITIZER=] + AC_MSG_RESULT(no) +) +CFLAGS="${saved_sanitize_CFLAGS}" +LDFLAGS="${saved_sanitize_LDFLAGS}" +AC_SUBST(AST_ADDRESS_SANITIZER) + +AC_MSG_CHECKING(for -fsanitize=thread support) +saved_sanitize_CFLAGS="${CFLAGS}" +saved_sanitize_LDFLAGS="${LDFLAGS}" +CFLAGS="-fno-omit-frame-pointer -pie -fPIE -fsanitize=thread" +LDFLAGS="-fsanitize=thread -pie -fPIE" +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([], [int x = 1;])], + AC_MSG_RESULT(yes) + [AST_THREAD_SANITIZER=1], + [AST_THREAD_SANITIZER=] + AC_MSG_RESULT(no) +) +CFLAGS="${saved_sanitize_CFLAGS}" +LDFLAGS="${saved_sanitize_LDFLAGS}" +AC_SUBST(AST_THREAD_SANITIZER) + +AC_MSG_CHECKING(for -fsanitize=leak support) +saved_sanitize_CFLAGS="${CFLAGS}" +saved_sanitize_LDFLAGS="${LDFLAGS}" +CFLAGS="-fno-omit-frame-pointer -fsanitize=leak" +LDFLAGS="-fsanitize=leak" +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([], [int x = 1;])], + AC_MSG_RESULT(yes) + [AST_LEAK_SANITIZER=1], + [AST_LEAK_SANITIZER=] + AC_MSG_RESULT(no) +) +CFLAGS="${saved_sanitize_CFLAGS}" +LDFLAGS="${saved_sanitize_LDFLAGS}" +AC_SUBST(AST_LEAK_SANITIZER) + +AC_MSG_CHECKING(for -fsanitize=undefined support) +saved_sanitize_CFLAGS="${CFLAGS}" +saved_sanitize_LDFLAGS="${LDFLAGS}" +CFLAGS="-fno-omit-frame-pointer -fsanitize=undefined" +LDFLAGS="-fsanitize=undefined" +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([], [int x = 1;])], + AC_MSG_RESULT(yes) + [AST_UNDEFINED_SANITIZER=1], + [AST_UNDEFINED_SANITIZER=] + AC_MSG_RESULT(no) +) +CFLAGS="${saved_sanitize_CFLAGS}" +LDFLAGS="${saved_sanitize_LDFLAGS}" +AC_SUBST(AST_UNDEFINED_SANITIZER) + AC_MSG_CHECKING(for -ffunction-sections support) saved_CFLAGS="${CFLAGS}" CFLAGS="${CFLAGS} -ffunction-sections"