http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50725

Mikael Pettersson <mikpe at it dot uu.se> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mikpe at it dot uu.se

--- Comment #13 from Mikael Pettersson <mikpe at it dot uu.se> 2011-11-05 
13:58:55 UTC ---
I see an obvious regression with gcc-4.7 compared to 4.6 on cygwin.  With 4.6.1
built natively on cygwin the code starts with:

__pei386_runtime_relocator:
LFB2:
        .cfi_startproc
        leal    4(%esp), %ecx
        .cfi_def_cfa 1, 0
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        .cfi_escape 0x10,0x5,0x2,0x75,0
        pushl   %edi
        pushl   %esi
        pushl   %ebx
        pushl   %ecx
        .cfi_escape 0xf,0x3,0x75,0x70,0x6
        .cfi_escape 0x10,0x3,0x2,0x75,0x74
        .cfi_escape 0x10,0x6,0x2,0x75,0x78
        .cfi_escape 0x10,0x7,0x2,0x75,0x7c
        subl    $56, %esp
        movl    (%ecx), %eax
        cmpl    $226, 8(%eax)

that is, the parameter is on the stack just above the return address.

With gcc-4.7-20111029 built as a cross to cygwin, the code starts with:

__pei386_runtime_relocator:
LFB2:
        .cfi_startproc
        movl    (%ecx), %eax
        cmpl    $226, 8(%eax)
        jg      L15
        ret
        .p2align 4,,10
L15:
        leal    4(%esp), %ecx
        .cfi_def_cfa 1, 0
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        .cfi_escape 0x10,0x5,0x2,0x75,0
        movl    %esp, %ebp

which is just completely bonkers.

This code looks shrink-wrapped; passing -fno-shrink-wrap changes it to:

__pei386_runtime_relocator:
LFB2:
        .cfi_startproc
        leal    4(%esp), %ecx
        .cfi_def_cfa 1, 0
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        .cfi_escape 0x10,0x5,0x2,0x75,0
        movl    %esp, %ebp
        pushl   %edi
        pushl   %esi
        pushl   %ebx
        pushl   %ecx
        .cfi_escape 0xf,0x3,0x75,0x70,0x6
        subl    $56, %esp
        .cfi_escape 0x10,0x7,0x2,0x75,0x7c
        .cfi_escape 0x10,0x6,0x2,0x75,0x78
        .cfi_escape 0x10,0x3,0x2,0x75,0x74
        movl    (%ecx), %eax
        cmpl    $226, 8(%eax)

which is similar to the code from gcc-4.6.1.

Reply via email to