diff --git a/cmd/zdb/Makefile.am b/cmd/zdb/Makefile.am index c1543e86ecdc..028568e1a98b 100644 --- a/cmd/zdb/Makefile.am +++ b/cmd/zdb/Makefile.am @@ -2,6 +2,8 @@ include $(top_srcdir)/config/Rules.am AM_CPPFLAGS += -DDEBUG +AM_CFLAGS += $(FSANITIZE_ADDRESS) + DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ -I$(top_srcdir)/lib/libspl/include diff --git a/cmd/ztest/Makefile.am b/cmd/ztest/Makefile.am index cbfb95fd3b33..9799f760a105 100644 --- a/cmd/ztest/Makefile.am +++ b/cmd/ztest/Makefile.am @@ -3,6 +3,7 @@ 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) +AM_CFLAGS += $(FSANITIZE_ADDRESS) AM_CPPFLAGS += -DDEBUG -UNDEBUG DEFAULT_INCLUDES += \ diff --git a/config/user-compiler-options.m4 b/config/user-compiler-options.m4 new file mode 100644 index 000000000000..43bd9181bdaf --- /dev/null +++ b/config/user-compiler-options.m4 @@ -0,0 +1,62 @@ +dnl # +dnl # Check if gcc supports -fsanitize=address. Applies to all libraries, +dnl # ztest and zdb +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 # +AC_DEFUN([ZFS_AC_CONFIG_USER_GCC_FSANITIZE], [ + if test "$enable_debug" = "yes" + then + AC_MSG_CHECKING([for -fsanitize=address support]) + + saved_cflags="$CFLAGS" + saved_ldflags="$LDFLAGS" + CFLAGS="$CFLAGS -fsanitize=address" + LDFLAGS="$LDFLAGS -fsanitize=address" + + AC_TRY_LINK( + [ + #include + ],[ + time_t now; + now = time(&now); + ],[ + FSANITIZE_ADDRESS=-fsanitize=address + saved_ldflags="$saved_ldflags -fsanitize=address" + AC_MSG_RESULT(yes) + ],[ + FSANITIZE_ADDRESS="" + AC_MSG_RESULT(no) + ]) + + CFLAGS="$saved_flags" + LDFLAGS="$saved_ldflags" + fi + AC_SUBST([FSANITIZE_ADDRESS]) +]) + + +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=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]) +]) + 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.m4 b/config/user.m4 index 73f6433a2ea7..b88b8adfb3d0 100644 --- a/config/user.m4 +++ b/config/user.m4 @@ -15,6 +15,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER], [ ZFS_AC_CONFIG_USER_LIBUDEV ZFS_AC_CONFIG_USER_LIBSSL ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN + ZFS_AC_CONFIG_USER_GCC_FSANITIZE ZFS_AC_CONFIG_USER_RUNSTATEDIR ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV diff --git a/config/zfs-build.m4 b/config/zfs-build.m4 index 17cc80462c76..cd452e715031 100644 --- a/config/zfs-build.m4 +++ b/config/zfs-build.m4 @@ -27,7 +27,7 @@ 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]) diff --git a/lib/libavl/Makefile.am b/lib/libavl/Makefile.am index 6a42649b882b..a8be13130c7c 100644 --- a/lib/libavl/Makefile.am +++ b/lib/libavl/Makefile.am @@ -2,7 +2,7 @@ include $(top_srcdir)/config/Rules.am VPATH = $(top_srcdir)/module/avl/ -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libefi/Makefile.am b/lib/libefi/Makefile.am index f0c05ee6c44c..3b32293b91b5 100644 --- a/lib/libefi/Makefile.am +++ b/lib/libefi/Makefile.am @@ -1,6 +1,6 @@ include $(top_srcdir)/config/Rules.am -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libicp/Makefile.am b/lib/libicp/Makefile.am index e1f08c8dd8e5..f5c3fb2eba35 100644 --- a/lib/libicp/Makefile.am +++ b/lib/libicp/Makefile.am @@ -4,7 +4,7 @@ VPATH = \ $(top_srcdir)/module/icp \ $(top_srcdir)/lib/libicp -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libnvpair/Makefile.am b/lib/libnvpair/Makefile.am index 6da679fd50fc..83239f257e59 100644 --- a/lib/libnvpair/Makefile.am +++ b/lib/libnvpair/Makefile.am @@ -5,6 +5,7 @@ VPATH = \ $(top_srcdir)/lib/libnvpair AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(LIBTIRPC_CFLAGS) +AM_CFLAGS += $(FSANITIZE_ADDRESS) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libspl/Makefile.am b/lib/libspl/Makefile.am index 395723af395e..552f0b770ed9 100644 --- a/lib/libspl/Makefile.am +++ b/lib/libspl/Makefile.am @@ -4,7 +4,7 @@ VPATH = \ $(top_srcdir)/lib/libspl \ $(top_srcdir)/lib/libspl/$(TARGET_ASM_DIR) -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS) SUBDIRS = include $(TARGET_ASM_DIR) DIST_SUBDIRS = include asm-generic asm-i386 asm-x86_64 diff --git a/lib/libtpool/Makefile.am b/lib/libtpool/Makefile.am index adbaee6c3dca..66bc5cac974d 100644 --- a/lib/libtpool/Makefile.am +++ b/lib/libtpool/Makefile.am @@ -1,6 +1,6 @@ include $(top_srcdir)/config/Rules.am -AM_CFLAGS += $(DEBUG_STACKFLAGS) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FSANITIZE_ADDRESS) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libunicode/Makefile.am b/lib/libunicode/Makefile.am index 9bacae25140a..5a98621cf255 100644 --- a/lib/libunicode/Makefile.am +++ b/lib/libunicode/Makefile.am @@ -2,7 +2,7 @@ include $(top_srcdir)/config/Rules.am VPATH = $(top_srcdir)/module/unicode -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libuutil/Makefile.am b/lib/libuutil/Makefile.am index ed4a30de72bc..408ace242c81 100644 --- a/lib/libuutil/Makefile.am +++ b/lib/libuutil/Makefile.am @@ -1,6 +1,6 @@ include $(top_srcdir)/config/Rules.am -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \ diff --git a/lib/libzpool/Makefile.am b/lib/libzpool/Makefile.am index 95e2493421a6..7a681244ace0 100644 --- a/lib/libzpool/Makefile.am +++ b/lib/libzpool/Makefile.am @@ -5,7 +5,7 @@ VPATH = \ $(top_srcdir)/module/zcommon \ $(top_srcdir)/lib/libzpool -AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) $(FSANITIZE_ADDRESS) DEFAULT_INCLUDES += \ -I$(top_srcdir)/include \