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

login
register
mail settings
Submitter Jeroen Hofstee
Date Sept. 27, 2013, 5:57 p.m.
Message ID <5245C703.6060907@myspectrum.nl>
Download mbox | patch
Permalink /patch/278659/
State Not Applicable
Headers show

Comments

Jeroen Hofstee - Sept. 27, 2013, 5:57 p.m.
Hello Masahiro,

On 09/27/2013 04:09 AM, Masahiro Yamada wrote:
>
>> The problem here is that except for whatever arches don't support
>> - -fstack-usage, we always want to generate this information, to assist in
>> debugging stack usage problems (which can be a real problem within SPL
>> for example).  How about ifneq($(CONFIG_M68K)$(CONFIG_...),y) ... endif
>> around it?
> OK. This works.
>
> But I'm kind of afraid ifneq($(CONFIG_M68K)$(CONFIG_...),y) ... endif
> might be too arch-specific to be written in the top config.mk.
>
> Instead, we can add
> CONFIG_CC_STACKUSAGE=y
> to arch/{arm, powerpc, x86, microblaze ...}/config.mk

I guess below patch should work as well. Anyone aware
of any side affects it might cause?

---
Regards,
Jeroen

                 > /dev/null 2>&1; then \
                 echo 'CC_OPTIONS += $(strip $1)' >> 
$(CC_OPTIONS_CACHE_FILE); \
                 echo "$(1)"; fi)
Masahiro Yamada - Sept. 30, 2013, 8:01 a.m.
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
Jeroen Hofstee - Oct. 8, 2013, 7:46 p.m.
Hello Masahiro,

On 09/30/2013 10:01 AM, Masahiro Yamada wrote:
> 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.
>
>

I tried to google this a bit, one thing I found was
http://sourceware.org/bugzilla/show_bug.cgi?id=5210, but I fail
to (easily) find a reliable gcc reference. Perhaps we should
file a bug? -Werror doesn't work with /dev/null when
-fstack-usage is not supported...

I cannot comment on your concern regarding Kbuild, since I
am unaware of its internals. I just suggested above since
it would be a cleaner approach (if it worked...).

Regards,
Jeroen
Masahiro Yamada - Oct. 15, 2013, 10:51 a.m.
Hello Jeroen

> 
> I tried to google this a bit, one thing I found was
> http://sourceware.org/bugzilla/show_bug.cgi?id=5210, but I fail
> to (easily) find a reliable gcc reference. Perhaps we should
> file a bug? -Werror doesn't work with /dev/null when
> -fstack-usage is not supported...

I might be a bug but I cannot say with confident.
Anyway, we need to do something
with the current gcc behavior.


> I cannot comment on your concern regarding Kbuild, since I
> am unaware of its internals. I just suggested above since
> it would be a cleaner approach (if it worked...).

I posted
version2 : config.mk: disable -fstack-usage for blackfin and m68k
and
version3 : config.mk: fix -fstack-usage support test


I think the latter is close to your idea and
I believe it's better.


Best Regards
Masahiro Yamada

Patch

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) \