From 7fa6f8b93a82608c2c6233f08db4a7a2e7c6e632 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Fri, 23 Jul 2010 10:13:59 -0700 Subject: [PATCH] Restrict usage of -fstack-check option The stack check implementation in older versions of gcc has a fairly low default limit on STACK_CHECK_MAX_FRAME_SIZE of roughly 4096. This results in numerous warning when it is used with code which was designed to run in user space and thus may be relatively stack heavy. The avoid these warnings, which are fatal with -Werror, this patch targets the use of -fstack-check to libraries which are compiled in both user space and kernel space. The only utility which uses this flag is ztest which is designed to simulate running in the kernel and must meet the -fstack-check requirements. All other user space utilities do not use -fstack-check. warning: frame size too large for reliable stack checking warning: try reducing the number of local variables --- cmd/ztest/Makefile.am | 2 +- config/zfs-build.m4 | 5 ++++- lib/libavl/Makefile.am | 2 ++ lib/libefi/Makefile.am | 2 ++ lib/libnvpair/Makefile.am | 2 ++ lib/libunicode/Makefile.am | 2 ++ lib/libuutil/Makefile.am | 2 ++ lib/libzpool/Makefile.am | 2 +- 8 files changed, 16 insertions(+), 3 deletions(-) diff --git a/cmd/ztest/Makefile.am b/cmd/ztest/Makefile.am index 0aa6c2e468..804efccca0 100644 --- a/cmd/ztest/Makefile.am +++ b/cmd/ztest/Makefile.am @@ -1,6 +1,6 @@ include $(top_srcdir)/config/Rules.am -AM_CFLAGS += $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) DEFAULT_INCLUDES += \ -I${top_srcdir}/lib/libspl/include \ diff --git a/config/zfs-build.m4 b/config/zfs-build.m4 index b274b0d254..d40b6e53c9 100644 --- a/config/zfs-build.m4 +++ b/config/zfs-build.m4 @@ -18,15 +18,18 @@ AC_DEFUN([ZFS_AC_DEBUG], [ [ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror" HOSTCFLAGS="${HOSTCFLAGS} -DDEBUG -Werror" - DEBUG_CFLAGS="-DDEBUG -Werror -fstack-check" + DEBUG_CFLAGS="-DDEBUG -Werror" + DEBUG_STACKFLAGS="-fstack-check" ], [ KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG " HOSTCFLAGS="${HOSTCFLAGS} -DNDEBUG " DEBUG_CFLAGS="-DNDEBUG" + DEBUG_STACKFLAGS="" ]) AC_SUBST(DEBUG_CFLAGS) + AC_SUBST(DEBUG_STACKFLAGS) AC_MSG_RESULT([$enable_debug]) ]) diff --git a/lib/libavl/Makefile.am b/lib/libavl/Makefile.am index 3ae2cb98a7..50185e281f 100644 --- a/lib/libavl/Makefile.am +++ b/lib/libavl/Makefile.am @@ -1,5 +1,7 @@ include $(top_srcdir)/config/Rules.am +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) + DEFAULT_INCLUDES += \ -I${top_srcdir}/module/avl/include \ -I${top_srcdir}/lib/libspl/include diff --git a/lib/libefi/Makefile.am b/lib/libefi/Makefile.am index 79849ad26d..431179340a 100644 --- a/lib/libefi/Makefile.am +++ b/lib/libefi/Makefile.am @@ -1,5 +1,7 @@ include $(top_srcdir)/config/Rules.am +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) + DEFAULT_INCLUDES += \ -I${top_srcdir}/lib/libefi/include \ -I${top_srcdir}/lib/libspl/include diff --git a/lib/libnvpair/Makefile.am b/lib/libnvpair/Makefile.am index 31e0b6a0ce..9cac22c530 100644 --- a/lib/libnvpair/Makefile.am +++ b/lib/libnvpair/Makefile.am @@ -1,5 +1,7 @@ include $(top_srcdir)/config/Rules.am +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) + DEFAULT_INCLUDES += \ -I${top_srcdir}/module/nvpair/include \ -I${top_srcdir}/lib/libnvpair/include \ diff --git a/lib/libunicode/Makefile.am b/lib/libunicode/Makefile.am index fe1f39219f..9d5785595f 100644 --- a/lib/libunicode/Makefile.am +++ b/lib/libunicode/Makefile.am @@ -1,5 +1,7 @@ include $(top_srcdir)/config/Rules.am +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) + DEFAULT_INCLUDES += \ -I${top_srcdir}/module/unicode/include \ -I${top_srcdir}/lib/libspl/include diff --git a/lib/libuutil/Makefile.am b/lib/libuutil/Makefile.am index 78eb75e27f..591c046e3b 100644 --- a/lib/libuutil/Makefile.am +++ b/lib/libuutil/Makefile.am @@ -1,5 +1,7 @@ include $(top_srcdir)/config/Rules.am +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) + DEFAULT_INCLUDES += \ -I${top_srcdir}/lib/libuutil/include \ -I${top_srcdir}/lib/libspl/include \ diff --git a/lib/libzpool/Makefile.am b/lib/libzpool/Makefile.am index 744dbfce30..8a7fb195f9 100644 --- a/lib/libzpool/Makefile.am +++ b/lib/libzpool/Makefile.am @@ -1,6 +1,6 @@ include $(top_srcdir)/config/Rules.am -AM_CFLAGS += $(FRAME_LARGER_THAN) +AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN) SUBDIRS = include DEFAULT_INCLUDES += \