SOLID概要

SOLID ツールチェーン

LLVM/Clang コンパイラ

SOLIDには先進的なオープンソースソフトウエアであるLLVM/Clangコンパイラが標準で付属しています。SOLID開発プラットフォームではLLVM/Clangコンパイラに加え、SOLID Ver.4 以前に付属していたGCCコンパイラの二つから選択する事が出来ます。
また、C/C++に加えRust言語にも対応しています。


LLVM/Clangコンパイラとは

SOLIDプラットフォームでは、静的解析ツール、動的解析ツール機能を豊富に備えたLLVM/Clangコンパイラを採用しています。LLVM/Clangは次世代のコンパイラとして、MacOS/iOS開発環境の標準コンパイラ、Arm向けコンパイラ、FreeBSDの標準コンパイラなど、さまざまな商用コンパイラの基礎技術として使われているオープンソースのコンパイラです。他のツールと連携して機能拡張が出来る点など、先進的なコンパイラとしての特長を備えています。


静的解析機能・構文解析

ビルド時に静的解析ツールとしてClangを使用することにより、「未初期化変数の利用」「メモリリーク(解放もれ)パスの検出」「戻り値が不定になるパスの検出」「代入されたがアクセスされない変数の検出」などが検出可能です。

なお、SOLIDの静的解析機能はC/C++文法解析の結果で不具合となるコードを判定するものであり、MISRA-Cのような「コーディング規則のチェック」ではありません。


メモリマップ表示

ELFファイル内にあるシンボル情報をもとに、変数や関数のアドレス(論理アドレス)と、サイズを分かり易く表示する機能です。
簡単な操作でシンボル名でのソートや検索ができます。


静的解析機能・関数情報の表示

コンパイラがソースコードを解析することで、関数の一覧表示、関数の呼び出し元/呼び出し先の表示や、最大スタックサイズの予測ができます。本機能はSOLID-1.3.0以降で使用できます。 詳しくはこちらを参照してください。

関数情報表示ウィンドウでは、各関数のサイズやスタックサイズなどの情報を一覧で参照できます。

 

現在の関数からスタックサイズの最大値予測も可能です。


サイズプロファイラー

ビルド後のELFファイルを使い、プログラムのコードサイズやワークメモリのサイズをコンパイル単位やセクション単位でGUIで表示・確認できます。
2つのファイル比較を使えば、バージョンアップの前後でのサイズ変更の確認にも有効です。

<hr />


動的解析機能

SOLIDでは動的解析機能の代表的なものとして、アドレスサニタイザ、メモリサニタイザ、スレッドサニタイザといったアクセス違反検出機能に重点をおいて、解析機能を盛り込んでいます。

アドレスサニタイザを例に挙げれば、バッファオーバーラン(配列)やヒープオーバーラン(malloc)の動的検出を、ユーザーがツールの詳細な設定をすることなく容易に検出出来るようにしています。動的解析機能を有効にするためには、コンパイラだけではなくRTOS側に動的解析を実現するための支援ライブラリが必要になるのですが、SOLIDにおいては必要な支援ライブラリを全て当社が開発してツールとして提供しているので、効率のよいデバッグが可能となります。


最適化機能

SOLIDでは、ソースコード(ファイル)に対する最適化だけではなく、以下のようにシステム全体の最適化機能が可能です。いずれもLLVM/Clang で対応しています。

 


品質に対する取り組み

●LLVM/Clang コンパイラの開発段階では、オランダ Solid Sand 社のコンパイラテストスイートである SupeTest Aelbert Cuyp 5.0 を使用し、品質管理を行いました。
Solid Sand社(国内代理店 富士設備工業株式会社)による当社事例の紹介(他社のサイトに移動します)

●LLVM・Clangコンパイラは、日本ノーベル株式会社の第三者検証コンパイラサービスにて品質評価を実施、問題となる要な不具合が無い事を検証いただいています。
日本ノーベル社による当社事例の紹介(他社のサイトに移動します)