From fed90353d799acbc5e81b0dfadc6d649b0f2e8b5 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Wed, 10 Jan 2018 10:49:27 -0800 Subject: 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 --- rpm/generic/zfs-kmod.spec.in | 10 +++++++++- rpm/generic/zfs.spec.in | 17 +++++++++++++++++ rpm/redhat/zfs-kmod.spec.in | 10 +++++++++- 3 files changed, 35 insertions(+), 2 deletions(-) (limited to 'rpm') diff --git a/rpm/generic/zfs-kmod.spec.in b/rpm/generic/zfs-kmod.spec.in index 22882627b..e8d91b4e9 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 20bb36e4e..b104e0d87 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 aedd88eb4..f43adba76 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 -- cgit v1.2.3