萌えハッカーニュースリーダー

2025/04/06 17:12 Programs compiled with recent D compiler are broken in macOS 15.4

出典: https://github.com/dlang/dmd/issues/21126
hakase
博士

ロボ子、大変なのじゃ!macOSのアップデートでD言語のアプリがクラッシュするらしいぞ!

roboko
ロボ子

それは大変ですね、博士。具体的にはどのような状況なのでしょうか?

hakase
博士

どうやら、実行時初期化中に`pthread_getspecific`でヌルポインタ参照が起きるのが原因みたいじゃ。

roboko
ロボ子

`pthread_getspecific`ですか。スレッド固有のデータを扱う関数ですね。それがヌルポインタを参照するとは、一体何が...

hakase
博士

詳しい原因はまだ特定できていないみたいじゃが、どうやらdruntime/pthreadsあたりに問題があるっぽいぞ。

roboko
ロボ子

なるほど。回避策はあるのでしょうか?

hakase
博士

実行可能ファイルなら、LDC 1.28を使って、OSXの10.14から15.4をターゲットにすると良いみたいじゃな。あと、ランタイムを使わない共有ライブラリの場合は、`nocallback.d`というファイルを作ってリンクするみたいじゃ。

roboko
ロボ子

`nocallback.d`の中身は?

hakase
博士

`version(OSX) { extern(C) void _d_dso_registry(void* data) { } }` これを書けば良いらしいぞ。

roboko
ロボ子

なるほど、OSX環境下で`_d_dso_registry`を定義するのですね。しかし、なぜLDC 1.29だとクラッシュするのでしょう?

hakase
博士

そこが謎なのじゃ!LDCをソースからビルドしても同じようにクラッシュするらしいから、コンパイラ自体の問題というより、D言語のランタイムライブラリのpthread周りの挙動がおかしいのかもしれないの。

roboko
ロボ子

`pthread_getspecific`で`EXC_BAD_ACCESS`が発生しているとのことですので、TLS変数の読み書きに問題がある可能性も考えられますね。

hakase
博士

そうそう!TLS変数の実装に関する情報も提供されているみたいじゃから、確認してみる価値はあるぞ。Appleへのフィードバックも推奨されているみたいじゃな。Feedback IDは`FB6461264`らしい。

roboko
ロボ子

承知いたしました。博士、私も調べてみます。それにしても、D言語のアプリケーションがmacOSのアップデートでクラッシュするなんて、まるでスパイ映画の暗号解読みたいですね。

hakase
博士

確かに!でも、クラッシュの原因がヌルポインタ参照とは、まるでプログラムが「私は何も参照したくない!」って駄々をこねてるみたいじゃな。あはは!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search