いけむランド

はてダからやってきました

Ruby on cygwin (2024/06月号)

完全に詰まったけど、そこまでをまとめておきます。

前回の報告時にレビュー中だった cygport の patch はマージされて、cygport-0.36.9 としてリリースされました。

www.mail-archive.com

これでやっと Cygwin 公式の CI でリリースできるということで早速ビルドしたら、コンパイルエラーが発生したため、ruby 本体の方に PR を出しました。

github.com

PR に書いている条件でのビルド時に debug_counter.h にある #include __FILE__ の展開結果が -ffile-prefix-map の結果を使用するために存在しない場所を参照してしまうという問題でした。

この patch をあてるようにして、テスト版として 3.3.2-2 をリリースをしてみました。

www.mail-archive.com

普通に make test まで pass するようになったため、ここからこれをベースに ruby_33 の extension をビルドしていこうと思っていたのですが、gem install が突然死するという現象が発生して、現在調査中になってます。

突然死している原因なのですが、gdb で追っかけてみたりしたところ、外部プロセスを Open3.#popen2e で起動した際にそのプロセスを待つスレッドが Cygwin の内部、おそらく cygthread が tls を触ってるあたりで SEGV を発生させているようなのですが、実行毎にスタックトレースがぶっ壊れてたりして、再現できないため、ちょっとこれ以上の調査にはさらなる根気が必要だなと思ってるところです。

[追記] そもそも環境が Aarch64 のため、cygwin1.dll より下の層 (windows) の stacktrace が取得できない模様。x86_64 の環境を用意しないと、何もかもわからなさそう。

ちなみについ先日 3.3.3 がリリースされたため、駄目元でそっちもビルドしてみましたが、やっぱり駄目でした...。