Message ID | 1386760294-8591-1-git-send-email-yamada.m@jp.panasonic.com |
---|---|
State | Accepted |
Delegated to: | Tom Rini |
Headers | show |
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!
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
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