1 AC_DEFUN([PDNS_ENABLE_SANITIZERS], [
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])
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])
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])
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])
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])
29 AC_DEFUN([PDNS_ENABLE_ASAN], [
30 AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS])
31 AC_MSG_CHECKING([whether to enable AddressSanitizer])
33 AS_HELP_STRING([--enable-asan],
34 [enable AddressSanitizer @<:@default=no@:>@]),
35 [enable_asan=$enableval],
38 AC_MSG_RESULT([$enable_asan])
40 AS_IF([test "x$enable_asan" != "xno"], [
41 gl_COMPILER_OPTION_IF([-fsanitize=address],
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,
48 AC_MSG_CHECKING([for the exact signature of __sanitizer_finish_switch_fiber])
51 [#include <sanitizer/common_interface_defs.h>],
53 __sanitizer_finish_switch_fiber(nullptr);
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])
62 [#include <sanitizer/common_interface_defs.h>],
64 __sanitizer_finish_switch_fiber(nullptr, nullptr, nullptr);
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])
71 AC_MSG_RESULT([unknown])
72 AC_MSG_NOTICE([ASAN fiber switching is not available due to an unknown API version])
76 AC_MSG_NOTICE([ASAN fiber switching is not available])
78 [#include <sanitizer/common_interface_defs.h>]
82 [AC_MSG_ERROR([Cannot enable AddressSanitizer])]
85 AC_SUBST([SANITIZER_FLAGS])
88 AC_DEFUN([PDNS_ENABLE_TSAN], [
89 AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS])
90 AC_MSG_CHECKING([whether to enable ThreadSanitizer])
92 AS_HELP_STRING([--enable-tsan],
93 [enable ThreadSanitizer @<:@default=no@:>@]),
94 [enable_tsan=$enableval],
97 AC_MSG_RESULT([$enable_tsan])
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])]
105 AC_SUBST([SANITIZER_FLAGS])
108 AC_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],
117 AC_MSG_RESULT([$enable_lsan])
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])]
125 AC_SUBST([SANITIZER_FLAGS])
128 AC_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],
137 AC_MSG_RESULT([$enable_ubsan])
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])]
145 AC_SUBST([SANITIZER_FLAGS])
148 AC_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],
157 AC_MSG_RESULT([$enable_msan])
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])]
165 AC_SUBST([SANITIZER_FLAGS])