From c7b78d51f967b99daf61d9a8ad15f161f20f0e4f Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Wed, 10 Jan 2018 10:49:27 -0800 Subject: [PATCH] Support -fsanitize=address with --enable-asan When --enable-asan is provided to configure then build all user space components with fsanitize=address. For kernel support use the Linux KASAN feature instead. https://github.com/google/sanitizers/wiki/AddressSanitizer When using gcc version 4.8 any test case which intentionally generates a core dump will fail when using --enable-asan. The default behavior is to disable core dumps and only newer versions allow this behavior to be controled at run time with the ASAN_OPTIONS environment variable. Additionally, this patch includes some build system cleanup. * Rules.am updated to set the minimum AM_CFLAGS, AM_CPPFLAGS, and AM_LDFLAGS. Any additional flags should be added on a per-Makefile basic. The --enable-debug and --enable-asan options apply to all user space binaries and libraries. * Compiler checks consolidated in always-compiler-options.m4 and renamed for consistency. * -fstack-check compiler flag was removed, this functionality is provided by asan when configured with --enable-asan. * Split DEBUG_CFLAGS in to DEBUG_CFLAGS, DEBUG_CPPFLAGS, and DEBUG_LDFLAGS. * Moved default kernel build flags in to module/Makefile.in and split in to ZFS_MODULE_CFLAGS and ZFS_MODULE_CPPFLAGS. These flags are set with the standard ccflags-y kbuild mechanism. * -Wframe-larger-than checks applied only to binaries or libraries which include source files which are built in both user space and kernel space. This restriction is relaxed for user space only utilities. * -Wno-unused-but-set-variable applied only to libzfs and libzpool. The remaining warnings are the result of an ASSERT using a variable when is always declared. * -D_POSIX_PTHREAD_SEMANTICS and -D__EXTENSIONS__ dropped because they are Solaris specific and thus not needed. * Ensure $GDB is defined as gdb by default in zloop.sh. Signed-off-by: DHE Signed-off-by: Brian Behlendorf Closes #7027 --- cmd/raidz_test/Makefile.am | 7 +- cmd/zdb/Makefile.am | 3 +- cmd/ztest/Makefile.am | 10 +- config/Rules.am | 27 +++- config/always-compiler-options.m4 | 141 ++++++++++++++++++ config/always-no-bool-compare.m4 | 27 ---- config/always-no-unused-but-set-variable.m4 | 27 ---- config/kernel.m4 | 15 +- config/user-frame-larger-than.m4 | 22 --- config/user-no-format-truncation.m4 | 22 --- config/user.m4 | 2 - config/zfs-build.m4 | 92 ++++++++---- lib/libavl/Makefile.am | 3 +- lib/libefi/Makefile.am | 8 +- lib/libicp/Makefile.am | 3 +- lib/libnvpair/Makefile.am | 6 +- lib/libshare/Makefile.am | 6 +- lib/libspl/Makefile.am | 7 +- lib/libtpool/Makefile.am | 8 +- lib/libunicode/Makefile.am | 3 +- lib/libuutil/Makefile.am | 8 +- lib/libzfs/Makefile.am | 3 + lib/libzfs_core/Makefile.am | 6 +- lib/libzpool/Makefile.am | 6 +- module/Makefile.in | 15 +- module/avl/Makefile.in | 4 +- module/icp/Makefile.in | 9 +- module/nvpair/Makefile.in | 4 +- module/unicode/Makefile.in | 4 +- module/zcommon/Makefile.in | 4 +- module/zfs/Makefile.in | 7 +- rpm/generic/zfs-kmod.spec.in | 10 +- rpm/generic/zfs.spec.in | 17 +++ rpm/redhat/zfs-kmod.spec.in | 10 +- scripts/zloop.sh | 2 + .../tests/functional/checksum/Makefile.am | 1 + .../functional/cli_root/zfs/zfs_002_pos.ksh | 1 + .../cli_root/zpool/zpool_002_pos.ksh | 1 + .../cli_root/zpool/zpool_003_pos.ksh | 7 +- .../tests/functional/hkdf/Makefile.am | 1 + 40 files changed, 337 insertions(+), 222 deletions(-) create mode 100644 config/always-compiler-options.m4 delete mode 100644 config/always-no-bool-compare.m4 delete mode 100644 config/always-no-unused-but-set-variable.m4 delete mode 100644 config/user-frame-larger-than.m4 delete mode 100644 config/user-no-format-truncation.m4 diff --git a/cmd/raidz_test/Makefile.am b/cmd/raidz_test/Makefile.am index 02cc746ec926..a394a0dde3b2 100644 --- a/cmd/raidz_test/Makefile.am +++ b/cmd/raidz_test/Makefile.am @@ -1,7 +1,10 @@ include $(top_srcdir)/config/Rules.am -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) -AM_CPPFLAGS += -DDEBUG +# Includes kernel code, generate warnings for large stack frames +AM_CFLAGS += $(FRAME_LARGER_THAN) + +# Unconditionally enable ASSERTs +AM_CPPFLAGS += -DDEBUG -UNDEBUG DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/cmd/zdb/Makefile.am b/cmd/zdb/Makefile.am index c1543e86ecdc..70b60bfaf860 100644 --- a/cmd/zdb/Makefile.am +++ b/cmd/zdb/Makefile.am @@ -1,6 +1,7 @@ include $(top_srcdir)/config/Rules.am -AM_CPPFLAGS += -DDEBUG +# Unconditionally enable debugging for zdb +AM_CPPFLAGS += -DDEBUG -UNDEBUG DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/cmd/ztest/Makefile.am b/cmd/ztest/Makefile.am index cbfb95fd3b33..489d8b54799c 100644 --- a/cmd/ztest/Makefile.am +++ b/cmd/ztest/Makefile.am @@ -1,8 +1,12 @@ include $(top_srcdir)/config/Rules.am -# -Wnoformat-truncation to get rid of compiler warning for unchecked -# truncating snprintfs on gcc 7.1.1. -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(NO_FORMAT_TRUNCATION) +# Get rid of compiler warning for unchecked truncating snprintfs on gcc 7.1.1 +AM_CFLAGS += $(NO_FORMAT_TRUNCATION) + +# Includes kernel code, generate warnings for large stack frames +AM_CFLAGS += $(FRAME_LARGER_THAN) + +# Unconditionally enable ASSERTs AM_CPPFLAGS += -DDEBUG -UNDEBUG DEFAULT_INCLUDES += \ diff --git a/config/Rules.am b/config/Rules.am index 215f09c34a9c..9a9dd452ae47 100644 --- a/config/Rules.am +++ b/config/Rules.am @@ -1,18 +1,29 @@ +# +# Default build rules for all user space components, every Makefile.am +# should include these rules and override or extend them as needed. +# + DEFAULT_INCLUDES = -include ${top_builddir}/zfs_config.h AM_LIBTOOLFLAGS = --silent -AM_CFLAGS = ${DEBUG_CFLAGS} -Wall -Wstrict-prototypes -AM_CFLAGS += ${NO_UNUSED_BUT_SET_VARIABLE} -AM_CFLAGS += ${NO_BOOL_COMPARE} -AM_CFLAGS += -fno-strict-aliasing -AM_CFLAGS += -std=gnu99 + +AM_CFLAGS = -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing +AM_CFLAGS += $(DEBUG_CFLAGS) +AM_CFLAGS += $(ASAN_CFLAGS) AM_CFLAGS += $(CODE_COVERAGE_CFLAGS) -AM_CPPFLAGS = -D_GNU_SOURCE -D__EXTENSIONS__ -D_REENTRANT -AM_CPPFLAGS += -D_POSIX_PTHREAD_SEMANTICS -D_FILE_OFFSET_BITS=64 -AM_CPPFLAGS += -D_LARGEFILE64_SOURCE -DHAVE_LARGE_STACKS=1 + +AM_CPPFLAGS = -D_GNU_SOURCE +AM_CPPFLAGS += -D_REENTRANT +AM_CPPFLAGS += -D_FILE_OFFSET_BITS=64 +AM_CPPFLAGS += -D_LARGEFILE64_SOURCE +AM_CPPFLAGS += -DHAVE_LARGE_STACKS=1 AM_CPPFLAGS += -DTEXT_DOMAIN=\"zfs-linux-user\" AM_CPPFLAGS += -DLIBEXECDIR=\"$(libexecdir)\" AM_CPPFLAGS += -DRUNSTATEDIR=\"$(runstatedir)\" AM_CPPFLAGS += -DSBINDIR=\"$(sbindir)\" AM_CPPFLAGS += -DSYSCONFDIR=\"$(sysconfdir)\" +AM_CPPFLAGS += $(DEBUG_CPPFLAGS) AM_CPPFLAGS += $(CODE_COVERAGE_CPPFLAGS) + +AM_LDFLAGS = $(DEBUG_LDFLAGS) +AM_LDFLAGS += $(ASAN_LDFLAGS) diff --git a/config/always-compiler-options.m4 b/config/always-compiler-options.m4 new file mode 100644 index 000000000000..fcbbf5e76b87 --- /dev/null +++ b/config/always-compiler-options.m4 @@ -0,0 +1,141 @@ +dnl # +dnl # Enabled -fsanitize=address if supported by gcc. +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" + CFLAGS="$CFLAGS -fsanitize=address" + 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]) +]) + +dnl # +dnl # Check if gcc supports -Wframe-larger-than= option. +dnl # +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN], [ + AC_MSG_CHECKING([whether $CC supports -Wframe-larger-than=]) + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wframe-larger-than=4096" + + 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 # +dnl # Check if gcc supports -Wno-format-truncation option. +dnl # +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [ + AC_MSG_CHECKING([whether $CC supports -Wno-format-truncation]) + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wno-format-truncation" + + 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]) +]) + + +dnl # +dnl # Check if gcc supports -Wno-bool-compare option. +dnl # +dnl # We actually invoke gcc with the -Wbool-compare option +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 # +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_BOOL_COMPARE], [ + AC_MSG_CHECKING([whether $CC supports -Wno-bool-compare]) + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wbool-compare" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ + NO_BOOL_COMPARE=-Wno-bool-compare + AC_MSG_RESULT([yes]) + ], [ + NO_BOOL_COMPARE= + AC_MSG_RESULT([no]) + ]) + + CFLAGS="$saved_flags" + AC_SUBST([NO_BOOL_COMPARE]) +]) + +dnl # +dnl # Check if gcc supports -Wno-unused-but-set-variable option. +dnl # +dnl # We actually invoke gcc with the -Wunused-but-set-variable option +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 # +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_UNUSED_BUT_SET_VARIABLE], [ + AC_MSG_CHECKING([whether $CC supports -Wno-unused-but-set-variable]) + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Wunused-but-set-variable" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ + NO_UNUSED_BUT_SET_VARIABLE=-Wno-unused-but-set-variable + AC_MSG_RESULT([yes]) + ], [ + NO_UNUSED_BUT_SET_VARIABLE= + AC_MSG_RESULT([no]) + ]) + + CFLAGS="$saved_flags" + AC_SUBST([NO_UNUSED_BUT_SET_VARIABLE]) +]) diff --git a/config/always-no-bool-compare.m4 b/config/always-no-bool-compare.m4 deleted file mode 100644 index 316b04b5047d..000000000000 --- a/config/always-no-bool-compare.m4 +++ /dev/null @@ -1,27 +0,0 @@ -dnl # -dnl # Check if gcc supports -Wno-bool-compare option. -dnl # -dnl # We actually invoke gcc with the -Wbool-compare option -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 # -AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_NO_BOOL_COMPARE], [ - AC_MSG_CHECKING([for -Wno-bool-compare support]) - - saved_flags="$CFLAGS" - CFLAGS="$CFLAGS -Wbool-compare" - - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], - [ - NO_BOOL_COMPARE=-Wno-bool-compare - AC_MSG_RESULT([yes]) - ], - [ - NO_BOOL_COMPARE= - AC_MSG_RESULT([no]) - ]) - - CFLAGS="$saved_flags" - AC_SUBST([NO_BOOL_COMPARE]) -]) diff --git a/config/always-no-unused-but-set-variable.m4 b/config/always-no-unused-but-set-variable.m4 deleted file mode 100644 index 863c90a16a57..000000000000 --- a/config/always-no-unused-but-set-variable.m4 +++ /dev/null @@ -1,27 +0,0 @@ -dnl # -dnl # Check if gcc supports -Wno-unused-but-set-variable option. -dnl # -dnl # We actually invoke gcc with the -Wunused-but-set-variable option -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 # -AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_NO_UNUSED_BUT_SET_VARIABLE], [ - AC_MSG_CHECKING([for -Wno-unused-but-set-variable support]) - - saved_flags="$CFLAGS" - CFLAGS="$CFLAGS -Wunused-but-set-variable" - - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], - [ - NO_UNUSED_BUT_SET_VARIABLE=-Wno-unused-but-set-variable - AC_MSG_RESULT([yes]) - ], - [ - NO_UNUSED_BUT_SET_VARIABLE= - AC_MSG_RESULT([no]) - ]) - - CFLAGS="$saved_flags" - AC_SUBST([NO_UNUSED_BUT_SET_VARIABLE]) -]) diff --git a/config/kernel.m4 b/config/kernel.m4 index b759ccd39a29..f8d81cdc0fb5 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -125,21 +125,10 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ ZFS_AC_KERNEL_VM_NODE_STAT AS_IF([test "$LINUX_OBJ" != "$LINUX"], [ - KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ" + KERNEL_MAKE="$KERNEL_MAKE O=$LINUX_OBJ" ]) - AC_SUBST(KERNELMAKE_PARAMS) - - dnl # -Wall -fno-strict-aliasing -Wstrict-prototypes and other - dnl # compiler options are added by the kernel build system. - KERNELCPPFLAGS="$KERNELCPPFLAGS -std=gnu99" - KERNELCPPFLAGS="$KERNELCPPFLAGS -Wno-declaration-after-statement" - KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_UNUSED_BUT_SET_VARIABLE" - KERNELCPPFLAGS="$KERNELCPPFLAGS $NO_BOOL_COMPARE" - KERNELCPPFLAGS="$KERNELCPPFLAGS -DHAVE_SPL -D_KERNEL" - KERNELCPPFLAGS="$KERNELCPPFLAGS -DTEXT_DOMAIN=\\\"zfs-linux-kernel\\\"" - - AC_SUBST(KERNELCPPFLAGS) + AC_SUBST(KERNEL_MAKE) ]) dnl # diff --git a/config/user-frame-larger-than.m4 b/config/user-frame-larger-than.m4 deleted file mode 100644 index e0828eca079c..000000000000 --- a/config/user-frame-larger-than.m4 +++ /dev/null @@ -1,22 +0,0 @@ -dnl # -dnl # Check if gcc supports -Wframe-larger-than= option. -dnl # -AC_DEFUN([ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN], [ - AC_MSG_CHECKING([for -Wframe-larger-than= support]) - - saved_flags="$CFLAGS" - CFLAGS="$CFLAGS -Wframe-larger-than=1024" - - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], - [ - FRAME_LARGER_THAN=-Wframe-larger-than=1024 - AC_MSG_RESULT([yes]) - ], - [ - FRAME_LARGER_THAN= - AC_MSG_RESULT([no]) - ]) - - CFLAGS="$saved_flags" - AC_SUBST([FRAME_LARGER_THAN]) -]) diff --git a/config/user-no-format-truncation.m4 b/config/user-no-format-truncation.m4 deleted file mode 100644 index 4426907eeb4d..000000000000 --- a/config/user-no-format-truncation.m4 +++ /dev/null @@ -1,22 +0,0 @@ -dnl # -dnl # Check if gcc supports -Wno-format-truncation option. -dnl # -AC_DEFUN([ZFS_AC_CONFIG_USER_NO_FORMAT_TRUNCATION], [ - AC_MSG_CHECKING([for -Wno-format-truncation support]) - - saved_flags="$CFLAGS" - CFLAGS="$CFLAGS -Wno-format-truncation" - - 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]) -]) diff --git a/config/user.m4 b/config/user.m4 index 73f6433a2ea7..0bada893b460 100644 --- a/config/user.m4 +++ b/config/user.m4 @@ -14,11 +14,9 @@ AC_DEFUN([ZFS_AC_CONFIG_USER], [ ZFS_AC_CONFIG_USER_LIBATTR ZFS_AC_CONFIG_USER_LIBUDEV ZFS_AC_CONFIG_USER_LIBSSL - ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN ZFS_AC_CONFIG_USER_RUNSTATEDIR ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV - ZFS_AC_CONFIG_USER_NO_FORMAT_TRUNCATION ZFS_AC_TEST_FRAMEWORK diff --git a/config/zfs-build.m4 b/config/zfs-build.m4 index 5eaa49c8759f..adc99edf592d 100644 --- a/config/zfs-build.m4 +++ b/config/zfs-build.m4 @@ -7,27 +7,36 @@ AC_DEFUN([ZFS_AC_LICENSE], [ ]) AC_DEFUN([ZFS_AC_DEBUG_ENABLE], [ - KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror" - HOSTCFLAGS="${HOSTCFLAGS} -DDEBUG -Werror" - DEBUG_CFLAGS="-DDEBUG -Werror" - DEBUG_STACKFLAGS="-fstack-check" + DEBUG_CFLAGS="-Werror" + DEBUG_CPPFLAGS="-DDEBUG -UNDEBUG" + DEBUG_LDFLAGS="" DEBUG_ZFS="_with_debug" AC_DEFINE(ZFS_DEBUG, 1, [zfs debugging enabled]) + + KERNEL_DEBUG_CFLAGS="-Werror" + KERNEL_DEBUG_CPPFLAGS="-DDEBUG -UNDEBUG" ]) AC_DEFUN([ZFS_AC_DEBUG_DISABLE], [ - KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG " - HOSTCFLAGS="${HOSTCFLAGS} -DNDEBUG " - DEBUG_CFLAGS="-DNDEBUG" - DEBUG_STACKFLAGS="" + DEBUG_CFLAGS="" + DEBUG_CPPFLAGS="-UDEBUG -DNDEBUG" + DEBUG_LDFLAGS="" DEBUG_ZFS="_without_debug" + + KERNEL_DEBUG_CFLAGS="" + KERNEL_DEBUG_CPPFLAGS="-UDEBUG -DNDEBUG" ]) +dnl # +dnl # When debugging is enabled: +dnl # - Enable all ASSERTs (-DDEBUG) +dnl # - Promote all compiler warnings to errors (-Werror) +dnl # AC_DEFUN([ZFS_AC_DEBUG], [ AC_MSG_CHECKING([whether assertion support will be enabled]) AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], - [Enable assertion support @<:@default=no@:>@])], + [Enable compiler and code assertions @<:@default=no@:>@])], [], [enable_debug=no]) @@ -38,18 +47,28 @@ AC_DEFUN([ZFS_AC_DEBUG], [ [ZFS_AC_DEBUG_DISABLE], [AC_MSG_ERROR([Unknown option $enable_debug])]) - AC_SUBST(DEBUG_STACKFLAGS) + AC_SUBST(DEBUG_CFLAGS) + AC_SUBST(DEBUG_CPPFLAGS) + AC_SUBST(DEBUG_LDFLAGS) AC_SUBST(DEBUG_ZFS) + + AC_SUBST(KERNEL_DEBUG_CFLAGS) + AC_SUBST(KERNEL_DEBUG_CPPFLAGS) + AC_MSG_RESULT([$enable_debug]) ]) -AC_DEFUN([ZFS_AC_DEBUGINFO_KERNEL], [ - KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS CONFIG_DEBUG_INFO=y" - KERNELCPPFLAGS="${KERNELCPPFLAGS} -fno-inline" +AC_DEFUN([ZFS_AC_DEBUGINFO_ENABLE], [ + DEBUG_CFLAGS="$DEBUG_CFLAGS -g -fno-inline" + + KERNEL_DEBUG_CFLAGS="$KERNEL_DEBUG_CFLAGS -fno-inline" + KERNEL_MAKE="$KERNEL_MAKE CONFIG_DEBUG_INFO=y" + + DEBUGINFO_ZFS="_with_debuginfo" ]) -AC_DEFUN([ZFS_AC_DEBUGINFO_USER], [ - DEBUG_CFLAGS="${DEBUG_CFLAGS} -g -fno-inline" +AC_DEFUN([ZFS_AC_DEBUGINFO_DISABLE], [ + DEBUGINFO_ZFS="_without_debuginfo" ]) AC_DEFUN([ZFS_AC_DEBUGINFO], [ @@ -62,23 +81,26 @@ AC_DEFUN([ZFS_AC_DEBUGINFO], [ AS_CASE(["x$enable_debuginfo"], ["xyes"], - [ZFS_AC_DEBUGINFO_KERNEL - ZFS_AC_DEBUGINFO_USER], - ["xkernel"], - [ZFS_AC_DEBUGINFO_KERNEL], - ["xuser"], - [ZFS_AC_DEBUGINFO_USER], + [ZFS_AC_DEBUGINFO_ENABLE], ["xno"], - [], - [AC_MSG_ERROR([Unknown option $enable_debug])]) + [ZFS_AC_DEBUGINFO_DISABLE], + [AC_MSG_ERROR([Unknown option $enable_debuginfo])]) AC_SUBST(DEBUG_CFLAGS) + AC_SUBST(DEBUGINFO_ZFS) + + AC_SUBST(KERNEL_DEBUG_CFLAGS) + AC_SUBST(KERNEL_MAKE) + AC_MSG_RESULT([$enable_debuginfo]) ]) AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [ - ZFS_AC_CONFIG_ALWAYS_NO_UNUSED_BUT_SET_VARIABLE - ZFS_AC_CONFIG_ALWAYS_NO_BOOL_COMPARE + ZFS_AC_CONFIG_ALWAYS_CC_NO_UNUSED_BUT_SET_VARIABLE + ZFS_AC_CONFIG_ALWAYS_CC_NO_BOOL_COMPARE + ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN + ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION + ZFS_AC_CONFIG_ALWAYS_CC_ASAN ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD ZFS_AC_CONFIG_ALWAYS_ARCH ]) @@ -160,9 +182,23 @@ AC_DEFUN([ZFS_AC_RPM], [ ]) RPM_DEFINE_COMMON='--define "$(DEBUG_ZFS) 1"' - RPM_DEFINE_UTIL='--define "_dracutdir $(dracutdir)" --define "_udevdir $(udevdir)" --define "_udevruledir $(udevruledir)" --define "_initconfdir $(DEFAULT_INITCONF_DIR)" $(DEFINE_INITRAMFS) $(DEFINE_SYSTEMD)' - RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)" --define "require_spldir $(SPL)" --define "require_splobj $(SPL_OBJ)" --define "ksrc $(LINUX)" --define "kobj $(LINUX_OBJ)"' - RPM_DEFINE_DKMS= + RPM_DEFINE_COMMON+=' --define "$(DEBUGINFO_ZFS) 1"' + RPM_DEFINE_COMMON+=' --define "$(ASAN_ZFS) 1"' + + RPM_DEFINE_UTIL='--define "_dracutdir $(dracutdir)"' + RPM_DEFINE_UTIL+=' --define "_udevdir $(udevdir)"' + RPM_DEFINE_UTIL+=' --define "_udevruledir $(udevruledir)"' + RPM_DEFINE_UTIL+=' --define "_initconfdir $(DEFAULT_INITCONF_DIR)"' + RPM_DEFINE_UTIL+=' $(DEFINE_INITRAMFS)' + RPM_DEFINE_UTIL+=' $(DEFINE_SYSTEMD)' + + RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)"' + RPM_DEFINE_KMOD+=' --define "require_spldir $(SPL)"' + RPM_DEFINE_KMOD+=' --define "require_splobj $(SPL_OBJ)"' + RPM_DEFINE_KMOD+=' --define "ksrc $(LINUX)"' + RPM_DEFINE_KMOD+=' --define "kobj $(LINUX_OBJ)"' + + RPM_DEFINE_DKMS='' SRPM_DEFINE_COMMON='--define "build_src_rpm 1"' SRPM_DEFINE_UTIL= diff --git a/lib/libavl/Makefile.am b/lib/libavl/Makefile.am index 6a42649b882b..82b30bd80fa0 100644 --- a/lib/libavl/Makefile.am +++ b/lib/libavl/Makefile.am @@ -2,7 +2,8 @@ include $(top_srcdir)/config/Rules.am VPATH = $(top_srcdir)/module/avl/ -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +# Includes kernel code, generate warnings for large stack frames +AM_CFLAGS += $(FRAME_LARGER_THAN) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libefi/Makefile.am b/lib/libefi/Makefile.am index f0c05ee6c44c..9f69e4601457 100644 --- a/lib/libefi/Makefile.am +++ b/lib/libefi/Makefile.am @@ -1,7 +1,5 @@ include $(top_srcdir)/config/Rules.am -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) - DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ -I$(top_srcdir)/lib/libspl/include @@ -11,11 +9,7 @@ noinst_LTLIBRARIES = libefi.la USER_C = \ rdwr_efi.c -KERNEL_C = - -nodist_libefi_la_SOURCES = \ - $(USER_C) \ - $(KERNEL_C) +nodist_libefi_la_SOURCES = $(USER_C) libefi_la_LIBADD = $(LIBUUID) diff --git a/lib/libicp/Makefile.am b/lib/libicp/Makefile.am index e1f08c8dd8e5..d04a99e945ba 100644 --- a/lib/libicp/Makefile.am +++ b/lib/libicp/Makefile.am @@ -4,7 +4,8 @@ VPATH = \ $(top_srcdir)/module/icp \ $(top_srcdir)/lib/libicp -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +# Includes kernel code, generate warnings for large stack frames +AM_CFLAGS += $(FRAME_LARGER_THAN) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libnvpair/Makefile.am b/lib/libnvpair/Makefile.am index 6da679fd50fc..d6ba6f89a71e 100644 --- a/lib/libnvpair/Makefile.am +++ b/lib/libnvpair/Makefile.am @@ -4,7 +4,11 @@ VPATH = \ $(top_srcdir)/module/nvpair \ $(top_srcdir)/lib/libnvpair -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(LIBTIRPC_CFLAGS) +# Required CFLAGS for libtirpc +AM_CFLAGS += $(LIBTIRPC_CFLAGS) + +# Includes kernel code, generate warnings for large stack frames +AM_CFLAGS += $(FRAME_LARGER_THAN) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libshare/Makefile.am b/lib/libshare/Makefile.am index 42bd207be482..462e333ffcd6 100644 --- a/lib/libshare/Makefile.am +++ b/lib/libshare/Makefile.am @@ -14,10 +14,6 @@ USER_C = \ smb.c \ smb.h -KERNEL_C = - -nodist_libshare_la_SOURCES = \ - $(USER_C) - $(KERNEL_C) +nodist_libshare_la_SOURCES = $(USER_C) EXTRA_DIST = $(USER_C) diff --git a/lib/libspl/Makefile.am b/lib/libspl/Makefile.am index 395723af395e..e4512700a86a 100644 --- a/lib/libspl/Makefile.am +++ b/lib/libspl/Makefile.am @@ -4,8 +4,6 @@ VPATH = \ $(top_srcdir)/lib/libspl \ $(top_srcdir)/lib/libspl/$(TARGET_ASM_DIR) -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) - SUBDIRS = include $(TARGET_ASM_DIR) DIST_SUBDIRS = include asm-generic asm-i386 asm-x86_64 @@ -36,12 +34,9 @@ USER_C = \ USER_ASM = atomic.S -KERNEL_C = - nodist_libspl_la_SOURCES = \ $(USER_C) \ - $(USER_ASM) \ - $(KERNEL_C) + $(USER_ASM) libspl_la_LIBADD = -lrt diff --git a/lib/libtpool/Makefile.am b/lib/libtpool/Makefile.am index adbaee6c3dca..586eec2ec9e1 100644 --- a/lib/libtpool/Makefile.am +++ b/lib/libtpool/Makefile.am @@ -1,7 +1,5 @@ include $(top_srcdir)/config/Rules.am -AM_CFLAGS += $(DEBUG_STACKFLAGS) - DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ -I$(top_srcdir)/lib/libspl/include @@ -12,11 +10,7 @@ USER_C = \ thread_pool.c \ thread_pool_impl.h -KERNEL_C = - -nodist_libtpool_la_SOURCES = \ - $(USER_C) \ - $(KERNEL_C) +nodist_libtpool_la_SOURCES = $(USER_C) libtpool_la_LIBADD = \ $(top_builddir)/lib/libspl/libspl.la diff --git a/lib/libunicode/Makefile.am b/lib/libunicode/Makefile.am index 9bacae25140a..0a4734c037bd 100644 --- a/lib/libunicode/Makefile.am +++ b/lib/libunicode/Makefile.am @@ -2,7 +2,8 @@ include $(top_srcdir)/config/Rules.am VPATH = $(top_srcdir)/module/unicode -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +# Includes kernel code, generate warnings for large stack frames +AM_CFLAGS += $(FRAME_LARGER_THAN) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libuutil/Makefile.am b/lib/libuutil/Makefile.am index ed4a30de72bc..09eef792a235 100644 --- a/lib/libuutil/Makefile.am +++ b/lib/libuutil/Makefile.am @@ -1,7 +1,5 @@ include $(top_srcdir)/config/Rules.am -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) - DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ -I$(top_srcdir)/lib/libspl/include @@ -19,11 +17,7 @@ USER_C = \ uu_pname.c \ uu_string.c -KERNEL_C = - -nodist_libuutil_la_SOURCES = \ - $(USER_C) \ - $(KERNEL_C) +nodist_libuutil_la_SOURCES = $(USER_C) libuutil_la_LIBADD = \ $(top_builddir)/lib/libavl/libavl.la \ diff --git a/lib/libzfs/Makefile.am b/lib/libzfs/Makefile.am index e5b2ce765d1e..da40c96ce77b 100644 --- a/lib/libzfs/Makefile.am +++ b/lib/libzfs/Makefile.am @@ -5,6 +5,9 @@ VPATH = \ $(top_srcdir)/module/zcommon \ $(top_srcdir)/lib/libzfs +# Suppress unused but set variable warnings often due to ASSERTs +AM_CFLAGS += $(NO_UNUSED_BUT_SET_VARIABLE) + libzfs_pcdir = $(datarootdir)/pkgconfig libzfs_pc_DATA = libzfs.pc libzfs_core.pc diff --git a/lib/libzfs_core/Makefile.am b/lib/libzfs_core/Makefile.am index 5eafc25c057b..8abaebe73005 100644 --- a/lib/libzfs_core/Makefile.am +++ b/lib/libzfs_core/Makefile.am @@ -9,11 +9,7 @@ lib_LTLIBRARIES = libzfs_core.la USER_C = \ libzfs_core.c -KERNEL_C = - -nodist_libzfs_core_la_SOURCES = \ - $(USER_C) \ - $(KERNEL_C) +nodist_libzfs_core_la_SOURCES = $(USER_C) libzfs_core_la_LIBADD = \ $(top_builddir)/lib/libnvpair/libnvpair.la diff --git a/lib/libzpool/Makefile.am b/lib/libzpool/Makefile.am index 95e2493421a6..06219168b7d3 100644 --- a/lib/libzpool/Makefile.am +++ b/lib/libzpool/Makefile.am @@ -5,7 +5,11 @@ VPATH = \ $(top_srcdir)/module/zcommon \ $(top_srcdir)/lib/libzpool -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +# Suppress unused but set variable warnings often due to ASSERTs +AM_CFLAGS += $(NO_UNUSED_BUT_SET_VARIABLE) + +# Includes kernel code generate warnings for large stack frames +AM_CFLAGS += $(FRAME_LARGER_THAN) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/module/Makefile.in b/module/Makefile.in index 60973ec7d5cf..1ca979f9d115 100644 --- a/module/Makefile.in +++ b/module/Makefile.in @@ -1,18 +1,25 @@ subdir-m += avl +subdir-m += icp subdir-m += nvpair subdir-m += unicode subdir-m += zcommon subdir-m += zfs -subdir-m += icp INSTALL_MOD_DIR ?= extra +ZFS_MODULE_CFLAGS += -std=gnu99 -Wno-declaration-after-statement +ZFS_MODULE_CFLAGS += @KERNEL_DEBUG_CFLAGS@ ZFS_MODULE_CFLAGS += -include @SPL_OBJ@/spl_config.h ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h ZFS_MODULE_CFLAGS += -I@abs_top_srcdir@/include -I@SPL@/include -I@SPL@ + +ZFS_MODULE_CPPFLAGS += -DHAVE_SPL -D_KERNEL +ZFS_MODULE_CPPFLAGS += @KERNEL_DEBUG_CPPFLAGS@ + @CONFIG_QAT_TRUE@ZFS_MODULE_CFLAGS += -I@QAT_SRC@/include @CONFIG_QAT_TRUE@KBUILD_EXTRA_SYMBOLS += @QAT_SYMBOLS@ -export ZFS_MODULE_CFLAGS + +export ZFS_MODULE_CFLAGS ZFS_MODULE_CPPFLAGS SUBDIR_TARGETS = icp @@ -35,12 +42,12 @@ modules: list='$(SUBDIR_TARGETS)'; for targetdir in $$list; do \ $(MAKE) -C $$targetdir; \ done - $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ CONFIG_ZFS=m $@ + $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNEL_MAKE@ CONFIG_ZFS=m $@ clean: @# Only cleanup the kernel build directories when CONFIG_KERNEL @# is defined. This indicates that kernel modules should be built. -@CONFIG_KERNEL_TRUE@ $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNELMAKE_PARAMS@ $@ +@CONFIG_KERNEL_TRUE@ $(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` @KERNEL_MAKE@ $@ if [ -f @SPL_SYMBOLS@ ]; then $(RM) @SPL_SYMBOLS@; fi if [ -f @LINUX_SYMBOLS@ ]; then $(RM) @LINUX_SYMBOLS@; fi diff --git a/module/avl/Makefile.in b/module/avl/Makefile.in index 98c011e8aa81..217fa3ca52fe 100644 --- a/module/avl/Makefile.in +++ b/module/avl/Makefile.in @@ -3,8 +3,8 @@ obj = @abs_builddir@ MODULE := zavl -EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ - obj-$(CONFIG_ZFS) := $(MODULE).o +ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) + $(MODULE)-objs += avl.o diff --git a/module/icp/Makefile.in b/module/icp/Makefile.in index 77b2ec1b546e..2eb9e6f1f7cd 100644 --- a/module/icp/Makefile.in +++ b/module/icp/Makefile.in @@ -23,14 +23,11 @@ ifeq ($(TARGET_ASM_DIR), asm-generic) ASM_SOURCES := endif -EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ -EXTRA_AFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ - obj-$(CONFIG_ZFS) := $(MODULE).o -ccflags-y += -I$(src)/include -asflags-y += -I$(src)/include -asflags-y += $(ZFS_MODULE_CFLAGS) +asflags-y := -I$(src)/include +ccflags-y := -I$(src)/include +ccflags-y += $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) $(MODULE)-objs += illumos-crypto.o $(MODULE)-objs += api/kcf_cipher.o diff --git a/module/nvpair/Makefile.in b/module/nvpair/Makefile.in index a8144452a4b3..f420ef98bc8d 100644 --- a/module/nvpair/Makefile.in +++ b/module/nvpair/Makefile.in @@ -3,10 +3,10 @@ obj = @abs_builddir@ MODULE := znvpair -EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ - obj-$(CONFIG_ZFS) := $(MODULE).o +ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) + $(MODULE)-objs += nvpair.o $(MODULE)-objs += fnvpair.o $(MODULE)-objs += nvpair_alloc_spl.o diff --git a/module/unicode/Makefile.in b/module/unicode/Makefile.in index b26e669274be..82c90373a217 100644 --- a/module/unicode/Makefile.in +++ b/module/unicode/Makefile.in @@ -3,9 +3,9 @@ obj = @abs_builddir@ MODULE := zunicode -EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ - obj-$(CONFIG_ZFS) := $(MODULE).o +ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) + $(MODULE)-objs += u8_textprep.o $(MODULE)-objs += uconv.o diff --git a/module/zcommon/Makefile.in b/module/zcommon/Makefile.in index 86eb8ad3922e..501fb24e1cd3 100644 --- a/module/zcommon/Makefile.in +++ b/module/zcommon/Makefile.in @@ -3,10 +3,10 @@ obj = @abs_builddir@ MODULE := zcommon -EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ - obj-$(CONFIG_ZFS) := $(MODULE).o +ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) + $(MODULE)-objs += zfeature_common.o $(MODULE)-objs += zfs_comutil.o $(MODULE)-objs += zfs_deleg.o diff --git a/module/zfs/Makefile.in b/module/zfs/Makefile.in index 66acc536d82d..cb352bf91264 100644 --- a/module/zfs/Makefile.in +++ b/module/zfs/Makefile.in @@ -3,10 +3,13 @@ obj = @abs_builddir@ MODULE := zfs -EXTRA_CFLAGS = $(ZFS_MODULE_CFLAGS) @KERNELCPPFLAGS@ - obj-$(CONFIG_ZFS) := $(MODULE).o +ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) + +# Suppress unused but set variable warnings often due to ASSERTs +ccflags-y += $(NO_UNUSED_BUT_SET_VARIABLE) + $(MODULE)-objs += abd.o $(MODULE)-objs += arc.o $(MODULE)-objs += blkptr.o diff --git a/rpm/generic/zfs-kmod.spec.in b/rpm/generic/zfs-kmod.spec.in index 22882627bc6f..e8d91b4e9438 100644 --- a/rpm/generic/zfs-kmod.spec.in +++ b/rpm/generic/zfs-kmod.spec.in @@ -37,6 +37,7 @@ #define buildforkernels akmod %bcond_with debug +%bcond_with debuginfo Name: %{module}-kmod @@ -116,6 +117,12 @@ bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{ %define debug --disable-debug %endif +%if %{with debuginfo} + %define debuginfo --enable-debuginfo +%else + %define debuginfo --disable-debuginfo +%endif + # # Allow the overriding of spl locations # @@ -156,7 +163,8 @@ for kernel_version in %{?kernel_versions}; do --with-linux-obj=%{kobj} \ --with-spl="%{spldir}" \ --with-spl-obj="%{splobj}" \ - %{debug} + %{debug} \ + %{debuginfo} make %{?_smp_mflags} cd .. done diff --git a/rpm/generic/zfs.spec.in b/rpm/generic/zfs.spec.in index 20bb36e4eaa5..b104e0d8709d 100644 --- a/rpm/generic/zfs.spec.in +++ b/rpm/generic/zfs.spec.in @@ -34,6 +34,8 @@ %endif %bcond_with debug +%bcond_with debuginfo +%bcond_with asan %bcond_with systemd # Generic enable switch for systemd @@ -223,6 +225,19 @@ image which is ZFS aware. %else %define debug --disable-debug %endif + +%if %{with debuginfo} + %define debuginfo --enable-debuginfo +%else + %define debuginfo --disable-debuginfo +%endif + +%if %{with asan} + %define asan --enable-asan +%else + %define asan --disable-asan +%endif + %if 0%{?_systemd} %define systemd --enable-systemd --with-systemdunitdir=%{_unitdir} --with-systemdpresetdir=%{_presetdir} --disable-sysvinit %define systemd_svcs zfs-import-cache.service zfs-import-scan.service zfs-mount.service zfs-share.service zfs-zed.service zfs.target zfs-import.target @@ -240,6 +255,8 @@ image which is ZFS aware. --with-dracutdir=%{_dracutdir} \ --disable-static \ %{debug} \ + %{debuginfo} \ + %{asan} \ %{systemd} make %{?_smp_mflags} diff --git a/rpm/redhat/zfs-kmod.spec.in b/rpm/redhat/zfs-kmod.spec.in index aedd88eb4257..f43adba7625b 100644 --- a/rpm/redhat/zfs-kmod.spec.in +++ b/rpm/redhat/zfs-kmod.spec.in @@ -1,4 +1,5 @@ %bcond_with debug +%bcond_with debuginfo Name: @PACKAGE@-kmod Version: @VERSION@ @@ -58,6 +59,12 @@ fi %define debug --disable-debug %endif +%if %{with debuginfo} +%define debuginfo --enable-debuginfo +%else +%define debuginfo --disable-debuginfo +%endif + %setup -n %{kmod_name}-%{version} %build %configure \ @@ -66,7 +73,8 @@ fi --with-linux-obj=%{kobj} \ --with-spl="%{splsrc}" \ --with-spl-obj="%{splobj}" \ - %{debug} + %{debug} \ + %{debuginfo} make %{?_smp_mflags} %install diff --git a/scripts/zloop.sh b/scripts/zloop.sh index afcd87f3626d..b6f6fc994d59 100755 --- a/scripts/zloop.sh +++ b/scripts/zloop.sh @@ -30,6 +30,7 @@ fi # shellcheck disable=SC2034 PROG=zloop.sh +GDB=${GDB:-gdb} DEFAULTWORKDIR=/var/tmp DEFAULTCOREDIR=/var/tmp/zloop @@ -182,6 +183,7 @@ shift $((OPTIND - 1)) # enable core dumps ulimit -c unlimited +export ASAN_OPTIONS=abort_on_error=1:disable_coredump=0 if [[ -f "$(core_file)" ]]; then echo -n "There's a core dump here you might want to look at first... " diff --git a/tests/zfs-tests/tests/functional/checksum/Makefile.am b/tests/zfs-tests/tests/functional/checksum/Makefile.am index 8132ea1d6d54..cacb3c92785c 100644 --- a/tests/zfs-tests/tests/functional/checksum/Makefile.am +++ b/tests/zfs-tests/tests/functional/checksum/Makefile.am @@ -1,4 +1,5 @@ include $(top_srcdir)/config/Rules.am + AM_CPPFLAGS += -I$(top_srcdir)/include LDADD = $(top_srcdir)/lib/libicp/libicp.la diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs/zfs_002_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zfs/zfs_002_pos.ksh index 27a429db8219..b21b6c657dfe 100755 --- a/tests/zfs-tests/tests/functional/cli_root/zfs/zfs_002_pos.ksh +++ b/tests/zfs-tests/tests/functional/cli_root/zfs/zfs_002_pos.ksh @@ -93,6 +93,7 @@ if is_linux; then ulimit -c unlimited echo "$corepath/core.zfs" >/proc/sys/kernel/core_pattern echo 0 >/proc/sys/kernel/core_uses_pid + export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0" else log_must coreadm -p ${corepath}/core.%f fi diff --git a/tests/zfs-tests/tests/functional/cli_root/zpool/zpool_002_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zpool/zpool_002_pos.ksh index a45e4a88331a..d4abaa5ffea1 100755 --- a/tests/zfs-tests/tests/functional/cli_root/zpool/zpool_002_pos.ksh +++ b/tests/zfs-tests/tests/functional/cli_root/zpool/zpool_002_pos.ksh @@ -89,6 +89,7 @@ if is_linux; then ulimit -c unlimited echo "$corepath/core.zpool" >/proc/sys/kernel/core_pattern echo 0 >/proc/sys/kernel/core_uses_pid + export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0" else coreadm -p ${corepath}/core.%f fi diff --git a/tests/zfs-tests/tests/functional/cli_root/zpool/zpool_003_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zpool/zpool_003_pos.ksh index 8bfbb5fd8634..0f04f0c046de 100755 --- a/tests/zfs-tests/tests/functional/cli_root/zpool/zpool_003_pos.ksh +++ b/tests/zfs-tests/tests/functional/cli_root/zpool/zpool_003_pos.ksh @@ -61,9 +61,10 @@ log_mustnot zpool freeze fakepool [[ -f core ]] && log_must rm -f core if is_linux; then - ulimit -c unlimited - echo "core" >/proc/sys/kernel/core_pattern - echo 0 >/proc/sys/kernel/core_uses_pid + ulimit -c unlimited + echo "core" >/proc/sys/kernel/core_pattern + echo 0 >/proc/sys/kernel/core_uses_pid + export ASAN_OPTIONS="abort_on_error=1:disable_coredump=0" fi ZFS_ABORT=1; export ZFS_ABORT diff --git a/tests/zfs-tests/tests/functional/hkdf/Makefile.am b/tests/zfs-tests/tests/functional/hkdf/Makefile.am index 37fe2ed2cfd4..d0a68f442fab 100644 --- a/tests/zfs-tests/tests/functional/hkdf/Makefile.am +++ b/tests/zfs-tests/tests/functional/hkdf/Makefile.am @@ -1,4 +1,5 @@ include $(top_srcdir)/config/Rules.am + AM_CPPFLAGS += -I$(top_srcdir)/include AM_CPPFLAGS += -I$(top_srcdir)/lib/libspl/include LDADD = $(top_srcdir)/lib/libicp/libicp.la