mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-11-03 23:46:39 +00:00 
			
		
		
		
	By default, depending on the version, gcc can reuse the frame pointer register. This is a micro-optimization that might help on some very old x86 processors. However, it also makes dynamic tracing less useful because the stacks cannot be easily observed. This rule change instructs gcc to use the -fno-omit-frame-pointer option when compiling. Reviewed-by: Olaf Faaland <faaland1@llnl.gov> Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Richard Elling <Richard.Elling@RichardElling.com> Closes #8617
		
			
				
	
	
		
			163 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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=<size> option.
 | 
						|
dnl #
 | 
						|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN], [
 | 
						|
	AC_MSG_CHECKING([whether $CC supports -Wframe-larger-than=<size>])
 | 
						|
 | 
						|
	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])
 | 
						|
])
 | 
						|
 | 
						|
dnl #
 | 
						|
dnl # Check if gcc supports -fno-omit-frame-pointer option.
 | 
						|
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"
 | 
						|
	CFLAGS="$CFLAGS -fno-omit-frame-pointer"
 | 
						|
 | 
						|
	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])
 | 
						|
])
 |