diff mbox

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

Message ID 1386760294-8591-1-git-send-email-yamada.m@jp.panasonic.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Masahiro Yamada Dec. 11, 2013, 11:11 a.m. UTC
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

Comments

Tom Rini Feb. 21, 2014, 3:13 p.m. UTC | #1
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?
Masahiro Yamada Feb. 24, 2014, 12:45 a.m. UTC | #2
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
Tom Rini Feb. 25, 2014, 1:58 p.m. UTC | #3
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 mbox

Patch

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