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

Reply via email to