(toppers-users 825) コンフィグチェッカーのバグいろいろ

Honda Hiroki hhonda @ ipflex.com
2003年 5月 26日 (月) 10:40:59 JST


アイピーフレックス株式会社の本田と申します。

コンフィグレーションチェッカー (2002/09/10 の cfg-1.3-snapshot.tar.gz) 
のバグらしき挙動を見つけたのでレポートします。

cpu=m68k system=dve68k で sample を無事にビルドできることを確認してから、
sample1.h の MAIN_PRIORITY を 1 に書き換えてビルドし直すと、
コンフィグレーションチェッカーが

--- TOPPERS/JSP Configuration Checker (ver 2.0) ---
  Target architecture : elf32-m68k
    Task : MAIN_TASK (id = 4)  at sample1.cfg:16
      [ Error ] Initial priority is less than minimum priority (1).
No error found in current configuration

というメッセージを出します。

これを見ると、おかしな点が 2 つあります。

(1) MAIN_PRIORITY は正当な値なのに、エラー呼ばわりする。
(2) エラー表示しておきながら最終的に No error found と言って正常終了する。

(1) については、cfg/jsp/jsp_check.cpp の check_taskblock() にて、
    if (work < minpri)  notify(...)
    if (work > maxpri)  notify(...)
と検査しているのが間違いだと思います。kernel_cfg.c と照らし合わせると、
work には「優先度 - TMIN_TPRI」が入るはずなので、
    if ((unsigned)work > maxpri-minpri)  notify(...)
という検査式が正しいと思います。

(2) については、cfg/jsp/jsp_check.cpp の body() の最後の
	if(!result)
		Exception(...).format(error_count)
で throw し忘れているバグだと思います。他にも throw し忘れと
おぼしき箇所がいっぱいあります。

------------------------------------------------

さらに、松川様のテストスイート一式をコンフィグレーションチェッカーにか
けたところ、コンフィグレーションチェッカーの検査漏れがけっこう見つかり
ました。いずれも、ソースコードを見ればすぐにわかる単純バグです。

(3) タスク例外処理属性 texatr の検査を全然していない。
(4) タスク属性 tskatr について「TA_ASM は unsupported」検査をしていない。
(5) タスクが 1 個のとき「タスクが無い」と見当はずれのメッセージを表示する。
(6) タスクが 0 個のときエラーメッセージは出るがエラー終了してくれない。
(7) セマフォ・イベントフラグ等のオブジェクトテーブルが 1 エントリのとき、
    検査をすっぽかしてしまう。
(8) メールボックスメッセージ最大優先度の TMIN_MPRI,TMAX_MPRI 範囲検査を
    していない。
(9) データキューの blksz,blkcnt が 0 でないことの確認検査をしていない。
(10) 周期起動ハンドラの cyctim が 0 でないことの確認検査をしていない。
(11) 周期起動ハンドラの cyctim,cycphs が 31bit を越えるのは unsupported、
     という確認検査をしていない。
(12) CPU 例外処理初期化テーブルのシンボル名を間違えているため、
     検査しているつもりなのに検査できていない。

====
アイピーフレックス株式会社
R&D センター
本田広樹 (hhonda @ ipflex.com)