(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)