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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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 ` sebastian dot huber at embedded-brains dot de
  2010-05-12  7:22 ` sebastian dot huber at embedded-brains dot de
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-12  7:21 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from sebastian dot huber at embedded-brains dot de  2010-05-12 07:21 -------
Created an attachment (id=20641)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=20641&action=view)
Log.


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-12  7:22 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from sebastian dot huber at embedded-brains dot de  2010-05-12 07:21 -------
Created an attachment (id=20642)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=20642&action=view)
Preprocessed source file.


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-12  7:22 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from sebastian dot huber at embedded-brains dot de  2010-05-12 07:22 -------
Created an attachment (id=20643)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=20643&action=view)
Generated assembler file.


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (2 preceding siblings ...)
  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
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-12  9:41 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from sebastian dot huber at embedded-brains dot de  2010-05-12 09:40 -------
GCC 4.5.0 20100414 has this problem too.


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (3 preceding siblings ...)
  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
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-12 10:03 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #5 from sebastian dot huber at embedded-brains dot de  2010-05-12 10:03 -------
GCC 4.2.4 does not have this problem.

Function epilogue:

.L672:
        ldr     r0, [r7, #4]
        mov     sp, r7
        add     sp, sp, #52
        @ sp needed for prologue
        pop     {r4, r5, r6, r7, pc}

You can see here that the mov/add and ldr instructions are in the right order.


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (4 preceding siblings ...)
  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
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-12 11:07 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #6 from sebastian dot huber at embedded-brains dot de  2010-05-12 11:06 -------
If you use GCC 4.5.0 20100414 with '-march=armv7' '-mthumb' '-Os' the function
epilogue is also correct.  It seems that this is a Thumb 1 problem.


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (5 preceding siblings ...)
  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
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-12 11:13 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #7 from sebastian dot huber at embedded-brains dot de  2010-05-12 11:13 -------
GCC 4.3.2 20080827 has this problem too.


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (6 preceding siblings ...)
  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
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-12 12:04 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #8 from sebastian dot huber at embedded-brains dot de  2010-05-12 12:03 -------
A summary follows.  Broken means bdbuf.i generates an invalid stack frame usage
sequence in a function epilogue.  Works means that the corresponding area is
valid.

Flags: -march=armv5t -mthumb -Os
  Broken:
    GCC 4.3.2 20080827
    GCC 4.4.4 20100429
    GCC 4.5.0 20100414
  Works:
    GCC 4.2.4

Flags: -march=armv7 -mthumb -Os
  Works:
    GCC 4.5.0 20100414

Flags: -march=armv5t -mthumb -O2
  Suspicious:
    GCC 4.5.0 20100414

Suspicious means that the epilogue sequence is this:

.L577:
        mov     sp, r7
        add     sp, sp, #36
        mov     r0, r4
        /*
         * Here we don't have a problem since r0 comes from r4
         * and not from the stack frame.  Is this always the case?
         */
        @ sp needed for prologue
        pop     {r2, r3, r4, r5}
        mov     r8, r2
        mov     r9, r3
        mov     sl, r4
        mov     fp, r5
        pop     {r4, r5, r6, r7, pc}


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (7 preceding siblings ...)
  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
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: mikpe at it dot uu dot se @ 2010-05-12 16:34 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #9 from mikpe at it dot uu dot se  2010-05-12 16:34 -------
Confirmed with cross to armv5tel-unknown-linux-gnueabi. 4.3/4.4/4.5/4.6 all
generate the signal-unsafe epilogue.


-- 

mikpe at it dot uu dot se changed:

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


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (8 preceding siblings ...)
  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
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-13  9:42 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #10 from sebastian dot huber at embedded-brains dot de  2010-05-13 09:42 -------
Binary search through trunk revisions yield:

r159321 BROKEN
r150000 BROKEN
r140000 BROKEN
r135000 BROKEN
r132500 BROKEN
r131024 BROKEN
r130512 BROKEN
r130256 BROKEN
r130128 BROKEN
r130064 BROKEN
r130056 BROKEN
r130052 BROKEN
r130051 OK
r130050 OK
r130048 OK
r130032 OK
r130000 OK


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (9 preceding siblings ...)
  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
  12 siblings, 0 replies; 14+ messages in thread
From: sebastian dot huber at embedded-brains dot de @ 2010-05-13  9:50 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #11 from sebastian dot huber at embedded-brains dot de  2010-05-13 09:50 -------
Created an attachment (id=20654)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=20654&action=view)
Difference between bdbuf.s in revsions 130051 and 130052

This clearly shows how the frame usage sequence changed.


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (10 preceding siblings ...)
  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
  12 siblings, 0 replies; 14+ messages in thread
From: mikpe at it dot uu dot se @ 2010-05-13 10:28 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #12 from mikpe at it dot uu dot se  2010-05-13 10:28 -------
r130052 is a generic scheduling tweak originally described here:
http://gcc.gnu.org/ml/gcc-patches/2007-10/msg01814.html


-- 


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


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

* [Bug c/44091] [ARM/Thumb] Invalid stack frame usage at -Os
  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
                   ` (11 preceding siblings ...)
  2010-05-13 10:28 ` mikpe at it dot uu dot se
@ 2010-05-13 14:22 ` pinskia at gcc dot gnu dot org
  12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2010-05-13 14:22 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #13 from pinskia at gcc dot gnu dot org  2010-05-13 14:22 -------


*** This bug has been marked as a duplicate of 38644 ***


-- 

pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |DUPLICATE


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).