完全に詰まったけど、そこまでをまとめておきます。
前回の報告時にレビュー中だった cygport の patch はマージされて、cygport-0.36.9 としてリリースされました。
これでやっと Cygwin 公式の CI でリリースできるということで早速ビルドしたら、コンパイルエラーが発生したため、ruby 本体の方に PR を出しました。
PR に書いている条件でのビルド時に debug_counter.h
にある #include __FILE__
の展開結果が -ffile-prefix-map
の結果を使用するために存在しない場所を参照してしまうという問題でした。
この patch をあてるようにして、テスト版として 3.3.2-2 をリリースをしてみました。
普通に make test
まで pass するようになったため、ここからこれをベースに ruby_33
の extension をビルドしていこうと思っていたのですが、gem install
が突然死するという現象が発生して、現在調査中になってます。
突然死している原因なのですが、gdb で追っかけてみたりしたところ、外部プロセスを Open3.#popen2e で起動した際にそのプロセスを待つスレッドが Cygwin の内部、おそらく cygthread が tls を触ってるあたりで SEGV を発生させているようなのですが、実行毎にスタックトレースがぶっ壊れてたりして、再現できないため、ちょっとこれ以上の調査にはさらなる根気が必要だなと思ってるところです。
[追記] そもそも環境が Aarch64 のため、cygwin1.dll より下の層 (windows) の stacktrace が取得できない模様。x86_64 の環境を用意しないと、何もかもわからなさそう。
gdb で SEGV を吐いてることは確認できた...。 pic.twitter.com/HlooQ80lcp
— いけむらさん (@fd0) 2024年6月14日
gdb-dashboard の力を借りた。 pic.twitter.com/3c5R7T7LeD
— いけむらさん (@fd0) 2024年6月14日
ちなみについ先日 3.3.3 がリリースされたため、駄目元でそっちもビルドしてみましたが、やっぱり駄目でした...。