チェッカーについて

本コンフィギュレータでは、静的APIのパラメータの整合性チェックを、出来る限り kernel_cfg.c の コンパイル時までに行うように設計されています。 ただし、一部のパラメータについては、リンク解決後でなければ値を決定することができないため、 ロードモジュール生成後に、コンフィギュレータとは別に、チェッカー(以後CHK)を用いてチェックを 行う仕様になっています。

パラメータの種類
  • 自動割付け対応整数値パラメータ
    • 整数値または単一の識別子であるため、コンフィギュレーション時にチェック可能。
  • 自動割付け非対応整数値パラメータ
    • 整数値または単一の識別子であるため、コンフィギュレーション時にチェック可能。 ただし、割り込みハンドラ番号とCPU例外ハンドラ番号は、ターゲットに依存するためチェック不可。
  • プリプロセッサ定数式パラメータ
    • プリプロセス時に評価可能であるため、if指令の条件式として判定可能。 ただし、プリプロセス時に未定義の識別子は 0 に評価されるため、列挙定数等のコンパイル時に決定 される識別子の場合は、if指令解決時と実際に展開されるコードが矛盾する可能性がある。 本コンフィギュレータでは、if指令の条件式の他に、下記の一般定数式パラメータで用いる __CFG_ASSERT マクロを併用することで、チェックの精度を向上している。
  • 一般定数式パラメータ
    • 算術定数式
      • 処理系の独自拡張を除けば、算術定数式のオペランドに使用できるのは、整数定数、浮動小数点定数、 列挙定数、および sizeof 式だけであるため、 kernel_cfg.c のコンパイル時にチェック可能。 ATR, PRI, RELTIM 等の算術定数式を要求するパラメータは、 __CFG_ASSERT マクロを用いてコンパイル 時にチェックを行う。このマクロは、引数に与えられた条件式が偽に評価される場合、コンパイルエラー が発生するように設計されている。
    • アドレス定数式(±整数定数式)
      • スタンダードプロファイル仕様で NULL が要求されている場合に限り、コンフィギュレーション時に チェック可能。 それ以外はリンク後にチェッカーにより評価する必要がある。
    • その他 VP_INT 型は算術定数式またはアドレス定数式のいずれを指定すべきか特定できない。ただし、 VP_INT 型のパラメータは任意の値を指定できるため、チェックの対象にはしていない。
リンク後のチェック方法
リンク後のチェックは以下の方法で行われる。
  • 中間ファイルの生成 kernel_chk.c, kernel_chk.srec, および jsp.syms, jsp.srec を生成する。
    • kernel_chk.c
      • ターゲットに応じたクロスコンパイラの特性を調べるためのC言語コード。 バイトオーダーの判定、各型のサイズや構造体のフィールドのオフセット等を格納した UW 型の配列定義。 このファイルを生成するには、コンフィギュレータの起動時に -c または --check オプションを指定する 必要がある。
    • kernel_chk.srec
      • kernel_chk.c をコンパイルしてできるオブジェクトファイルから生成したSレコード
    • jsp.syms (実際のファイル名はユーザーが指定)
      • ロードモジュールから生成するシンボルテーブル。 nm コマンドを使用する場合、 -C オプションを指定してC言語の識別子に復元すること。
    • jsp.srec (実際のファイル名はユーザーが指定)
      • ロードモジュールのSレコード
  • チェッカーの起動
    • コマンドラインから以下のコマンドを実行する。
        $ ./chk -m jsp.syms,jsp.srec -cs kernel_chk.srec
      

Copyright © 2006 by TAKAGI Nobuhisa.
このページは Wed Apr 12 16:32:00 2006 に Doxygen によって生成されました。