Tanaka Akira wrote: > In article <t9GdnaIzKMnk3RTfRVn-uw / rcn.net>, > "Adam P. Jenkins" <ajenkins / interactivesupercomputing.com> writes: > > >>Has anyone successfully run a Rails application on an Altix, or other >>ia64 machine? I'm getting a segmentation fault in gc.c. More info below. > > > I'd like to know following patch fix your problem or not. > > Index: eval.c > =================================================================== > RCS file: /src/ruby/eval.c,v > retrieving revision 1.616.2.98 > diff -u -r1.616.2.98 eval.c > --- eval.c 25 May 2005 23:09:05 -0000 1.616.2.98 > +++ eval.c 7 Jun 2005 11:02:32 -0000 > @@ -111,7 +111,27 @@ > abort(); /* ensure noreturn */ > } > #define longjmp(env, val) rb_jump_context(env, val) > -#define setjmp(j) ((j)->status = 0, getcontext(&(j)->context), (j)->status) > +#define callee_save_registers_may_be_breaked_here \ > + __asm__ volatile ("" : : : \ > + "in0", "in1", "in2", "in3", "in4", "in5", "in6", "in7", \ > + "loc0", "loc1", "loc2", "loc3", "loc4", "loc5", "loc6", "loc7", \ > + "loc8", "loc9", "loc10","loc11","loc12","loc13","loc14","loc15", \ > + "loc16","loc17","loc18","loc19","loc20","loc21","loc22","loc23", \ > + "loc24","loc25","loc26","loc27","loc28","loc29","loc30","loc31", \ > + "loc32","loc33","loc34","loc35","loc36","loc37","loc38","loc39", \ > + "loc40","loc41","loc42","loc43","loc44","loc45","loc46","loc47", \ > + "loc48","loc49","loc50","loc51","loc52","loc53","loc54","loc55", \ > + "loc56","loc57","loc58","loc59","loc60","loc61","loc62","loc63", \ > + "loc64","loc65","loc66","loc67","loc68","loc69","loc70","loc71", \ > + "loc72","loc73","loc74","loc75","loc76","loc77","loc78","loc79", \ > + "out0", "out1", "out2", "out3", "out4", "out5", "out6", "out7"); > +#define setjmp(j) ({ \ > + ucontext_t *ucp; \ > + (j)->status = 0; \ > + ucp = &(j)->context; \ > + callee_save_registers_may_be_breaked_here; \ > + getcontext(ucp); \ > + (j)->status; }) > #else > typedef jmp_buf rb_jmpbuf_t; > #ifndef setjmp > @@ -9918,8 +9938,10 @@ > { > ucontext_t ctx; > VALUE *top, *bot; > + ucontext_t *ctxp = &ctx; > > - getcontext(&ctx); > + callee_save_registers_may_be_breaked_here; > + getcontext(ctxp); > bot = (VALUE*)__libc_ia64_register_backing_store_base; > #if defined(__FreeBSD__) > top = (VALUE*)ctx.uc_mcontext.mc_special.bspstore; > > > I know the patch is very ugly, gcc&IA64 depended, and it tickle > gcc-3.3.5 optimization bug. Thank you very much! I just tried applying this patch, and now the crash does not occur. Thank you, Adam