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. -- Summary: Stack corruption with any function using frame Product: gcc Version: 4.4.3 Status: UNCONFIRMED Severity: critical Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: darkdragon2000 at hotmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45264