------- Comment #2 from jakub at gcc dot gnu dot org 2008-06-02 14:08 ------- Important correction, it works with: -m32 -Os -fpic -fno-asynchronous-unwind-tables but doesn't with: -m32 -Os -fpic -fasynchronous-unwind-tables which generates identical .text, but different unwind info.
The code in between that jmp .L542 and .L542: looks broken: .LCFI2090: call [EMAIL PROTECTED] addl $16, %esp .LCFI2091: jmp .L542 .L543: .L621: # basic block 13 .L544: movl %eax, %edi subl $12, %esp .LCFI2092: leal -32(%ebp), %eax movl %edx, %esi pushl %eax .LCFI2093: call [EMAIL PROTECTED] jmp .L545 .LCFI2094: .L622: # basic block 14 movl %eax, %edi movl %edx, %esi .L545: # basic block 15 .L623: subl $12, %esp .LCFI2095: pushl -28(%ebp) .LCFI2096: call [EMAIL PROTECTED] cmpl $1, %esi jne .L592 # basic block 16 .L546: subl $12, %esp .LCFI2097: pushl %edi .LCFI2098: call [EMAIL PROTECTED] addl $16, %esp .LCFI2099: .LEHB94: call [EMAIL PROTECTED] .LEHE94: .L542: # basic block 17 cmpl $0, -20(%ebp) Both .L621 and .L622 are landing pads, so I believe args_size should be 0 at those points (and the dwarf2out code even clears args_size on BARRIERs). call [EMAIL PROTECTED] is done with args_size 16, which looks correct, but it then jumps to .L545 without addl 16, %esp which would be IMNSHO expected to get stack pointer back to args_size 0 level, and .L545 is after barrier with no stack changes. When entering the .L622 landing pad call [EMAIL PROTECTED] is done with correct args_size 16, but the following call [EMAIL PROTECTED] is done with args_size 32, eventhough the call only has one parameter and so should be 16. -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |4.3.1 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36419