[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] Stack usage under heavy inlining
From: |
Preston Wilson |
Subject: |
Re: [avr-gcc-list] Stack usage under heavy inlining |
Date: |
Mon, 08 Sep 2008 11:02:21 -0400 |
User-agent: |
Microsoft-Entourage/11.4.0.080122 |
I took Paulo's message to mean this
void functionA(void) {
...
functionB();
functionC();
functionD();
...
}
Where functions B, C, and D do not call one another. In this case, you
would not allocate 96 bytes of stack without inline calls.
-Preston
"Stu Bell" wrote:
> I don't understand your problem. If I understand your situation, you
> have:
>
> int functionD( int d ) __attribute__ ((inline));
> int functionC( int c ) __attribute__ ((inline));
> int functionB( int b ) __attribute__ ((inline));
>
> int functionD( int d ){
> uint8_t localD[32];
> ...
> return result;
> }
> int functionC( int c ){
> uint8_t localC[32];
> ...
> return (functionD(c));
> }
> int functionB( int b ){
> uint8_t localB[32];
> ...
> return (functionC(b));
> }
> int functionA( int a ){
> uint8_t localA[32];
> ...
> return (functionB(a));
> }
>
> And you're complaining that when you call functionA that 96 bytes are
> allocated on the stack instead of 32? Isn't that what would happen
> through the full execution of the set of functions (plus parameter and
> return address pushes as well)?
>
> I must be missing something from your description. It seems to me that
> you actually *save* the parameter and address pushes on the stack,
> saving quite a bit.
>
> Best regards,
>
> Stu Bell
> DataPlay (DPHI, Inc.)
>
>
> -----Original Message-----
> From: address@hidden
> [mailto:address@hidden On Behalf Of
> Paulo Marques
> Sent: Monday, September 08, 2008 5:43 AM
> To: address@hidden
> Subject: [avr-gcc-list] Stack usage under heavy inlining
>
>
> Hi all,
>
> Yesterday I was tracking down a problem in a personal project of mine
> whose symptoms looked like a stack overflow.
>
> As it turned out, it was the same problem with gcc that I had already
> read about on LKML: when gcc inlines a function it increases the stack
> usage of the caller by almost all the stack usage of the callee.
>
> So, for instance, if function A calls function B, then function C and
> then function D, and functions B,C and D use 32 bytes of stack each, it
> means function A now uses 96 bytes of stack, whereas the "not-inlined"
> version only used 32 bytes.
>
> Since I was compiling my project with "-combine -fwhole-program", the
> main function had almost the entire code and it started by pushing all
> call-saved registers and subtracting 126 bytes to the stack pointer :P
>
> Marking the main function as __attribute__((noreturn)) took care of the
> push'es, but only -fno-inline reduced the stack usage.
>
> This is not a avr specific problem. See, for instance, Linus complaining
> of the same problem on i386 (stack size is a problem for the kernel
> too):
>
> http://lkml.org/lkml/2008/8/26/197
>
> I tested this with several versions of gcc, including a gcc-4.4.0 (not a
> very recent one, though).
>
> I can try with more recent versions, if someone suspects that this
> behavior is better in a more recent gcc, but I just wanted to warn other
> developers who might hit the same problem.
>
> --
> Paulo Marques
> Software Development Department - Grupo PIE, S.A.
> Phone: +351 252 290600, Fax: +351 252 290601
> Web: www.grupopie.com
>
> "To know recursion, you must first know recursion."
>
>
> _______________________________________________
> AVR-GCC-list mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/avr-gcc-list
>
>
> _______________________________________________
> AVR-GCC-list mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/avr-gcc-list
- [avr-gcc-list] Stack usage under heavy inlining, Paulo Marques, 2008/09/08
- Re: [avr-gcc-list] Stack usage under heavy inlining, Tristan Gingold, 2008/09/08
- RE: [avr-gcc-list] Stack usage under heavy inlining, Weddington, Eric, 2008/09/08
- Re: [avr-gcc-list] Stack usage under heavy inlining, Tristan Gingold, 2008/09/08
- RE: [avr-gcc-list] Stack usage under heavy inlining, Weddington, Eric, 2008/09/08
- RE: [avr-gcc-list] Stack usage under heavy inlining, John Regehr, 2008/09/08
- RE: [avr-gcc-list] Stack usage under heavy inlining, Weddington, Eric, 2008/09/08