1AC_DEFUN([PDNS_ENABLE_SANITIZERS], [ 2 PDNS_ENABLE_ASAN 3 PDNS_ENABLE_MSAN 4 PDNS_ENABLE_TSAN 5 PDNS_ENABLE_LSAN 6 PDNS_ENABLE_UBSAN 7 8 AS_IF([test "x$enable_asan" != "xno" -a "x$enable_tsan" != "xno"],[ 9 AC_MSG_ERROR([Address Sanitizer is not compatible with Thread Sanitizer]) 10 ]) 11 12 AS_IF([test "x$enable_msan" != "xno" -a "x$enable_asan" != "xno"],[ 13 AC_MSG_ERROR([Memory Sanitizer is not compatible with Address Sanitizer]) 14 ]) 15 16 AS_IF([test "x$enable_msan" != "xno" -a "x$enable_lsan" != "xno"],[ 17 AC_MSG_ERROR([Memory Sanitizer is not compatible with Leak Sanitizer]) 18 ]) 19 20 AS_IF([test "x$enable_msan" != "xno" -a "x$enable_tsan" != "xno"],[ 21 AC_MSG_ERROR([Memory Sanitizer is not compatible with Thread Sanitizer]) 22 ]) 23 24 AS_IF([test "x$enable_asan" != "xno" -o "x$enable_tsan" != "xno" -o "x$enable_lsan" != "xno" -o "x$enable_ubsan" != "xno" -o "x$enable_msan" != "xno"], [ 25 gl_WARN_ADD([-fno-omit-frame-pointer]) 26 ]) 27]) 28 29AC_DEFUN([PDNS_ENABLE_ASAN], [ 30 AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS]) 31 AC_MSG_CHECKING([whether to enable AddressSanitizer]) 32 AC_ARG_ENABLE([asan], 33 AS_HELP_STRING([--enable-asan], 34 [enable AddressSanitizer @<:@default=no@:>@]), 35 [enable_asan=$enableval], 36 [enable_asan=no] 37 ) 38 AC_MSG_RESULT([$enable_asan]) 39 40 AS_IF([test "x$enable_asan" != "xno"], [ 41 gl_COMPILER_OPTION_IF([-fsanitize=address], 42 [ 43 [SANITIZER_FLAGS="-fsanitize=address $SANITIZER_FLAGS"] 44 AC_CHECK_HEADERS([sanitizer/common_interface_defs.h], asan_headers=yes, asan_headers=no) 45 AS_IF([test x"$asan_headers" = "xyes" ], 46 [AC_CHECK_DECL(__sanitizer_start_switch_fiber, 47 [ 48 AC_MSG_CHECKING([for the exact signature of __sanitizer_finish_switch_fiber]) 49 AC_COMPILE_IFELSE([ 50 AC_LANG_PROGRAM( 51 [#include <sanitizer/common_interface_defs.h>], 52 [ 53 __sanitizer_finish_switch_fiber(nullptr); 54 ]) 55 ], [ 56 AC_MSG_RESULT([a single pointer]) 57 AC_DEFINE([HAVE_FIBER_SANITIZER], [1], [Define if ASAN fiber annotation interface is available.]) 58 AC_DEFINE(HAVE_SANITIZER_FINISH_SWITCH_FIBER_SINGLE_PTR, [1], [Define to 1 if __sanitizer_finish_switch_fiber takes only a pointer]) 59 ], [ 60 AC_COMPILE_IFELSE([ 61 AC_LANG_PROGRAM( 62 [#include <sanitizer/common_interface_defs.h>], 63 [ 64 __sanitizer_finish_switch_fiber(nullptr, nullptr, nullptr); 65 ]) 66 ], [ 67 AC_MSG_RESULT([three pointers]) 68 AC_DEFINE([HAVE_FIBER_SANITIZER], [1], [Define if ASAN fiber annotation interface is available.]) 69 AC_DEFINE(HAVE_SANITIZER_FINISH_SWITCH_FIBER_THREE_PTRS, [1], [Define to 1 if __sanitizer_finish_switch_fiber takes three pointers]) 70 ], [ 71 AC_MSG_RESULT([unknown]) 72 AC_MSG_NOTICE([ASAN fiber switching is not available due to an unknown API version]) 73 ]) 74 ]) 75 ], [ 76 AC_MSG_NOTICE([ASAN fiber switching is not available]) 77 ], 78 [#include <sanitizer/common_interface_defs.h>] 79 )] 80 ) 81 ], 82 [AC_MSG_ERROR([Cannot enable AddressSanitizer])] 83 ) 84 ]) 85 AC_SUBST([SANITIZER_FLAGS]) 86]) 87 88AC_DEFUN([PDNS_ENABLE_TSAN], [ 89 AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS]) 90 AC_MSG_CHECKING([whether to enable ThreadSanitizer]) 91 AC_ARG_ENABLE([tsan], 92 AS_HELP_STRING([--enable-tsan], 93 [enable ThreadSanitizer @<:@default=no@:>@]), 94 [enable_tsan=$enableval], 95 [enable_tsan=no] 96 ) 97 AC_MSG_RESULT([$enable_tsan]) 98 99 AS_IF([test "x$enable_tsan" != "xno"], [ 100 gl_COMPILER_OPTION_IF([-fsanitize=thread], 101 [SANITIZER_FLAGS="-fsanitize=thread $SANITIZER_FLAGS"], 102 [AC_MSG_ERROR([Cannot enable ThreadSanitizer])] 103 ) 104 ]) 105 AC_SUBST([SANITIZER_FLAGS]) 106]) 107 108AC_DEFUN([PDNS_ENABLE_LSAN], [ 109 AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS]) 110 AC_MSG_CHECKING([whether to enable LeakSanitizer]) 111 AC_ARG_ENABLE([lsan], 112 AS_HELP_STRING([--enable-lsan], 113 [enable LeakSanitizer @<:@default=no@:>@]), 114 [enable_lsan=$enableval], 115 [enable_lsan=no] 116 ) 117 AC_MSG_RESULT([$enable_lsan]) 118 119 AS_IF([test "x$enable_lsan" != "xno"], [ 120 gl_COMPILER_OPTION_IF([-fsanitize=leak], 121 [SANITIZER_FLAGS="-fsanitize=leak $SANITIZER_FLAGS"], 122 [AC_MSG_ERROR([Cannot enable LeakSanitizer])] 123 ) 124 ]) 125 AC_SUBST([SANITIZER_FLAGS]) 126]) 127 128AC_DEFUN([PDNS_ENABLE_UBSAN], [ 129 AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS]) 130 AC_MSG_CHECKING([whether to enable Undefined Behaviour Sanitizer]) 131 AC_ARG_ENABLE([ubsan], 132 AS_HELP_STRING([--enable-ubsan], 133 [enable Undefined Behaviour Sanitizer @<:@default=no@:>@]), 134 [enable_ubsan=$enableval], 135 [enable_ubsan=no] 136 ) 137 AC_MSG_RESULT([$enable_ubsan]) 138 139 AS_IF([test "x$enable_ubsan" != "xno"], [ 140 gl_COMPILER_OPTION_IF([-fsanitize=undefined], 141 [SANITIZER_FLAGS="-fsanitize=undefined $SANITIZER_FLAGS"], 142 [AC_MSG_ERROR([Cannot enable Undefined Behaviour Sanitizer])] 143 ) 144 ]) 145 AC_SUBST([SANITIZER_FLAGS]) 146]) 147 148AC_DEFUN([PDNS_ENABLE_MSAN], [ 149 AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS]) 150 AC_MSG_CHECKING([whether to enable MemorySanitizer]) 151 AC_ARG_ENABLE([msan], 152 AS_HELP_STRING([--enable-msan], 153 [enable MemorySanitizer @<:@default=no@:>@]), 154 [enable_msan=$enableval], 155 [enable_msan=no] 156 ) 157 AC_MSG_RESULT([$enable_msan]) 158 159 AS_IF([test "x$enable_msan" != "xno"], [ 160 gl_COMPILER_OPTION_IF([-fsanitize=memory], 161 [SANITIZER_FLAGS="-fsanitize=memory $SANITIZER_FLAGS"], 162 [AC_MSG_ERROR([Cannot enable MemorySanitizer])] 163 ) 164 ]) 165 AC_SUBST([SANITIZER_FLAGS]) 166]) 167 168