]> git.ipfire.org Git - thirdparty/pdns.git/blob - m4/pdns_enable_sanitizers.m4
Merge pull request #7908 from omoerbeek/rec-4.1.14-changelog
[thirdparty/pdns.git] / m4 / pdns_enable_sanitizers.m4
1 AC_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
29 AC_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
88 AC_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
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],
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
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],
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
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],
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