スタッフのブログです。個以上あるコメントは受け付けない設定になってます。)2017年03月01日SOLIDの特徴である「開発環境と実行環境の一体化」とは?(連載第二回)SOLID紹介記事の第二回目として、今回はSOLIDの特徴である「開発環境と実行環境一体化のメリット」と一体化により実現できた「アドレスサニタイザ」について、その機能や仕組みの解説も交えて紹介いたします。あれば、ソフトのコーディング、コンパイルからデバッグまで一連の作業が行える、シンプルで応用的な開発環境になっていると思います。一方で組込ソフト開発現場では、統合開発環境、コンパイラ、OS,デバッガといったツール類は、各々高機能化が進んでいるものの、その豊富な(複雑な!)機能を使いこなすためには単にツールを揃えただけでは不十分です。高機能になりすぎて、ツールの組み合わせに制約が生じてしまう等、シンプル化とは反対方向に進んでいるのかもしれません。「組込開発向けでもシンプルで気の利いた開発環境が作れないか?」シンプルな開発環境とは、実行環境を想定したOSカーネルやBSPの情報がツール間で連携し、開発作業をスムーズにアシストするものでなければいけません。それだけでは、まだ今までの延長線上です。KMCが以前から注目しているLLVM/Clangコンパイラは、プログラムの静的解析や不具合の自動検出が実現できる仕組みを備えた先進的なツールです。iPhoneアプリ開発だと、ClangコンパイラとiOSとXcodeが連携していて、このような解析機能が使えます。ところが、組み込み開発にClangコンパイラを使ったとしても、この解析機能を実現するにはユーザプログラム側に解析用のランタイムを組み込んだり、開発環境側に問題レポート機能を用意する必要があり、コンパイラだけ用意しても簡単にはこれらの機能を使う事が出来ません。この解析用のランタイムや開発環境向けに専用の機能を僕たちで作り込めば、そして、それをOS、BSP含めて一体的な開発環境として作り込めば、シンプルで先進的な開発体験を提供できるかもしれない、とあるときに気がつきました。少々大げさですが、これがツール屋に課せられた使命なのかもしれない・・・と。機能を繋ぎ合わせるだけではなく、徹底した高速応答性や、直感的に操作できるような分かりやすさにもこだわりました。SOLIDで特徴的なアドレスサニタイザってどんなもの?Clangコンパイラには、有名なアドレスサニタイザ、という機能があります。これはC言語(C++/Objective-C)プログラムにおいて、不正なメモリアクセスを、専用のハードウェアを使わず、ソフトウェアだけで検出する機能です。スタック破壊、オーバーラン、メモリリークなどを、プログラマが問題のある箇所を検討することなく、実行するだけで自動的にあぶり出し検出してくれます。問題ない隠れた不正メモリアクセスバグも、そのパスを実行すると検出します。次のようにバグを含むコードだと。i;}buf[]は10バイトの配列なのですが、ループが11回まわってしまい、隣の領域を破壊してしまっています。破壊した先が、その時点で実害がなければ、特に異常はみられずにスルーされてしまう、いわゆる"隠れたバグ"になります。アドレスサニタイザモードで実行すると、この11個目の不正なメモリアクセスを即時に検出します。今回に僕たちが用意したSOLID-IDEでは、検出時に以下のような表示になります(図をクリックして拡大してください)。今回KMCでは、SOLIDのアドレスサニタイザを実現するために、RTOS用の専用検出ランタイムの開発、問題を検出したときのIDEデバッガへのレポート表示機能などを新規に開発しました。ベアメタルやRTOS環境としては、世界で初めてClangコンパイラのアドレスサニタイザを実現できたとのでは、と思っています(たぶん、、、、です)。SOLID-IDEでアドレスサニタイザが動作する様子(youtube動画)SOLIDの一体化でアドレスサニタイザを実現このアドレスサニタイザですが、コンパイラがチェックするべき内容を決定し、専用のランタイムで検出を行い、そして専用の開発環境に問題をレポートする、ようするにOS、コンパイラ、デバッガ、IDEが一体化し連携して始めて使いやすく実現できる機能なのです。それぞれの各ツールやランタイムが以下の役割を果たしています。1.コンパイラコンパイル時にアクセス可能・不可能なメモリ領域の情報やチェックするべき箇所を生成2.IDE-ビルダーアドレスサニタイザ実行支援ランタイムライブラリや、支援memcpy関数などを自動リンク3.アドレスサニタイザ支援ランタイムライブラリチェック箇所実行時に、コンパイラが出力した情報を元にアクセス正当性をチェック違反アクセスなら、レポート4.デバッガ違反アクセス時のレポート表示などこのように、開発ツールや実行ランタイムが密接に連携することで、はじめて簡単にアドレスサニタイザを使えるようになります。これがSOLIDの目指す、開発環境と実行環境の一体化による、開発支援機能の進化、のひとつです。このアドレスサニタイザの他に、デバッグ・テスト支援機能を中心に、一体化で実現できる新しく進化した機能を色々予定しています。SOLIDは開発環境と実行環境を一体化し、それを生かしてソフトウェア開発プラットフォームとして進化を続けようと思っています。次回は、SOLID-OSとして採用したTOPPERS/ASP3の特徴や、SOLIDを構成する他のツールとどのように連携しているかなど、OSを中心に紹介する予定です。最新コメント「最新トラックバック」は提供を終了しました。(2)タグクラウドABCadbaidlAndroidARMarmv7asmbinderbionicBootbuildbuildrootbuiltinbusyboxcccacheCELFcelfjpClangcortex-a8Cortex-A9cpuinfodalvikvmDebiandebuggerdDMAelcembeddedemulatorEventexeGCCFlashfpufroyogccGDBGingerbreadgoldfishIceCreamSandwichinitinitrdinterpreterJAVAjavacjavapjitK&Rkernelkeykzm-a9-dualKZM-A9-GTkzm-ca9-01LinarolinuxLLVMloglogcatltsimingwMIPSmultiarchndkneonnetinstallnfsnon-stopobjdumppartnerPARTNER-JetportingpowermanagementprintfpropertyPyMitepythonqemuQTQTextCodecrootstockrubysdServiceSHsimdsmpTCGtuninguartubootUbuntuuclibcUNIXUSBv8vlinkwakelockwirelessx86zygote計測QRコード京都マイクロコンピュータ。