From: Albert Chin Date: 2006-03-29T07:44:47+09:00 Subject: 1.8.4 on HP-UX/IA64 We've attempted to build 1.8.4 on HP-UX 11.23/IA with GCC 3.4.3: gcc -g -O0 -fPIC -DRUBY_EXPORT -I. -I. -I/opt/TWWfsw/ncurses54/include -I/opt/TWWfsw/ncurses54/include/ncurses -I/opt/TWWfsw/libopenssl097/include -I/opt/TWWfsw/zlib11/include -I/opt/TWWfsw/tcl84/include -I/opt/TWWfsw/tk84/include -c eval.c eval.c: In function `rb_thread_save_context': eval.c:10064: error: structure has no member named `sc_ar_bsp' gmake: *** [eval.o] Error 1 The offending line: top = (VALUE*)ctx.uc_mcontext.sc_ar_bsp; The HP-UX 11.23/IA ucontext_t struct is defined as: typedef struct { __opaque128_t __mc_opaque[2976]; } __mcontext_t; typedef __mcontext_t mcontext_t; typedef struct __ucontext { __uc_misc_t __uc_misc; double __uc_reserved[__UC_PADDING]; mcontext_t __uc_mcontext; } __uc_get_ar_bsp() exists on this platform: int __uc_get_ar_bsp(const ucontext_t *ucp, uint64_t *value); Returns (in the value argument) the saved value of the AR.BSP register. By convention, this value reflects the effects of the br.call instruction used to enter a syscall or the cover instruction used in handling an interruption. To find the value that will be in AR.BSP when the next instruction is executed the caller must: 1) Call __uc_get_reason() to determine whether the context was created in a syscall or while handling an interruption. 2) Call __uc_get_cfm() to fetch the current frame marker. 3) Adjust the AR.BSP value by CFM.sol (for a syscall context) or CFM.sof (for an interruption context). VALUE is of type unsigned long though and __uc_get_ar_bsp expects a pointer to type unsigned long long. Anyone have any ideas? -- albert chin (china@thewrittenword.com)