------- Comment #3 from armcc2000 at yahoo dot com  2005-11-09 04:21 -------
A few more results...

1) gcc 4.0.2 _is_ also buggy

2) Bug seems to be associated with -foptimize-sibling-calls 
ie previous code compiled with:

arm-linux-gcc-4.0.2 -O1 -foptimize-sibling-calls

gives:

        .align  2
        .global bad
        .type   bad, %function
bad:
        @ args = 8, pretend = 4, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        sub     sp, sp, #4
        @ lr needed for prologue
        str     r3, [sp, #0]
        mov     r3, #0
        str     r3, [sp, #4]
        str     r3, [sp, #8]    <-- BANG... caller's stack overwritten !!
        mov     r0, r3
        mov     r1, r3
        mov     r2, r3
        add     sp, sp, #4
        b       foo
        .size   bad, .-bad
        .ident  "GCC: (GNU) 4.0.2"


For reference, arm-linux-gcc-4.0.2 -O1 
gives:

        .align  2
        .global bad
        .type   bad, %function
bad:
        @ args = 8, pretend = 4, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        sub     sp, sp, #4
        str     lr, [sp, #-4]!
        sub     sp, sp, #8
        str     r3, [sp, #12]
        mov     r3, #0
        str     r3, [sp, #0]
        str     r3, [sp, #4]
        mov     r0, r3
        mov     r1, r3
        mov     r2, r3
        bl      foo
        add     sp, sp, #8
        ldr     lr, [sp], #4
        add     sp, sp, #4
        bx      lr
        .size   bad, .-bad
        .ident  "GCC: (GNU) 4.0.2"

(ie not particularly optimal, but no stack corruption).


-- 

armcc2000 at yahoo dot com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |armcc2000 at yahoo dot com


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

Reply via email to