1dnl # 2dnl # Enabled -fsanitize=address if supported by $CC. 3dnl # 4dnl # LDFLAGS needs -fsanitize=address at all times so libraries compiled with 5dnl # it will be linked successfully. CFLAGS will vary by binary being built. 6dnl # 7dnl # The ASAN_OPTIONS environment variable can be used to further control 8dnl # the behavior of binaries and libraries build with -fsanitize=address. 9dnl # 10AC_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" 25 CFLAGS="$CFLAGS -Werror -fsanitize=address" 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 48dnl # 49dnl # Enabled -fsanitize=undefined if supported by cc. 50dnl # 51dnl # LDFLAGS needs -fsanitize=undefined at all times so libraries compiled with 52dnl # it will be linked successfully. CFLAGS will vary by binary being built. 53dnl # 54dnl # The UBSAN_OPTIONS environment variable can be used to further control 55dnl # the behavior of binaries and libraries build with -fsanitize=undefined. 56dnl # 57AC_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 95dnl # 96dnl # Check if cc supports -Wframe-larger-than=<size> option. 97dnl # 98AC_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" 102 CFLAGS="$CFLAGS -Werror -Wframe-larger-than=4096" 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 116dnl # 117dnl # Check if cc supports -Wno-format-truncation option. 118dnl # 119AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [ 120 AC_MSG_CHECKING([whether $CC supports -Wno-format-truncation]) 121 122 saved_flags="$CFLAGS" 123 CFLAGS="$CFLAGS -Werror -Wno-format-truncation" 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 137dnl # 138dnl # Check if cc supports -Wno-format-zero-length option. 139dnl # 140AC_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 158dnl # 159dnl # Check if cc supports -Wno-clobbered option. 160dnl # 161dnl # We actually invoke it with the -Wclobbered option 162dnl # and infer the 'no-' version does or doesn't exist based upon 163dnl # the results. This is required because when checking any of 164dnl # no- prefixed options gcc always returns success. 165dnl # 166AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED], [ 167 AC_MSG_CHECKING([whether $CC supports -Wno-clobbered]) 168 169 saved_flags="$CFLAGS" 170 CFLAGS="$CFLAGS -Werror -Wclobbered" 171 172 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ 173 NO_CLOBBERED=-Wno-clobbered 174 AC_MSG_RESULT([yes]) 175 ], [ 176 NO_CLOBBERED= 177 AC_MSG_RESULT([no]) 178 ]) 179 180 CFLAGS="$saved_flags" 181 AC_SUBST([NO_CLOBBERED]) 182]) 183 184dnl # 185dnl # Check if cc supports -Wimplicit-fallthrough option. 186dnl # 187AC_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 207dnl # 208dnl # Check if cc supports -Winfinite-recursion option. 209dnl # 210AC_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 230dnl # 231dnl # Check if cc supports -fno-omit-frame-pointer option. 232dnl # 233AC_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" 237 CFLAGS="$CFLAGS -Werror -fno-omit-frame-pointer" 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]) 250 251dnl # 252dnl # Check if cc supports -fno-ipa-sra option. 253dnl # 254AC_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]) 271