>> This patch works correctly. It passes the ruby tests correctly. Could you >> put this to CVS. > >Done. > I verified that CVS sources behaves correctly as well. >> Thanks for very intersting >> gdb session and analysis. Maybe there is bug in somewhere in solaris >> setjmp function family? In linux this works just fine. > >The problem is caused by a combination of gcc, getcontext/setcontext >and SPARC (or IA64). So I think it can be caused on Linux/SPARC and >Linux/IA64. > >It is reasonable that gcc expects registers in register window/stack >is not changed across a function call. It is because register >window/stack is a mechanism to save/restore registers automatically. > >It is reasonable that getcontext/setcontext doesn't preserve all >registers. It makes the functions slower, especially on processors >which have many registers. > >It is reasonable that processors have a special mechanism to make >function call faster. > >So I'm not sure what is wrong. However I think gcc is the most >proper target to have a workaround for the problem because gcc already >knows setjmp may return twice. It would require a sample.c test program, to get gcc people interested and possibly they wouldn't still fix this one. In the mean time your fix works very nicely. Thanks for fast response.