From d5d2ef2b268096f96d7fdf0743976d2a64cf51a2 Mon Sep 17 00:00:00 2001 From: Richard Elling Date: Sun, 14 Apr 2019 11:04:54 -0700 Subject: [PATCH] compile with -fno-omit-frame-pointer 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 Reviewed by: Brian Behlendorf Signed-off-by: Richard Elling Closes #8617 --- config/Rules.am | 1 + config/always-compiler-options.m4 | 21 +++++++++++++++++++++ config/zfs-build.m4 | 1 + 3 files changed, 23 insertions(+) diff --git a/config/Rules.am b/config/Rules.am index 9a9dd452a..1e569d341 100644 --- a/config/Rules.am +++ b/config/Rules.am @@ -8,6 +8,7 @@ DEFAULT_INCLUDES = -include ${top_builddir}/zfs_config.h AM_LIBTOOLFLAGS = --silent AM_CFLAGS = -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing +AM_CFLAGS += $(NO_OMIT_FRAME_POINTER) AM_CFLAGS += $(DEBUG_CFLAGS) AM_CFLAGS += $(ASAN_CFLAGS) AM_CFLAGS += $(CODE_COVERAGE_CFLAGS) diff --git a/config/always-compiler-options.m4 b/config/always-compiler-options.m4 index fcbbf5e76..e187f6ff8 100644 --- a/config/always-compiler-options.m4 +++ b/config/always-compiler-options.m4 @@ -139,3 +139,24 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_UNUSED_BUT_SET_VARIABLE], [ 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]) +]) diff --git a/config/zfs-build.m4 b/config/zfs-build.m4 index 6e305996e..8e221f2d7 100644 --- a/config/zfs-build.m4 +++ b/config/zfs-build.m4 @@ -157,6 +157,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [ 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_NO_OMIT_FRAME_POINTER ZFS_AC_CONFIG_ALWAYS_CC_ASAN ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD ZFS_AC_CONFIG_ALWAYS_ARCH