HP-UX で Ruby 1.9.1-p0 をコンパイルしようとしています。ext/pty.c に小さな変更を加えた後、多くの警告メッセージ (約 5K) が表示されますが、正常にコンパイルされます。「make test」を使用してセルフテストを実行すると、クラッシュし、次のエラーでコアダンプします。
sendig: useracc が失敗しました。0x9fffffffbf7dae00 0x00000000005000
Pid 3044 は、シグナル コンテキストの書き込みに失敗したために強制終了されました - スタック オーバーフローの可能性があります。
違法な指導
この問題をグーグルで調べたところ、不正な命令はシステムがプロセスを強制終了するために使用する単なる信号であり、問題とは関係ありません。シグナル ハンドラを呼び出すときのコンテキストの再確立に問題があるようです。gdb でコアを起動しても特に深いスタックは表示されないため、「スタック オーバーフローの可能性」も正しくないと思います。
gdb スタック バックトレースの出力は次のようになります。
#0 0xc00000000033a990:0 in __ksleep+0x30 () from /usr/lib/hpux64/libc.so.1
#1 0xc0000000001280a0:0 in __mxn_sleep+0xae0 ()
from /usr/lib/hpux64/libpthread.so.1
#2 0xc0000000000c0f90:0 in <unknown_procedure> + 0xc50 ()
from /usr/lib/hpux64/libpthread.so.1
#3 0xc0000000000c1e30:0 in pthread_cond_timedwait+0x1d0 ()
from /usr/lib/hpux64/libpthread.so.1