2018-01-10 21:49:27 +03:00
|
|
|
dnl #
|
2022-02-25 22:50:09 +03:00
|
|
|
dnl # Enabled -fsanitize=address if supported by $CC.
|
2018-01-10 21:49:27 +03:00
|
|
|
dnl #
|
|
|
|
dnl # LDFLAGS needs -fsanitize=address at all times so libraries compiled with
|
|
|
|
dnl # it will be linked successfully. CFLAGS will vary by binary being built.
|
|
|
|
dnl #
|
|
|
|
dnl # The ASAN_OPTIONS environment variable can be used to further control
|
|
|
|
dnl # the behavior of binaries and libraries build with -fsanitize=address.
|
|
|
|
dnl #
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_ASAN], [
|
|
|
|
AC_MSG_CHECKING([whether to build with -fsanitize=address support])
|
|
|
|
AC_ARG_ENABLE([asan],
|
|
|
|
[AS_HELP_STRING([--enable-asan],
|
|
|
|
[Enable -fsanitize=address support @<:@default=no@:>@])],
|
|
|
|
[],
|
|
|
|
[enable_asan=no])
|
|
|
|
|
|
|
|
AM_CONDITIONAL([ASAN_ENABLED], [test x$enable_asan = xyes])
|
|
|
|
AC_SUBST([ASAN_ENABLED], [$enable_asan])
|
|
|
|
AC_MSG_RESULT($enable_asan)
|
|
|
|
|
|
|
|
AS_IF([ test "$enable_asan" = "yes" ], [
|
|
|
|
AC_MSG_CHECKING([whether $CC supports -fsanitize=address])
|
|
|
|
saved_cflags="$CFLAGS"
|
2020-02-04 19:47:38 +03:00
|
|
|
CFLAGS="$CFLAGS -Werror -fsanitize=address"
|
2018-01-10 21:49:27 +03:00
|
|
|
AC_LINK_IFELSE([
|
|
|
|
AC_LANG_SOURCE([[ int main() { return 0; } ]])
|
|
|
|
], [
|
|
|
|
ASAN_CFLAGS="-fsanitize=address"
|
|
|
|
ASAN_LDFLAGS="-fsanitize=address"
|
|
|
|
ASAN_ZFS="_with_asan"
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
|
|
|
AC_MSG_ERROR([$CC does not support -fsanitize=address])
|
|
|
|
])
|
|
|
|
CFLAGS="$saved_cflags"
|
|
|
|
], [
|
|
|
|
ASAN_CFLAGS=""
|
|
|
|
ASAN_LDFLAGS=""
|
|
|
|
ASAN_ZFS="_without_asan"
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_SUBST([ASAN_CFLAGS])
|
|
|
|
AC_SUBST([ASAN_LDFLAGS])
|
|
|
|
AC_SUBST([ASAN_ZFS])
|
|
|
|
])
|
|
|
|
|
2022-02-04 01:35:38 +03:00
|
|
|
dnl #
|
2022-02-25 22:50:09 +03:00
|
|
|
dnl # Enabled -fsanitize=undefined if supported by cc.
|
2022-02-04 01:35:38 +03:00
|
|
|
dnl #
|
|
|
|
dnl # LDFLAGS needs -fsanitize=undefined at all times so libraries compiled with
|
|
|
|
dnl # it will be linked successfully. CFLAGS will vary by binary being built.
|
|
|
|
dnl #
|
|
|
|
dnl # The UBSAN_OPTIONS environment variable can be used to further control
|
|
|
|
dnl # the behavior of binaries and libraries build with -fsanitize=undefined.
|
|
|
|
dnl #
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_UBSAN], [
|
|
|
|
AC_MSG_CHECKING([whether to build with -fsanitize=undefined support])
|
|
|
|
AC_ARG_ENABLE([ubsan],
|
|
|
|
[AS_HELP_STRING([--enable-ubsan],
|
|
|
|
[Enable -fsanitize=undefined support @<:@default=no@:>@])],
|
|
|
|
[],
|
|
|
|
[enable_ubsan=no])
|
|
|
|
|
|
|
|
AM_CONDITIONAL([UBSAN_ENABLED], [test x$enable_ubsan = xyes])
|
|
|
|
AC_SUBST([UBSAN_ENABLED], [$enable_ubsan])
|
|
|
|
AC_MSG_RESULT($enable_ubsan)
|
|
|
|
|
|
|
|
AS_IF([ test "$enable_ubsan" = "yes" ], [
|
|
|
|
AC_MSG_CHECKING([whether $CC supports -fsanitize=undefined])
|
|
|
|
saved_cflags="$CFLAGS"
|
|
|
|
CFLAGS="$CFLAGS -Werror -fsanitize=undefined"
|
|
|
|
AC_LINK_IFELSE([
|
|
|
|
AC_LANG_SOURCE([[ int main() { return 0; } ]])
|
|
|
|
], [
|
|
|
|
UBSAN_CFLAGS="-fsanitize=undefined"
|
|
|
|
UBSAN_LDFLAGS="-fsanitize=undefined"
|
|
|
|
UBSAN_ZFS="_with_ubsan"
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
|
|
|
AC_MSG_ERROR([$CC does not support -fsanitize=undefined])
|
|
|
|
])
|
|
|
|
CFLAGS="$saved_cflags"
|
|
|
|
], [
|
|
|
|
UBSAN_CFLAGS=""
|
|
|
|
UBSAN_LDFLAGS=""
|
|
|
|
UBSAN_ZFS="_without_ubsan"
|
|
|
|
])
|
|
|
|
|
|
|
|
AC_SUBST([UBSAN_CFLAGS])
|
|
|
|
AC_SUBST([UBSAN_LDFLAGS])
|
|
|
|
AC_SUBST([UBSAN_ZFS])
|
|
|
|
])
|
|
|
|
|
2018-01-10 21:49:27 +03:00
|
|
|
dnl #
|
2022-02-25 22:50:09 +03:00
|
|
|
dnl # Check if cc supports -Wframe-larger-than=<size> option.
|
2018-01-10 21:49:27 +03:00
|
|
|
dnl #
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN], [
|
|
|
|
AC_MSG_CHECKING([whether $CC supports -Wframe-larger-than=<size>])
|
|
|
|
|
|
|
|
saved_flags="$CFLAGS"
|
2020-02-04 19:47:38 +03:00
|
|
|
CFLAGS="$CFLAGS -Werror -Wframe-larger-than=4096"
|
2018-01-10 21:49:27 +03:00
|
|
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
|
|
|
FRAME_LARGER_THAN="-Wframe-larger-than=4096"
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
|
|
|
FRAME_LARGER_THAN=""
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
|
|
|
CFLAGS="$saved_flags"
|
|
|
|
AC_SUBST([FRAME_LARGER_THAN])
|
|
|
|
])
|
|
|
|
|
|
|
|
dnl #
|
2022-02-25 22:50:09 +03:00
|
|
|
dnl # Check if cc supports -Wno-format-truncation option.
|
2018-01-10 21:49:27 +03:00
|
|
|
dnl #
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [
|
|
|
|
AC_MSG_CHECKING([whether $CC supports -Wno-format-truncation])
|
|
|
|
|
|
|
|
saved_flags="$CFLAGS"
|
2020-02-04 19:47:38 +03:00
|
|
|
CFLAGS="$CFLAGS -Werror -Wno-format-truncation"
|
2018-01-10 21:49:27 +03:00
|
|
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
|
|
|
NO_FORMAT_TRUNCATION=-Wno-format-truncation
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
|
|
|
NO_FORMAT_TRUNCATION=
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
|
|
|
CFLAGS="$saved_flags"
|
|
|
|
AC_SUBST([NO_FORMAT_TRUNCATION])
|
|
|
|
])
|
|
|
|
|
2020-04-14 21:36:28 +03:00
|
|
|
dnl #
|
2022-02-25 22:50:09 +03:00
|
|
|
dnl # Check if cc supports -Wno-format-zero-length option.
|
2020-04-14 21:36:28 +03:00
|
|
|
dnl #
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH], [
|
|
|
|
AC_MSG_CHECKING([whether $CC supports -Wno-format-zero-length])
|
|
|
|
|
|
|
|
saved_flags="$CFLAGS"
|
|
|
|
CFLAGS="$CFLAGS -Werror -Wno-format-zero-length"
|
|
|
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
|
|
|
NO_FORMAT_ZERO_LENGTH=-Wno-format-zero-length
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
|
|
|
NO_FORMAT_ZERO_LENGTH=
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
|
|
|
CFLAGS="$saved_flags"
|
|
|
|
AC_SUBST([NO_FORMAT_ZERO_LENGTH])
|
|
|
|
])
|
|
|
|
|
2018-01-10 21:49:27 +03:00
|
|
|
dnl #
|
2022-02-25 22:50:09 +03:00
|
|
|
dnl # Check if cc supports -Wno-clobbered option.
|
2018-01-10 21:49:27 +03:00
|
|
|
dnl #
|
2022-02-25 22:50:09 +03:00
|
|
|
dnl # We actually invoke it with the -Wclobbered option
|
2018-01-10 21:49:27 +03:00
|
|
|
dnl # and infer the 'no-' version does or doesn't exist based upon
|
|
|
|
dnl # the results. This is required because when checking any of
|
|
|
|
dnl # no- prefixed options gcc always returns success.
|
|
|
|
dnl #
|
2022-02-16 18:06:08 +03:00
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED], [
|
|
|
|
AC_MSG_CHECKING([whether $CC supports -Wno-clobbered])
|
2018-01-10 21:49:27 +03:00
|
|
|
|
|
|
|
saved_flags="$CFLAGS"
|
2022-02-16 18:06:08 +03:00
|
|
|
CFLAGS="$CFLAGS -Werror -Wclobbered"
|
2018-01-10 21:49:27 +03:00
|
|
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
2022-02-16 18:06:08 +03:00
|
|
|
NO_CLOBBERED=-Wno-clobbered
|
2018-01-10 21:49:27 +03:00
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
2022-02-16 18:06:08 +03:00
|
|
|
NO_CLOBBERED=
|
2018-01-10 21:49:27 +03:00
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
|
|
|
CFLAGS="$saved_flags"
|
2022-02-16 18:06:08 +03:00
|
|
|
AC_SUBST([NO_CLOBBERED])
|
2018-01-10 21:49:27 +03:00
|
|
|
])
|
2019-04-14 21:04:54 +03:00
|
|
|
|
2021-09-14 19:17:54 +03:00
|
|
|
dnl #
|
2022-02-25 22:50:09 +03:00
|
|
|
dnl # Check if cc supports -Wimplicit-fallthrough option.
|
2021-09-14 19:17:54 +03:00
|
|
|
dnl #
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH], [
|
|
|
|
AC_MSG_CHECKING([whether $CC supports -Wimplicit-fallthrough])
|
|
|
|
|
|
|
|
saved_flags="$CFLAGS"
|
|
|
|
CFLAGS="$CFLAGS -Werror -Wimplicit-fallthrough"
|
|
|
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
|
|
|
IMPLICIT_FALLTHROUGH=-Wimplicit-fallthrough
|
|
|
|
AC_DEFINE([HAVE_IMPLICIT_FALLTHROUGH], 1,
|
|
|
|
[Define if compiler supports -Wimplicit-fallthrough])
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
|
|
|
IMPLICIT_FALLTHROUGH=
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
|
|
|
CFLAGS="$saved_flags"
|
|
|
|
AC_SUBST([IMPLICIT_FALLTHROUGH])
|
|
|
|
])
|
|
|
|
|
2022-06-20 22:53:58 +03:00
|
|
|
dnl #
|
|
|
|
dnl # Check if cc supports -Winfinite-recursion option.
|
|
|
|
dnl #
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_INFINITE_RECURSION], [
|
|
|
|
AC_MSG_CHECKING([whether $CC supports -Winfinite-recursion])
|
|
|
|
|
|
|
|
saved_flags="$CFLAGS"
|
|
|
|
CFLAGS="$CFLAGS -Werror -Winfinite-recursion"
|
|
|
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
|
|
|
INFINITE_RECURSION=-Winfinite-recursion
|
|
|
|
AC_DEFINE([HAVE_INFINITE_RECURSION], 1,
|
|
|
|
[Define if compiler supports -Winfinite-recursion])
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
|
|
|
INFINITE_RECURSION=
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
|
|
|
CFLAGS="$saved_flags"
|
|
|
|
AC_SUBST([INFINITE_RECURSION])
|
|
|
|
])
|
|
|
|
|
2019-04-14 21:04:54 +03:00
|
|
|
dnl #
|
2022-02-25 22:50:09 +03:00
|
|
|
dnl # Check if cc supports -fno-omit-frame-pointer option.
|
2019-04-14 21:04:54 +03:00
|
|
|
dnl #
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER], [
|
|
|
|
AC_MSG_CHECKING([whether $CC supports -fno-omit-frame-pointer])
|
|
|
|
|
|
|
|
saved_flags="$CFLAGS"
|
2020-02-04 19:47:38 +03:00
|
|
|
CFLAGS="$CFLAGS -Werror -fno-omit-frame-pointer"
|
2019-04-14 21:04:54 +03:00
|
|
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
|
|
|
NO_OMIT_FRAME_POINTER=-fno-omit-frame-pointer
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
|
|
|
NO_OMIT_FRAME_POINTER=
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
|
|
|
CFLAGS="$saved_flags"
|
|
|
|
AC_SUBST([NO_OMIT_FRAME_POINTER])
|
|
|
|
])
|
2020-02-06 20:24:37 +03:00
|
|
|
|
|
|
|
dnl #
|
|
|
|
dnl # Check if cc supports -fno-ipa-sra option.
|
|
|
|
dnl #
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA], [
|
|
|
|
AC_MSG_CHECKING([whether $CC supports -fno-ipa-sra])
|
|
|
|
|
|
|
|
saved_flags="$CFLAGS"
|
|
|
|
CFLAGS="$CFLAGS -Werror -fno-ipa-sra"
|
|
|
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
|
|
|
|
NO_IPA_SRA=-fno-ipa-sra
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
], [
|
|
|
|
NO_IPA_SRA=
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
])
|
|
|
|
|
|
|
|
CFLAGS="$saved_flags"
|
|
|
|
AC_SUBST([NO_IPA_SRA])
|
|
|
|
])
|