「mold 3.0.0」リリース ─ 実装をC++からRustへ全面移行

前バージョンmold 2.42.1との互換性を維持

1:05

 mold teamは10月5日(現地時間)、高速リンカー「mold 3.0.0」をリリースした。

 「mold」は、コンパイラが生成したオブジェクトファイルを実行ファイルや共有ライブラリへリンクするオープンソースのリンカー。並列処理と効率的なデータ構造による高速なリンク処理を特徴とし、GNU ldやLLVM lldなどの代替として利用できる。

 「mold 3.0.0」は、実装をC++からRustへ全面的に書き直した初の正式版。従来のC++版は2.42.1が最終版となり、今後の3.x系列ではGNU ldとの互換性、特にリンカースクリプトへの対応を強化し、Linuxディストリビューションの既定リンカーとして採用可能な水準を目指す。

 「mold 3.0.0」のハイライトは次の通り。
〇mold 2.42.1と同じコマンドラインオプションや対象アーキテクチャーを維持
〇破損した入力ファイルに対するメモリーアクセスを境界検査するように変更
〇ビルドシステムをCMakeからCargoへ移行
〇ソースからのビルドにRust 1.95以降とCコンパイラが必要
〇並列処理ライブラリoneTBBへの依存を削除
〇静的リンク実行ファイルでバージョンスクリプトを使用した際のクラッシュを修正
〇出力ファイルを入力ファイルとしても指定した場合のクラッシュや出力破損を修正
〇「--gc-sections」が「--init」「--fini」で指定した関数を削除する問題を修正
〇部分リンク「-r」における例外処理、シンボル、再配置などの複数の問題を修正
〇再現性のない出力が生成される複数の問題を修正
〇AArch64、ARM、RISC-V、LoongArch、PowerPC、SPARC64などの再配置処理を改善
など。

 Rustへの移行後も、リンク性能はmold 2.42.1と同等とされている。開発チームはすべての対応アーキテクチャーでテストを実行したとしている。セキュリティ面では、破損した入力ファイルを処理する際の範囲外メモリ読み取りがRustの境界検査によって検出されるようになった。通常の利用では2.42.1からのドロップイン置換を想定しており、コマンドラインやビルドプロジェクト側の設定を変更せずに更新できるとしている。ただし、mold自体をソースからビルドする場合は注意が必要。

 対応する対象アーキテクチャーはx86-64、i386、ARM 32/64bitなど。「mold 3.0.0」は、Webサイトから入手できる。

(川原 龍人/びぎねっと)

[関連リンク]
リリースノート

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored