]>
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 | ||
d5d2ef2b | 230 | dnl # |
9e532d17 | 231 | dnl # Check if cc supports -fno-omit-frame-pointer option. |
d5d2ef2b RE |
232 | dnl # |
233 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER], [ | |
234 | AC_MSG_CHECKING([whether $CC supports -fno-omit-frame-pointer]) | |
235 | ||
236 | saved_flags="$CFLAGS" | |
52c487a0 | 237 | CFLAGS="$CFLAGS -Werror -fno-omit-frame-pointer" |
d5d2ef2b RE |
238 | |
239 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
240 | NO_OMIT_FRAME_POINTER=-fno-omit-frame-pointer | |
241 | AC_MSG_RESULT([yes]) | |
242 | ], [ | |
243 | NO_OMIT_FRAME_POINTER= | |
244 | AC_MSG_RESULT([no]) | |
245 | ]) | |
246 | ||
247 | CFLAGS="$saved_flags" | |
248 | AC_SUBST([NO_OMIT_FRAME_POINTER]) | |
249 | ]) | |
5b7e6a36 RM |
250 | |
251 | dnl # | |
252 | dnl # Check if cc supports -fno-ipa-sra option. | |
253 | dnl # | |
254 | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA], [ | |
255 | AC_MSG_CHECKING([whether $CC supports -fno-ipa-sra]) | |
256 | ||
257 | saved_flags="$CFLAGS" | |
258 | CFLAGS="$CFLAGS -Werror -fno-ipa-sra" | |
259 | ||
260 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | |
261 | NO_IPA_SRA=-fno-ipa-sra | |
262 | AC_MSG_RESULT([yes]) | |
263 | ], [ | |
264 | NO_IPA_SRA= | |
265 | AC_MSG_RESULT([no]) | |
266 | ]) | |
267 | ||
268 | CFLAGS="$saved_flags" | |
269 | AC_SUBST([NO_IPA_SRA]) | |
270 | ]) |