public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/44091]  New: [ARM/Thumb] Invalid stack frame usage at -Os
@ 2010-05-12  7:20 sebastian dot huber at embedded-brains dot de
  2010-05-12  7:21 ` [Bug c/44091] " sebastian dot huber at embedded-brains dot de
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-12  7:20 UTC (permalink / raw)
  To: gcc-bugs

GCC generates an invalid stack frame usage sequence in a function epilogue.

Function prologue with comments:

        .align  2
        .global rtems_bdbuf_read
        .code   16
        .thumb_func
        .type   rtems_bdbuf_read, %function
rtems_bdbuf_read:
        push    {r4, r5, r6, r7, lr}
        sub     sp, sp, #60
        add     r7, sp, #8
        /*
         * We have now reserved a stack frame in a two step process.  The
         * non-volatile register r7 will be use as an local variable anchor.
         */
        str     r3, [r7, #4]
        mov     r3, #0
        str     r3, [r7, #48]
        str     r3, [r7, #44]
        str     r3, [r7, #40]
        mov     r3, r7
        add     r3, r3, #44
        str     r3, [sp]
        sub     r3, r3, #4
        str     r3, [sp, #4]
        add     r3, r3, #8
        bl      rtems_bdbuf_obtain_disk
        str     r0, [r7, #12]
        cmp     r0, #0
        beq     .LCB3661
        b       .L520   @long jump
.LCB3661:

Function epilogue with comments:
.L520:
        mov     sp, r7
        add     sp, sp, #52
        /*
         * Here we released the second part of our stack frame which contains
         * local variables.
         */
        ldr     r0, [r7, #12]
        /*
         * Here we used the second part of our stack frame which contains local
         * variables.  We read a status variable from the stack frame that will
         * be returned now.  That means we use a part of the frame that we
         * already released.  In case an interrupt happens between these two
         * instructions (add and ldr) we may have a big problem.  These two
         * instructions are in the wrong order, the reverse order is correct.
         */
        @ sp needed for prologue
        pop     {r4, r5, r6, r7, pc}

Attached files follow.


-- 
           Summary: [ARM/Thumb] Invalid stack frame usage at -Os
           Product: gcc
           Version: 4.4.4
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: sebastian dot huber at embedded-brains dot de
 GCC build triplet: x86_64-unknown-linux-gnu
  GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: arm-rtems4.10


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


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2010-05-13 14:22 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-05-12  7:20 [Bug c/44091] New: [ARM/Thumb] Invalid stack frame usage at -Os sebastian dot huber at embedded-brains dot de
2010-05-12  7:21 ` [Bug c/44091] " sebastian dot huber at embedded-brains dot de
2010-05-12  7:22 ` sebastian dot huber at embedded-brains dot de
2010-05-12  7:22 ` sebastian dot huber at embedded-brains dot de
2010-05-12  9:41 ` sebastian dot huber at embedded-brains dot de
2010-05-12 10:03 ` sebastian dot huber at embedded-brains dot de
2010-05-12 11:07 ` sebastian dot huber at embedded-brains dot de
2010-05-12 11:13 ` sebastian dot huber at embedded-brains dot de
2010-05-12 12:04 ` sebastian dot huber at embedded-brains dot de
2010-05-12 16:34 ` mikpe at it dot uu dot se
2010-05-13  9:42 ` sebastian dot huber at embedded-brains dot de
2010-05-13  9:50 ` sebastian dot huber at embedded-brains dot de
2010-05-13 10:28 ` mikpe at it dot uu dot se
2010-05-13 14:22 ` pinskia at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).