Bug 45264 - Stack corruption with any function using frame
Summary: Stack corruption with any function using frame
Status: RESOLVED INVALID
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 4.4.3
: P3 critical
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-08-12 14:36 UTC by darkdragon2000
Modified: 2010-08-13 22:30 UTC (History)
2 users (show)

See Also:
Host:
Target: avr
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments
File which recreates the issue (284 bytes, text/plain)
2010-08-12 23:56 UTC, darkdragon2000
Details
makefile (1.08 KB, text/plain)
2010-08-12 23:56 UTC, darkdragon2000
Details

Note You need to log in before you can comment on or make changes to this bug.
Description darkdragon2000 2010-08-12 14:36:11 UTC
With the beta AVR toolchain 3.0.0.207, the prologue for functions using a frame has changed and is now causing stack corruption when an interrupt fires.  Take for example a function which needs 5 bytes of frame.  This is how the frame is setup in the function prologue:

Under WinAVR2010:
     a30:	df 93       	push	r29
     a32:	cf 93       	push	r28
     a34:	00 d0       	rcall	.+0      	; 0xa36 
     a36:	00 d0       	rcall	.+0      	; 0xa38 
     a38:	0f 92       	push	r0
     a3a:	cd b7       	in	r28, 0x3d	; 61
     a3c:	de b7       	in	r29, 0x3e	; 62

AVR Toolchain 3.0.0.207:
+00000507:   93DF        PUSH      R29            Push register on stack
+00000508:   93CF        PUSH      R28            Push register on stack
+00000509:   B7CD        IN        R28,0x3D       In from I/O location
+0000050A:   B7DE        IN        R29,0x3E       In from I/O location
+0000050B:   9725        SBIW      R28,0x05       Subtract immediate from word
+0000050C:   BFDE        OUT       0x3E,R29       Out to I/O location
+0000050D:   BFCD        OUT       0x3D,R28 

The stack corruption occurs when an interrupt fires between addresses 0x50C and 0x50D in the example above since the stack pointer is only half updated.

I have submitted this as critical since it causes applications to crash consistently.
Comment 1 Richard Biener 2010-08-12 15:15:31 UTC
Why isn't this a bug in the interrupt handler?

What is "beta AVR toolchain 3.0.0.207" btw?  We do not release such, so
maybe you should file a bug with the vendor releasing that?
Comment 2 darkdragon2000 2010-08-12 17:52:32 UTC
It's not a bug in the handler since when the interrupt fires at the point when the stack pointer is invalid (right after 0x50c), the program counter gets pushed onto the stack, which is an invalid location.

When I tried to submit a report with the vendor, they pointed me back here.  Maybe this should go to AVRLiBC?
Comment 3 darkdragon2000 2010-08-12 23:56:18 UTC
Created attachment 21472 [details]
File which recreates the issue
Comment 4 darkdragon2000 2010-08-12 23:56:35 UTC
Created attachment 21473 [details]
makefile
Comment 5 Eric Weddington 2010-08-13 01:14:08 UTC
Marking this bug as INVALID because the AVR Toolchain 3.0.0.207 is not an officially released toolchain, and only in beta.

If you have any potential bugs, then please send to avr AT atmel DOT com, and please CC me. AFAIK, Atmel did not (or should have not) sent you to here. 

When you do send a bug report, send a compilable test case that shows the bugs along with the command line you used, and especially show which device this is for.
Comment 6 darkdragon2000 2010-08-13 22:30:43 UTC
OK thanks, is the code I attached here OK?  I already submitted this to Atmel also (#605725).  Last time I submitted a bug to them this is the reply I got back:

Note that avr-gcc and avr-libC are open-source projects, which you may directly report bugs
to (see http://www.nongnu.org/avr-libc/bugs.html).



(In reply to comment #5)
> Marking this bug as INVALID because the AVR Toolchain 3.0.0.207 is not an
> officially released toolchain, and only in beta.
> 
> If you have any potential bugs, then please send to avr AT atmel DOT com, and
> please CC me. AFAIK, Atmel did not (or should have not) sent you to here. 
> 
> When you do send a bug report, send a compilable test case that shows the bugs
> along with the command line you used, and especially show which device this is
> for.
>