[Bug libstdc++/40841] Application segfaults when throwing an exception that destroys an fstream

zlynx at acm dot org gcc-bugzilla@gcc.gnu.org
Mon Jul 27 21:26:00 GMT 2009



------- Comment #9 from zlynx at acm dot org  2009-07-27 21:26 -------
I built GCC using libunwind and binutils 2.19.1 and there is the same problem.

The registers are *not* being restored to the right values after the exception
return.

In the following assembly code you can clearly see that it expects the value in
r37 to remain useful after the call to f. It doesn't.

mov r37=r1
addl r38=112,r1;;
ld8 r38=[r38]
nop.i 0x0
nop.m 0x0
nop.i 0x0
br.call.sptk.many b0=4000000000000f80 <f(char const*)>
mov r1=r37
nop.i 0x0
br.few 4000000000001210 <main+0x190>;;

(Well, ok, it actually jumps to the exception catch block, but that block also
does mov r1=r37 to get a PLT offset.)


-- 

zlynx at acm dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to fail|                            |4.4.1 4.4.2
      Known to work|                            |4.3.0


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



More information about the Gcc-bugs mailing list