public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/34947]  New: Clobbered float registers not popped
@ 2008-01-23 20:58 vincent dot riviere at freesbee dot fr
  2008-02-02 19:15 ` [Bug c/34947] [4.2 Regression] " vincent dot riviere at freesbee dot fr
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: vincent dot riviere at freesbee dot fr @ 2008-01-23 20:58 UTC (permalink / raw)
  To: gcc-bugs

This problem is about functions that push some float registers at the
beginning, but forget to pop them at the end. The stack pointer is not adjusted
as expected, so the function return to an invalid address.

It appears when the following is true:
- the file is compiled with -m68020-60 -O1 -fomit-frame-pointer
- the function uses floats
- the function is complicated enough to have some float registers backed up on
the stack
- there is an early return in the function

The problem appears in the following test case:
$ cat bug.c
volatile float g1;
float g2;

void f(void)
{
    float i;

    if (g2 >= 0)
        return;

    for (i = 0; i < 10; ++i)
        g1 = g2 + i;
}

$ gcc -S bug.c -o - -m68020-60 -O2 -fomit-frame-pointer
...
        .globl  f
        .type   f, @function
f:
        fmovm #0x4,-(%sp)
        fmove.s g2,%fp2
        fbnge .L9
.L5:
        rts
.L9:
...

We can see that some float registers are backuped at the beginning. Then (g2 >=
0) is checked. If it is the case, the function returns with a simple rts,
without restoring the registers, to an invalid address.

This happens in gcc 4.2.2 and gcc-4.2-20080116


-- 
           Summary: Clobbered float registers not popped
           Product: gcc
           Version: 4.2.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: vincent dot riviere at freesbee dot fr
GCC target triplet: m68k-linux


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


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

* [Bug c/34947] [4.2 Regression] Clobbered float registers not popped
  2008-01-23 20:58 [Bug c/34947] New: Clobbered float registers not popped vincent dot riviere at freesbee dot fr
@ 2008-02-02 19:15 ` vincent dot riviere at freesbee dot fr
  2008-02-21  7:35 ` vincent dot riviere at freesbee dot fr
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: vincent dot riviere at freesbee dot fr @ 2008-02-02 19:15 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from vincent dot riviere at freesbee dot fr  2008-02-02 19:14 -------
The bug is still here in the official 4.2.3


-- 

vincent dot riviere at freesbee dot fr changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|normal                      |major
          Component|target                      |c
      Known to fail|                            |4.2.3
      Known to work|                            |4.1.2
            Summary|Clobbered float registers   |[4.2 Regression] Clobbered
                   |not popped                  |float registers not popped


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


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

* [Bug c/34947] [4.2 Regression] Clobbered float registers not popped
  2008-01-23 20:58 [Bug c/34947] New: Clobbered float registers not popped vincent dot riviere at freesbee dot fr
  2008-02-02 19:15 ` [Bug c/34947] [4.2 Regression] " vincent dot riviere at freesbee dot fr
@ 2008-02-21  7:35 ` vincent dot riviere at freesbee dot fr
  2008-03-27 22:21 ` [Bug target/34947] " rguenth at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: vincent dot riviere at freesbee dot fr @ 2008-02-21  7:35 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from vincent dot riviere at freesbee dot fr  2008-02-21 07:34 -------
That patch fixes the problem:
http://gcc.gnu.org/ml/gcc-patches/2007-01/msg00790.html


-- 


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


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

* [Bug target/34947] [4.2 Regression] Clobbered float registers not popped
  2008-01-23 20:58 [Bug c/34947] New: Clobbered float registers not popped vincent dot riviere at freesbee dot fr
  2008-02-02 19:15 ` [Bug c/34947] [4.2 Regression] " vincent dot riviere at freesbee dot fr
  2008-02-21  7:35 ` vincent dot riviere at freesbee dot fr
@ 2008-03-27 22:21 ` rguenth at gcc dot gnu dot org
  2008-05-19 20:33 ` jsm28 at gcc dot gnu dot org
  2009-03-31 15:03 ` jsm28 at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-03-27 22:21 UTC (permalink / raw)
  To: gcc-bugs



-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|c                           |target
           Keywords|                            |wrong-code
      Known to work|4.1.2                       |4.1.2 4.3.0
   Target Milestone|---                         |4.2.4


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


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

* [Bug target/34947] [4.2 Regression] Clobbered float registers not popped
  2008-01-23 20:58 [Bug c/34947] New: Clobbered float registers not popped vincent dot riviere at freesbee dot fr
                   ` (2 preceding siblings ...)
  2008-03-27 22:21 ` [Bug target/34947] " rguenth at gcc dot gnu dot org
@ 2008-05-19 20:33 ` jsm28 at gcc dot gnu dot org
  2009-03-31 15:03 ` jsm28 at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: jsm28 at gcc dot gnu dot org @ 2008-05-19 20:33 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from jsm28 at gcc dot gnu dot org  2008-05-19 20:24 -------
4.2.4 is being released, changing milestones to 4.2.5.


-- 

jsm28 at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|4.2.4                       |4.2.5


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


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

* [Bug target/34947] [4.2 Regression] Clobbered float registers not popped
  2008-01-23 20:58 [Bug c/34947] New: Clobbered float registers not popped vincent dot riviere at freesbee dot fr
                   ` (3 preceding siblings ...)
  2008-05-19 20:33 ` jsm28 at gcc dot gnu dot org
@ 2009-03-31 15:03 ` jsm28 at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: jsm28 at gcc dot gnu dot org @ 2009-03-31 15:03 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from jsm28 at gcc dot gnu dot org  2009-03-31 15:03 -------
Closing 4.2 branch, fixed in 4.3.


-- 

jsm28 at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
      Known to fail|4.2.3                       |4.2.3 4.2.5
         Resolution|                            |FIXED
   Target Milestone|4.2.5                       |4.3.0


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


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

end of thread, other threads:[~2009-03-31 15:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-01-23 20:58 [Bug c/34947] New: Clobbered float registers not popped vincent dot riviere at freesbee dot fr
2008-02-02 19:15 ` [Bug c/34947] [4.2 Regression] " vincent dot riviere at freesbee dot fr
2008-02-21  7:35 ` vincent dot riviere at freesbee dot fr
2008-03-27 22:21 ` [Bug target/34947] " rguenth at gcc dot gnu dot org
2008-05-19 20:33 ` jsm28 at gcc dot gnu dot org
2009-03-31 15:03 ` jsm28 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).