Issue #1342 has been updated by Graham Agnew.


I've been looking through the Ruby source code, specifically the Itanium specific code wrapped in "#ifdef __ia64" guards and within the assembly file ia64.s.  While I can follow the references to the Intel documentation, it seems that the Itanium code is there to find the position of the register stack.  There's also rb_ia64_flushrs in conjunction with setjmp() inside the function rb_gc_save_machine_context.

However looking at the HP documentation, it seems that setjmp an longjmp are not suitable for saving context.  Instead getcontext and setontext should be used:

http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=09083a7373f021103a7373f02110275d6e10RCRD

According to the referenced documents, this only applies when performing longjmp across threads, and I can't find any cases in the code where this is happening.  At the same time, since setcontext and getcontext seem to be fairly widely available, shouldn't the source code be switched to use those?  They seem to be more appropriate for managing context.
----------------------------------------
http://redmine.ruby-lang.org/issues/show/1342

----------------------------------------
http://redmine.ruby-lang.org