]>
Commit | Line | Data |
---|---|---|
fed90353 | 1 | dnl # |
9e532d17 | 2 | dnl # Enabled -fsanitize=address if supported by $CC. |
fed90353 BB |
3 | dnl # |
4 | dnl # LDFLAGS needs -fsanitize=address at all times so libraries compiled with | |
5 | dnl # it will be linked successfully. CFLAGS will vary by binary being built. | |
6 | dnl # | |
7 | dnl # The ASAN_OPTIONS environment variable can be used to further control | |
8 | dnl # the behavior of binaries and libraries build with -fsanitize=address. | |
9 | dnl # | |
10 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_ASAN], [ | |
11 | AC_MSG_CHECKING([whether to build with -fsanitize=address support]) | |
12 | AC_ARG_ENABLE([asan], | |
13 | [AS_HELP_STRING([--enable-asan], | |
14 | [Enable -fsanitize=address support @<:@default=no@:>@])], | |
15 | [], | |
16 | [enable_asan=no]) | |
17 | ||
18 | AM_CONDITIONAL([ASAN_ENABLED], [test x$enable_asan = xyes]) | |
19 | AC_SUBST([ASAN_ENABLED], [$enable_asan]) | |
20 | AC_MSG_RESULT($enable_asan) | |
21 | ||
22 | AS_IF([ test "$enable_asan" = "yes" ], [ | |
23 | AC_MSG_CHECKING([whether $CC supports -fsanitize=address]) | |
24 | saved_cflags="$CFLAGS" | |
52c487a0 | 25 | CFLAGS="$CFLAGS -Werror -fsanitize=address" |
fed90353 BB |
26 | AC_LINK_IFELSE([ |
27 | AC_LANG_SOURCE([[ int main() { return 0; } ]]) | |
28 | ], [ | |
29 | ASAN_CFLAGS="-fsanitize=address" | |
30 | ASAN_LDFLAGS="-fsanitize=address" | |
31 | ASAN_ZFS="_with_asan" | |
32 | AC_MSG_RESULT([yes]) | |
33 | ], [ | |
34 | AC_MSG_ERROR([$CC does not support -fsanitize=address]) | |
35 | ]) | |
36 | CFLAGS="$saved_cflags" | |
37 | ], [ | |
38 | ASAN_CFLAGS="" | |
39 | ASAN_LDFLAGS="" | |
40 | ASAN_ZFS="_without_asan" | |
41 | ]) | |
42 | ||
43 | AC_SUBST([ASAN_CFLAGS]) | |
44 | AC_SUBST([ASAN_LDFLAGS]) | |
45 | AC_SUBST([ASAN_ZFS]) | |
46 | ]) | |
47 | ||
63652e15 | 48 | dnl # |
9e532d17 | 49 | dnl # Enabled -fsanitize=undefined if supported by cc. |
63652e15 DS |
50 | dnl # |
51 | dnl # LDFLAGS needs -fsanitize=undefined at all times so libraries compiled with | |
52 | dnl # it will be linked successfully. CFLAGS will vary by binary being built. | |
53 | dnl # | |
54 | dnl # The UBSAN_OPTIONS environment variable can be used to further control | |
55 | dnl # the behavior of binaries and libraries build with -fsanitize=undefined. | |
56 | dnl # | |
57 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_UBSAN], [ | |
58 | AC_MSG_CHECKING([whether to build with -fsanitize=undefined support]) | |
59 | AC_ARG_ENABLE([ubsan], | |
60 | [AS_HELP_STRING([--enable-ubsan], | |
61 | [Enable -fsanitize=undefined support @<:@default=no@:>@])], | |
62 | [], | |
63 | [enable_ubsan=no]) | |
64 | ||
65 | AM_CONDITIONAL([UBSAN_ENABLED], [test x$enable_ubsan = xyes]) | |
66 | AC_SUBST([UBSAN_ENABLED], [$enable_ubsan]) | |
67 | AC_MSG_RESULT($enable_ubsan) | |
68 | ||
69 | AS_IF([ test "$enable_ubsan" = "yes" ], [ | |
70 | AC_MSG_CHECKING([whether $CC supports -fsanitize=undefined]) | |
71 | saved_cflags="$CFLAGS" | |
72 | CFLAGS="$CFLAGS -Werror -fsanitize=undefined" | |
73 | AC_LINK_IFELSE([ | |
74 | AC_LANG_SOURCE([[ int main() { return 0; } ]]) | |
75 | ], [ | |
76 | UBSAN_CFLAGS="-fsanitize=undefined" | |
77 | UBSAN_LDFLAGS="-fsanitize=undefined" | |
78 | UBSAN_ZFS="_with_ubsan" | |
79 | AC_MSG_RESULT([yes]) | |
80 | ], [ | |
81 | AC_MSG_ERROR([$CC does not support -fsanitize=undefined]) | |
82 | ]) | |
83 | CFLAGS="$saved_cflags" | |
84 | ], [ | |
85 | UBSAN_CFLAGS="" | |
86 | UBSAN_LDFLAGS="" | |
87 | UBSAN_ZFS="_without_ubsan" | |
88 | ]) | |
89 | ||
90 | AC_SUBST([UBSAN_CFLAGS]) | |
91 | AC_SUBST([UBSAN_LDFLAGS]) | |
92 | AC_SUBST([UBSAN_ZFS]) | |
93 | ]) | |
94 | ||
fed90353 | 95 | dnl # |
9e532d17 | 96 | dnl # Check if cc supports -Wframe-larger-than=<size> option. |
fed90353 BB |
97 | dnl # |
98 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN], [ | |
99 | AC_MSG_CHECKING([whether $CC supports -Wframe-larger-than=<size>]) | |
100 | ||
101 | saved_flags="$CFLAGS" | |
52c487a0 | 102 | CFLAGS="$CFLAGS -Werror -Wframe-larger-than=4096" |
fed90353 BB |
103 | |
104 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
105 | FRAME_LARGER_THAN="-Wframe-larger-than=4096" | |
106 | AC_MSG_RESULT([yes]) | |
107 | ], [ | |
108 | FRAME_LARGER_THAN="" | |
109 | AC_MSG_RESULT([no]) | |
110 | ]) | |
111 | ||
112 | CFLAGS="$saved_flags" | |
113 | AC_SUBST([FRAME_LARGER_THAN]) | |
114 | ]) | |
115 | ||
116 | dnl # | |
9e532d17 | 117 | dnl # Check if cc supports -Wno-format-truncation option. |
fed90353 BB |
118 | dnl # |
119 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [ | |
120 | AC_MSG_CHECKING([whether $CC supports -Wno-format-truncation]) | |
121 | ||
122 | saved_flags="$CFLAGS" | |
52c487a0 | 123 | CFLAGS="$CFLAGS -Werror -Wno-format-truncation" |
fed90353 BB |
124 | |
125 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
126 | NO_FORMAT_TRUNCATION=-Wno-format-truncation | |
127 | AC_MSG_RESULT([yes]) | |
128 | ], [ | |
129 | NO_FORMAT_TRUNCATION= | |
130 | AC_MSG_RESULT([no]) | |
131 | ]) | |
132 | ||
133 | CFLAGS="$saved_flags" | |
134 | AC_SUBST([NO_FORMAT_TRUNCATION]) | |
135 | ]) | |
136 | ||
9f0a21e6 | 137 | dnl # |
9e532d17 | 138 | dnl # Check if cc supports -Wno-format-zero-length option. |
9f0a21e6 MM |
139 | dnl # |
140 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH], [ | |
141 | AC_MSG_CHECKING([whether $CC supports -Wno-format-zero-length]) | |
142 | ||
143 | saved_flags="$CFLAGS" | |
144 | CFLAGS="$CFLAGS -Werror -Wno-format-zero-length" | |
145 | ||
146 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
147 | NO_FORMAT_ZERO_LENGTH=-Wno-format-zero-length | |
148 | AC_MSG_RESULT([yes]) | |
149 | ], [ | |
150 | NO_FORMAT_ZERO_LENGTH= | |
151 | AC_MSG_RESULT([no]) | |
152 | ]) | |
153 | ||
154 | CFLAGS="$saved_flags" | |
155 | AC_SUBST([NO_FORMAT_ZERO_LENGTH]) | |
156 | ]) | |
157 | ||
fed90353 | 158 | dnl # |
9e532d17 | 159 | dnl # Check if cc supports -Wno-clobbered option. |
fed90353 | 160 | dnl # |
9e532d17 | 161 | dnl # We actually invoke it with the -Wclobbered option |
fed90353 BB |
162 | dnl # and infer the 'no-' version does or doesn't exist based upon |
163 | dnl # the results. This is required because when checking any of | |
164 | dnl # no- prefixed options gcc always returns success. | |
165 | dnl # | |
72154bd6 AZ |
166 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED], [ |
167 | AC_MSG_CHECKING([whether $CC supports -Wno-clobbered]) | |
fed90353 BB |
168 | |
169 | saved_flags="$CFLAGS" | |
72154bd6 | 170 | CFLAGS="$CFLAGS -Werror -Wclobbered" |
fed90353 BB |
171 | |
172 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
72154bd6 | 173 | NO_CLOBBERED=-Wno-clobbered |
fed90353 BB |
174 | AC_MSG_RESULT([yes]) |
175 | ], [ | |
72154bd6 | 176 | NO_CLOBBERED= |
fed90353 BB |
177 | AC_MSG_RESULT([no]) |
178 | ]) | |
179 | ||
180 | CFLAGS="$saved_flags" | |
72154bd6 | 181 | AC_SUBST([NO_CLOBBERED]) |
fed90353 | 182 | ]) |
d5d2ef2b | 183 | |
6954c22f | 184 | dnl # |
9e532d17 | 185 | dnl # Check if cc supports -Wimplicit-fallthrough option. |
6954c22f BB |
186 | dnl # |
187 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH], [ | |
188 | AC_MSG_CHECKING([whether $CC supports -Wimplicit-fallthrough]) | |
189 | ||
190 | saved_flags="$CFLAGS" | |
191 | CFLAGS="$CFLAGS -Werror -Wimplicit-fallthrough" | |
192 | ||
193 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
194 | IMPLICIT_FALLTHROUGH=-Wimplicit-fallthrough | |
195 | AC_DEFINE([HAVE_IMPLICIT_FALLTHROUGH], 1, | |
196 | [Define if compiler supports -Wimplicit-fallthrough]) | |
197 | AC_MSG_RESULT([yes]) | |
198 | ], [ | |
199 | IMPLICIT_FALLTHROUGH= | |
200 | AC_MSG_RESULT([no]) | |
201 | ]) | |
202 | ||
203 | CFLAGS="$saved_flags" | |
204 | AC_SUBST([IMPLICIT_FALLTHROUGH]) | |
205 | ]) | |
206 | ||
a6e8113f BB |
207 | dnl # |
208 | dnl # Check if cc supports -Winfinite-recursion option. | |
209 | dnl # | |
210 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_INFINITE_RECURSION], [ | |
211 | AC_MSG_CHECKING([whether $CC supports -Winfinite-recursion]) | |
212 | ||
213 | saved_flags="$CFLAGS" | |
214 | CFLAGS="$CFLAGS -Werror -Winfinite-recursion" | |
215 | ||
216 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
217 | INFINITE_RECURSION=-Winfinite-recursion | |
218 | AC_DEFINE([HAVE_INFINITE_RECURSION], 1, | |
219 | [Define if compiler supports -Winfinite-recursion]) | |
220 | AC_MSG_RESULT([yes]) | |
221 | ], [ | |
222 | INFINITE_RECURSION= | |
223 | AC_MSG_RESULT([no]) | |
224 | ]) | |
225 | ||
226 | CFLAGS="$saved_flags" | |
227 | AC_SUBST([INFINITE_RECURSION]) | |
228 | ]) | |
229 | ||
3c1e1933 DS |
230 | dnl # |
231 | dnl # Check if kernel cc supports -Winfinite-recursion option. | |
232 | dnl # | |
233 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_INFINITE_RECURSION], [ | |
234 | AC_MSG_CHECKING([whether $KERNEL_CC supports -Winfinite-recursion]) | |
235 | ||
236 | saved_cc="$CC" | |
237 | saved_flags="$CFLAGS" | |
238 | CC="gcc" | |
239 | CFLAGS="$CFLAGS -Werror -Winfinite-recursion" | |
240 | ||
241 | AS_IF([ test -n "$KERNEL_CC" ], [ | |
242 | CC="$KERNEL_CC" | |
243 | ]) | |
244 | AS_IF([ test -n "$KERNEL_LLVM" ], [ | |
245 | CC="clang" | |
246 | ]) | |
247 | ||
248 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
249 | KERNEL_INFINITE_RECURSION=-Winfinite-recursion | |
250 | AC_DEFINE([HAVE_KERNEL_INFINITE_RECURSION], 1, | |
251 | [Define if compiler supports -Winfinite-recursion]) | |
252 | AC_MSG_RESULT([yes]) | |
253 | ], [ | |
254 | KERNEL_INFINITE_RECURSION= | |
255 | AC_MSG_RESULT([no]) | |
256 | ]) | |
257 | ||
258 | CC="$saved_cc" | |
259 | CFLAGS="$saved_flags" | |
260 | AC_SUBST([KERNEL_INFINITE_RECURSION]) | |
261 | ]) | |
262 | ||
263 | dnl # | |
264 | dnl # Check if cc supports -Wformat-overflow option. | |
265 | dnl # | |
266 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FORMAT_OVERFLOW], [ | |
267 | AC_MSG_CHECKING([whether $CC supports -Wformat-overflow]) | |
268 | ||
269 | saved_flags="$CFLAGS" | |
270 | CFLAGS="$CFLAGS -Werror -Wformat-overflow" | |
271 | ||
272 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
273 | FORMAT_OVERFLOW=-Wformat-overflow | |
274 | AC_DEFINE([HAVE_FORMAT_OVERFLOW], 1, | |
275 | [Define if compiler supports -Wformat-overflow]) | |
276 | AC_MSG_RESULT([yes]) | |
277 | ], [ | |
278 | FORMAT_OVERFLOW= | |
279 | AC_MSG_RESULT([no]) | |
280 | ]) | |
281 | ||
282 | CFLAGS="$saved_flags" | |
283 | AC_SUBST([FORMAT_OVERFLOW]) | |
284 | ]) | |
285 | ||
d5d2ef2b | 286 | dnl # |
9e532d17 | 287 | dnl # Check if cc supports -fno-omit-frame-pointer option. |
d5d2ef2b RE |
288 | dnl # |
289 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER], [ | |
290 | AC_MSG_CHECKING([whether $CC supports -fno-omit-frame-pointer]) | |
291 | ||
292 | saved_flags="$CFLAGS" | |
52c487a0 | 293 | CFLAGS="$CFLAGS -Werror -fno-omit-frame-pointer" |
d5d2ef2b RE |
294 | |
295 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
296 | NO_OMIT_FRAME_POINTER=-fno-omit-frame-pointer | |
297 | AC_MSG_RESULT([yes]) | |
298 | ], [ | |
299 | NO_OMIT_FRAME_POINTER= | |
300 | AC_MSG_RESULT([no]) | |
301 | ]) | |
302 | ||
303 | CFLAGS="$saved_flags" | |
304 | AC_SUBST([NO_OMIT_FRAME_POINTER]) | |
305 | ]) | |
5b7e6a36 RM |
306 | |
307 | dnl # | |
308 | dnl # Check if cc supports -fno-ipa-sra option. | |
309 | dnl # | |
310 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA], [ | |
311 | AC_MSG_CHECKING([whether $CC supports -fno-ipa-sra]) | |
312 | ||
313 | saved_flags="$CFLAGS" | |
314 | CFLAGS="$CFLAGS -Werror -fno-ipa-sra" | |
315 | ||
316 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
317 | NO_IPA_SRA=-fno-ipa-sra | |
318 | AC_MSG_RESULT([yes]) | |
319 | ], [ | |
320 | NO_IPA_SRA= | |
321 | AC_MSG_RESULT([no]) | |
322 | ]) | |
323 | ||
324 | CFLAGS="$saved_flags" | |
325 | AC_SUBST([NO_IPA_SRA]) | |
326 | ]) | |
fe975048 DS |
327 | |
328 | dnl # | |
329 | dnl # Check if kernel cc supports -fno-ipa-sra option. | |
330 | dnl # | |
331 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_NO_IPA_SRA], [ | |
332 | AC_MSG_CHECKING([whether $KERNEL_CC supports -fno-ipa-sra]) | |
333 | ||
334 | saved_cc="$CC" | |
335 | saved_flags="$CFLAGS" | |
336 | CC="gcc" | |
337 | CFLAGS="$CFLAGS -Werror -fno-ipa-sra" | |
338 | ||
339 | AS_IF([ test -n "$KERNEL_CC" ], [ | |
340 | CC="$KERNEL_CC" | |
341 | ]) | |
342 | AS_IF([ test -n "$KERNEL_LLVM" ], [ | |
343 | CC="clang" | |
344 | ]) | |
345 | ||
346 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
347 | KERNEL_NO_IPA_SRA=-fno-ipa-sra | |
348 | AC_MSG_RESULT([yes]) | |
349 | ], [ | |
350 | KERNEL_NO_IPA_SRA= | |
351 | AC_MSG_RESULT([no]) | |
352 | ]) | |
353 | ||
354 | CC="$saved_cc" | |
355 | CFLAGS="$saved_flags" | |
356 | AC_SUBST([KERNEL_NO_IPA_SRA]) | |
357 | ]) |