[U-Boot] [PATCH v5] Makefile: add a new script to check -fstack-usage support

If -fstack-usage option is given to crosstools that do not support it, gcc displays a warning message but still exits with status 0.
This means we can not rely on $(call cc-option,...) to detect if -fstack-usage option is supported or not.
Signed-off-by: Masahiro Yamada yamada.m@jp.panasonic.com ---
Some crosstools currently do not support -fstack-usage option. For example, bfin-uclinux-gcc, which is available at https://www.kernel.org/pub/tools/crosstool/
If -fstack-usage option is given to such crosstools, gcc displays a warning message as follows:
warning: -fstack-usage not supported for this target [enabled by default]
But it still exits with status 0.
So, $(call cc-option,-fstack-usage) does not work as we expect because cc-option checks exit status to judge whether the given option is supported or not.
Changes in v5: - Rebased on Kbuild series
Changes in v4: - Drop executable permission of scripts/gcc-stack-usage.sh - Fix commit log - Add the rationale below ---
Makefile | 4 +++- scripts/gcc-stack-usage.sh | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 scripts/gcc-stack-usage.sh
diff --git a/Makefile b/Makefile index e034677..8f8a131 100644 --- a/Makefile +++ b/Makefile @@ -553,7 +553,9 @@ KBUILD_CFLAGS += -g KBUILD_AFLAGS += -g
# Report stack usage if supported -KBUILD_CFLAGS += $(call cc-option,-fstack-usage) +ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-stack-usage.sh $(CC)),y) + KBUILD_CFLAGS += -fstack-usage +endif
KBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
diff --git a/scripts/gcc-stack-usage.sh b/scripts/gcc-stack-usage.sh new file mode 100644 index 0000000..27ac928 --- /dev/null +++ b/scripts/gcc-stack-usage.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# Test for gcc '-fstack-usage' support +# Copyright (C) 2013, Masahiro Yamada yamada.m@jp.panasonic.com +# +# SPDX-License-Identifier: GPL-2.0+ +# + +TMP="$$" + +cat <<END | $@ -Werror -fstack-usage -x c - -c -o $TMP >/dev/null 2>&1 \ + && echo "y" +int main(void) +{ + return 0; +} +END + +rm -f $TMP $TMP.su

On Wed, Dec 11, 2013 at 08:11:34PM +0900, Masahiro Yamada wrote:
If -fstack-usage option is given to crosstools that do not support it, gcc displays a warning message but still exits with status 0.
This means we can not rely on $(call cc-option,...) to detect if -fstack-usage option is supported or not.
Signed-off-by: Masahiro Yamada yamada.m@jp.panasonic.com
Some crosstools currently do not support -fstack-usage option. For example, bfin-uclinux-gcc, which is available at https://www.kernel.org/pub/tools/crosstool/
If -fstack-usage option is given to such crosstools, gcc displays a warning message as follows:
warning: -fstack-usage not supported for this target [enabled by default]
But it still exits with status 0.
So, $(call cc-option,-fstack-usage) does not work as we expect because cc-option checks exit status to judge whether the given option is supported or not.
Changes in v5:
- Rebased on Kbuild series
Changes in v4:
- Drop executable permission of scripts/gcc-stack-usage.sh
- Fix commit log
- Add the rationale below ---
We still want this, and it's still applicable right?

Hello Tom,
We still want this, and it's still applicable right?
Yes, it's still applicable and I really want it on the code base.
Without this patch, log message would be sprinked with warnings when using some cross tools.
$ make CROSS_COMPILE=m68k-linux- M54418TWR_config all [ snip ] CC arch/m68k/lib/cache.o arch/m68k/lib/cache.c: In function 'flush_cache': arch/m68k/lib/cache.c:18:1: warning: -fstack-usage not supported for this target [enabled by default] CC arch/m68k/lib/interrupts.o arch/m68k/lib/interrupts.c: In function 'irq_install_handler': arch/m68k/lib/interrupts.c:56:1: warning: -fstack-usage not supported for this target [enabled by default] CC arch/m68k/lib/time.o arch/m68k/lib/time.c: In function 'dtimer_interrupt': arch/m68k/lib/time.c:76:1: warning: -fstack-usage not supported for this target [enabled by default] CC arch/m68k/lib/traps.o arch/m68k/lib/traps.c: In function 'exc_handler': arch/m68k/lib/traps.c:40:1: warning: -fstack-usage not supported for this target [enabled by default] LD arch/m68k/lib/built-in.o LD board/freescale/common/built-in.o CC board/freescale/m54418twr/m54418twr.o board/freescale/m54418twr/m54418twr.c: In function 'checkboard': board/freescale/m54418twr/m54418twr.c:26:1: warning: -fstack-usage not supported for this target [enabled by default] LD board/freescale/m54418twr/built-in.o CC common/main.o common/main.c: In function 'delete_char.part.1': common/main.c:1167:1: warning: -fstack-usage not supported for this target [enabled by default] CC common/command.o common/command.c: In function 'find_cmd_tbl': common/command.c:120:1: warning: -fstack-usage not supported for this target [enabled by default]
Best Regards Masahiro Yamada

On Wed, Dec 11, 2013 at 08:11:34PM +0900, Masahiro Yamada wrote:
If -fstack-usage option is given to crosstools that do not support it, gcc displays a warning message but still exits with status 0.
This means we can not rely on $(call cc-option,...) to detect if -fstack-usage option is supported or not.
Signed-off-by: Masahiro Yamada yamada.m@jp.panasonic.com
Applied to u-boot/master, thanks!
participants (2)
-
Masahiro Yamada
-
Tom Rini