![]() |
LLVM is a robust system, particularly well suited for developing new mid-level language-independent analyses and optimizations. |
LLVMプロジェクトは8月18日(米国時間)、「SAFECode」技術を搭載したC/C++コンパイラとなるClang/Clang++を公開した。「SAFECode」はメモリセーフティエラーを検出する技術。Valgrindなどの類似のデバッグ/プロファイルソフトウェアと比較して次のような利点があるという。
- ダイナミックバイナリ変換を実施せず、ランタイムチェックの最適化が実施されているため、動作が高速。
- 個々のスタックとグローバルオブジェクトの境界を正確に把握しているため動作が精密。
- 個々のメモリセーフティ違反に対してより扱いやすい情報を提示するため、より優れたメモリセーフティツールとして機能する。
今回のリリースではバッファオーバーフローによって発生するポインタ参照を検出することを第一にしているものの、最終的にメインで提供されているLLVM Clang/Clang++に対してはさらに次のような機能も導入されることになると説明がある。
- 不正メモリアクセスの検出機能
- 不正free()コールの検出機能
- 未初期化ポインタ使用の検出機能
- Cスタンダードライブラリの誤使用によるメモリエラーの検出機能
リリースのタイミングから推測すると、次のLLVMメジャーリリースとなる「LLVM 3.0」に「SAFECode」の機能が導入されることになると考えられる。LLVM Clangは高速コンパイル、優れた最適化、活発な開発などを背景に採用事例を増やしており、「SAFECode」の導入はClangの普及を促進させる理由のひとつになっていくものとみられる。
なお、Valgrindは人気の高いデバッガ/プロファイルソフトウェアのひとつ。多くのプラットフォームに移植されているほか、MozillaがFirefox 9ナイトリーにおいてメモリ使用を解析するためのソフトウェアとしての活用を進めているなど、採用事例が豊富。