Hello, > >Index: eval.c >=================================================================== >RCS file: /src/ruby/eval.c,v >retrieving revision 1.616.2.101 >diff -u -r1.616.2.101 eval.c >--- eval.c 12 Jun 2005 16:58:41 -0000 1.616.2.101 >+++ eval.c 19 Jun 2005 08:03:33 -0000 >@@ -133,9 +133,17 @@ >* It is not required that setjmp is called at run time, since the problem is >* register usage. >*/ >+#if defined (__GNUC__) && (defined(sparc) || defined(__sparc__)) >+#define DUMMY_SETJMP \ >+ ({ __asm__ volatile ("" : : : \ >+ "%o0", "%o1", "%o2", "%o3", "%o4", "%o5", "%o7", \ >+ "%l0", "%l1", "%l2", "%l3", "%l4", "%l5", "%l6", "%l7", \ >+ "%i0", "%i1", "%i2", "%i3", "%i4", "%i5", "%i7"); }) >+#else >static jmp_buf dummy_setjmp_jmp_buf; >int dummy_setjmp_false = 0; >#define DUMMY_SETJMP (dummy_setjmp_false ? setjmp(dummy_setjmp_jmp_buf) : 0) >+#endif >#define ruby_longjmp(env, val) rb_jump_context(env, val) >#define ruby_setjmp(j) ((j)->status = 0, DUMMY_SETJMP, >getcontext(&(j)->context), (j)->status) >#else This patch works correctly. It passes the ruby tests correctly. Could you put this to CVS. 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. - Ville