SOLID概要

組込み初! 実行時アドレスバグ自動検出機能

~不具合は現行犯で逮捕せよ!~

【第二回】アドレスバグ自動検出の仕組み

 

(第一回へ)

第二回目では、アドレスバグ自動検出の仕組みについてご紹介します。
SOLIDでは、

  • Cortex-A プロセッサのアクセス例外検出機能
  • Clangコンパイラのアドレスサニタイザ機能

の2つを利用し、更に「SOLIDツールチェーン」、「MMU設定」と「デバッガ」をシームレスに連携させることで、実行時アドレスバグ自動検出機能を実現しています。本稿では、この2つの仕組みについて、少し詳しく解説をしていきます。アドレスバグ検出の仕組みを知ることで、ユーザーの皆様にはSOLIDを使ったデバッグに対して、「こういうバグはツールに任せれば自動検出できる」という安心や信頼を実感していただけるのではないかと思います。

SOLIDには2種類の実行時アドレスバグ自動検出機能がある

Cortex-A プロセッサのアクセス例外

Cortex-AプロセッサではMMUの設定により、ページサイズ(4KB)単位でメモリのアクセス権が設定できます。
「アクセス不可」、「ライト不可」、「実行不可」といった属性を設定した領域に対して、禁止された動作が実行された場合は、プロセッサがアクセス例外を起こします。SOLIDデバッガを接続中にこの例外が発生した場合は、デバッガが例外を認識し、アドレスバグが発生したことをGUI上に表示します。

Clangコンパイラを利用したアドレスサニタイザ

SOLIDのもうひとつのアドレスバグ自動検出機能がアドレスサニタイザです。アドレスサニタイザは Google 社の研究チームがLLVM コンパイラ基盤を利用して開発し、Apple 社の統合開発環境 XCode に採用されて普及した実行時バグ検出機能です。コンパイラによる自動コード挿入(instrumentation)で不正なメモリアクセスを検出します。
以下、これら2種類の検出機能について、詳しく説明していきます。