[U-Boot] [PATCH] config.mk: enable -fstack-usage only when it is desired

Masahiro Yamada
2013-09-30T08:01:50Z

Hello Jeroen,

> diff --git a/config.mk b/config.mk
> index 48913f6..177f685 100644
> --- a/config.mk
> +++ b/config.mk
> @@ -117,7 +117,7 @@ CC_TEST_OFILE :=
> $(OBJTREE)/include/generated/cc_test_file.o
> -include $(CC_OPTIONS_CACHE_FILE)
>
> cc-option-sys = $(shell mkdir -p $(dir $(CC_TEST_OFILE)); \
> - if $(CC) $(CFLAGS) $(1) -S -xc /dev/null -o
> $(CC_TEST_OFILE) \
> + if $(CC) -Werror $(CFLAGS) $(1) -S -xc /dev/null -o
> $(CC_TEST_OFILE) \
> > /dev/null 2>&1; then \
> echo 'CC_OPTIONS += $(strip $1)' >>
> $(CC_OPTIONS_CACHE_FILE); \
> echo "$(1)"; fi)

It looks like this was already suggested by Tom too.
See http://patchwork.ozlabs.org/patch/183174/

I tested this patch but unfortunatelly it did not work.

I downloaded bfin-linux-gcc 4.6.3 from
ftp://ftp.kernel.org/pub/tools/crosstool/index.html

I added -Werror to config.mk and I tried:

CROSS_COMPILE=bfin-linux- ./MAKEALL -a blackfin

The log message was still sprinkled with lots of warnings like
warning: -fstack-usage not supported for this target [enabled by default]

So, I looked into it more closely and
I found gcc can compile the input file /dev/null successfully
even if -fstack-usage is not supported.

$ bfin-uclinux-gcc -fstack-usage -S -xc /dev/null
$ echo $?
0
$ bfin-uclinux-gcc -Werror -fstack-usage -S -xc /dev/null
$ echo $?
0

Instead of /dev/null, I prepared a very simple C source code as an input.

$ cat test.c
int test(void)
{
return 0;
}
$ bfin-uclinux-gcc -fstack-usage -S -xc test.c
test.c: In function 'test':
test.c:4:1: warning: -fstack-usage not supported for this target [enabled by default]
$ echo $?
0
$ bfin-uclinux-gcc -fstack-usage -Werror -S -xc test.c
test.c: In function 'test':
test.c:4:1: error: -fstack-usage not supported for this target [-Werror]
cc1: all warnings being treated as errors
$ echo $?
1

This time we can detect unsupported -fstack-usage by the exit status.

So, along with -Werror, I think /dev/null should also be replaced
with some _REAL_ C source file.
But my concern about this treak is we might go far from Kbuild.
In Linux Kernel, cc-option is impilemented in scripts/Kbuild.include.
It uses /dev/null as input.
I wish U-Boot would someday adopt (not nessarily the same but very
similar) Kbuild.

If you see Linux Kernel top Makefile,
many of optional CFLAGS are provided thru cc-option and
also can be turned on/off by CONFIG_ switch.

That is one reason I suggested to introduce CONFIG_CC_STACKUSAGE option.
But this is just my opinion and I would not necessarily stick to this idea.
Please feel free to suggest your thought.

Best Regards
Masahiro Yamada