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)