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