(57)【特許請求の範囲】
【請求項１】
制御ソフトウェアを解析して、割込み要因と、当該割込み要因の発生により処理するコードの先頭アドレスから割込み関数を判定する割込み関数判定手段と、
前記制御ソフトウェアを解析して、前記割込み関数判定手段により判定された前記割込み関数がアクセスする変数のうち、書き込みアクセスする変数を少なくとも１つ含む変数を判定対象変数とし、該判定対象変数にアクセスする関数である判定対象関数が、該判定対象変数に複数回のアクセスを行う間に前記割込み関数による割込みが可能であるか否かを判定して判定結果を出力する処理を行う処理手段と、
を備えていることを特徴とするソフトウェア解析装置。
【請求項２】
前記制御ソフトウェアを解析して各関数が呼び出す関数を判定し、関数ツリー情報として保存する関数ツリー情報保存手段をさらに備えており、
前記処理手段は、前記判定対象関数の処理を解析して、前記割込み関数による割込みが可能であるか否かを判定し、前記判定対象関数の処理から、前記割込み関数による割込みが可能であるか否かを判定できない場合、前記関数ツリー情報から前記判定対象関数を呼び出す関数を判定し、該呼び出す関数の処理を解析して前記割込み関数による割込みが可能であるか否かを判定することを特徴とする請求項１に記載のソフトウェア解析装置。
【請求項３】
前記処理手段は、前記割込み関数による割込みが可能であるか否かを示す割込み制御レジスタへの設定を行う前記制御ソフトウェアの命令から、前記割込み関数による割込みが可能であるか否かを判定することを特徴とする請求項１又は２に記載のソフトウェア解析装置。
【請求項４】
前記制御レジスタの設定は、割込みマスクおよび割込みレベルの設定を含み、前記割込みレベルの設定値が、前記割込みマスクの設定値より高い値である場合に、前記処理手段は、割込みが可能であると判定することを特徴とする請求項３に記載のソフトウェア解析装置。
【請求項５】
前記制御レジスタの設定は、さらに、割込み可／不可の設定を含み、前記割込み可／不可の設定が割込み可能であることを示し、かつ、前記割込みレベルの設定値が、前記割込みマスクの設定値より高い値である場合に、前記処理手段は、割込みが可能であると判定することを特徴とする請求項４に記載のソフトウェア解析装置。
【請求項６】
前記処理手段は、前記割込み関数が書き込みアクセスする変数を前記判定対象変数と判定し、前記判定対象関数が、前記判定対象変数に読み出しアクセスし、その次に前記判定対象変数に読み出し又は書き込みアクセスするまでに、前記割込み関数による割込みが可能であるか否かを判定することを特徴とする請求項１から５のいずれか１項に記載のソフトウェア解析装置。
【請求項７】
前記処理手段は、前記割込み関数が、条件分岐のために第１の変数に読み出しアクセスを行う場合、前記第１の変数および前記第１の変数への前記読み出しアクセスの後に書き込みアクセスをする第２の変数を前記判定対象変数と判定し、前記判定対象関数が、前記第２の変数に書き込みアクセスし、その次に前記第１の変数に書き込みアクセスするまでに、前記割込み関数による割込みが可能であるか否かを判定することを特徴とする請求項１から５のいずれか１項に記載のソフトウェア解析装置。
【請求項８】
前記制御ソフトウェアを解析して、各関数がアクセスする変数および該アクセスが書き込みアクセスであるか読み出しアクセスであるかを示す情報を含む関数アクセス情報を保存する関数アクセス情報保存手段をさらに備えており、
前記処理手段は、前記判定対象変数および前記判定対象関数の判定に、前記関数アクセス情報を利用することを特徴とする請求項１から７のいずれか１項に記載のソフトウェア解析装置。
【請求項９】
請求項１から８のいずれか１項に記載のソフトウェア解析装置としてコンピュータを機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、装置に組み込む制御ソフトウェアを解析するソフトウェア解析装置に関し、より詳しくは、割込みの発生時、メモリへのアクセスに問題が発生する可能性があるか否かを解析するソフトウェア解析装置に関する。
【背景技術】
【０００２】
装置の制御ソフトウェアの実行において、割込みが発生する場合、割込みにより実行されるコードが、割り込まれた側のコードと同じ変数にアクセスする場合、問題が生じる可能性がある。以下、割込みにより実行されるコードが、割り込まれた側のコードと同じ変数にアクセスすることにより生じる問題を並行アクセスによる問題と呼ぶものとする。なお、以下の説明において、変数への書き込みアクセスとは、変数に値を設定する処理を意味し、変数への読み出しアクセスとは、変数に設定されている値を参照する処理を意味するものとする。また、変数へのアクセスとは、変数への値の設定処理と変数に設定されている値の参照処理の両方を包含する処理を意味するものとする。
【０００３】
特許文献１及び２は、この様な制御ソフトウェアのデバッグを、特別な専用のハードウェア基板上で行うための構成を開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−１２２３２９号公報
【特許文献２】特開２００８−１５２５４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１及び２に記載の方法では、特別なハードウェア基板を作成する必要がありコスト高となる。さらに、デバッグ期間中に、並行アクセスによる問題を発生させることができない可能性もある。
【０００６】
本発明は、装置の制御ソフトウェアに関し、特別なハードウェア基板を使用することなく、並行アクセスによる問題が生じる可能性があるか否かを解析するソフトウェア解析装置及びそのためのプログラムを提供するものである。
【課題を解決するための手段】
【０００７】
本発明によるソフトウェア解析装置は、制御ソフトウェアを解析して、割込み要因と、当該割込み要因の発生により処理するコードの先頭アドレスから割込み関数を判定する割込み関数判定手段と、前記制御ソフトウェアを解析して、前記割込み関数判定手段により判定された前記割込み関数がアクセスする変数のうち、書き込みアクセスする変数を少なくとも１つ含む変数を判定対象変数とし、該判定対象変数にアクセスする関数である判定対象関数が、該判定対象変数に複数回のアクセスを行う間に前記割込み関数による割込みが可能であるか否かを判定して判定結果を出力する処理を行う処理手段と、を備えていることを特徴とする。
【発明の効果】
【０００８】
特別なハードウェア基板を使用することなく、並行アクセスによる問題が生じる可能性を判定することができる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態によるソフトウェア解析処理のフローチャート。
【図２】一実施形態によるソフトウェア解析装置を実現するハードウェア構成図。
【図３】第一実施形態の説明に使用するプログラムを示す図。
【図４】図３のプログラムに対応するアセンブラ・コードを示す図。
【図５】一実施形態による制御レジスタを示す図。
【図６】一実施形態によるソフトウェア解析装置の機能ブロック図。
【図７】一実施形態による割込みベクタ・テーブルを示す図。
【図８】一実施形態における関数ツリー情報作成のフローチャート。
【図９】一実施形態における判定処理のフローチャート。
【図１０】第二実施形態の説明に使用するプログラムを示す図。
【図１１】図１０のプログラムに対応するアセンブラ・コードを示す図。
【図１２】第三実施形態の説明に使用するプログラムを示す図。
【図１３】図１２のプログラムに対応するアセンブラ・コードを示す図。
【発明を実施するための形態】
【００１０】
（第一実施形態）本発明においてソフトウェア解析装置は、コンピュータ・システム２０１上でプログラムを実行することで実現でき、そのハードウェア構成を図２に示す。図２の本体部２０２のハードディスク２０２ｃには、ソフトウェア解析装置の各機能を実現するためのプログラムが格納される。中央処理部（ＣＰＵ）２０２ａは、プログラム及び各種データを主記憶部２０２ｂにロードして実行することで、コンピュータ・システム２０１はソフトウェア解析装置として動作する。なお、表示装置２０３は、本体部２０２からの指示により画面表示を行う。また、キーボード２０４は、このコンピュータ・システム２０１にユーザの指示や文字情報を入力するためのものである。さらに、マウス２０５は、表示装置２０３上の任意の位置を指定することによりその位置に表示されていたアイコン等に応じた指示を入力するためのものである。
【００１１】
図３は、本実施形態の説明に使用するプログラムであり、図４は、図３のプログラムに対応するアセンブラ・コードを示している。図３のプログラムにおいては、関数ｍａｉｎと、割込みにより呼び出される関数ｉｎｔ＿００（以下、割込み関数と呼ぶ。）と、関数ｍａｉｎから呼び出される関数ａの３つの関数が存在する。関数ｍａｉｎのＣ１３行の処理は、割込みレベルの設定であり、Ｃ１５行の処理は、割込み状態の設定である。
【００１２】
以下、図５を用いて、割込みレベルと、割込み状態の設定について説明する。図５は、割込みに関する制御レジスタであり、ＩＬ０〜ＩＬ２ビットが割込みレベルを、ＩＬＭ０〜ＩＬＭ２とＩＥビットが割込み状態を示している。なお、ＩＬＭ０〜ＩＬＭ２ビットは割込みマスクを、ＩＥビットは割込みの可／不可を示している。本実施形態においては、ＩＥビットの設定値が０である場合は割込み不可を示し、設定値が１である場合は割込み可を示すものとする。また、割込みレベルについてはＩＬ２が、割込み状態についてはＩＬＭ２がＭＳＢであるものとする。割込みは、ＩＥビットが割込み可能を示し、かつ、割込みレベルの設定値が割込みマスクの設置値より高い（強い）値であるときのみ実行される。なお、本実施形態においては、値が小さい程、高い（強い）ものとする。つまり、割込みレベルが２で、割込みマスクが０である場合は、ＩＥビットの値に拘わらず割込みは禁止となる。一方、割込みレベルが２で、割込みマスクが３である場合は、ＩＥビットが割込み可を示している場合には割込みが可能であり、ＩＥビットが割込み不可を示している場合には割込みが不可となる。図３のＣ１３行の処理においては、割込みレベルに３を、つまり、ＩＬ２に０を、ＩＬ１に１を、ＩＬ０に０を設定している。また、Ｃ１５行の処理においては、割込み状態に７を設定している。つまり、ＩＬＭ２に０を、ＩＬＭ１に１を、ＩＬＭ０に１を、ＩＥに１を設定しており、これは、割込みマスクに値３を設定し、割込み可／不可を“割込み可”に設定するものである。
【００１３】
関数ｍａｉｎは、Ｃ１４行の処理で変数ｘに３を設定して、Ｃ１６行の処理で関数ａを呼出す。関数ａは、ｘが０であればｙを１に設定し、ｘが３であればｙを２に設定する。また、割込み関数ｉｎｔ＿００は、ｘを１だけ減ずる処理を行う。例えば、関数ｍａｉｎでｘに３を設定後、関数ａを呼び出すと、図４のＡ０４行の処理、つまり、ｘが０であるか否かを判定する処理において、ｘが０ではないためＡ０８行に移行する。その後、Ａ１１行において、ｘが３であるか否かの判定が行われる。ｘは３であるため、Ａ１２行の処理においてはＡ１６行に移行せず、Ａ１３行及びＡ１４行の処理においてｙに２が設定される。しかしながら、Ａ１２行の実行後、Ａ１４行が実行されるまでの間に、割込み関数ｉｎｔ＿００が実行されると、ｘ＝２、ｙ＝２と言う値になり、誤動作を引き起こす可能性が生じる。つまり、例えば、割込み関数が、ある変数に書き込みアクセスを行い、かつ、割込まれる側の関数が当該変数に読み出しアクセスを複数回行う場合、割込み関数の呼び出しタイミングによっては、並行アクセスによる問題が生じる。本実施形態は、その様な可能性があるか否かを解析するものである。
【００１４】
図６は、本実施形態におけるソフトウェア解析装置の機能ブロック成図であり、図１は、ソフトウェア解析装置が実行する解析処理のフローチャートである。割込関数判定部１は、Ｓ１において、制御ソフトウェアを解析して割込みベクタ・テーブルを生成し、割込み関数を判定する。割込みベクタ・テーブルとは、割込み要因と、その要因の発生により処理するコードの先頭アドレス、つまり割込み関数の対応関係を示すものである。図７に、例示的な、割込みベクタ・テーブルを示す。符号６０１で示す行のアドレスは、ハードウェア割込み要因に対応するアドレスで、このアドレスに対応する割込みが発生した場合に、符号６０２が示すラベル名に対応する処理、つまり、符号６０３で示す処理に分岐する。符号６０３は、符号６０４で示す行において、関数ｉｎｔ＿００を呼び出している。割込関数判定部１は、割込みベクタ・テーブルに基づき、割込み要因と、その割込み要因が発生した時に呼び出される関数、つまり、割込み関数についての情報を取得して記憶部５に保存する。
【００１５】
続いて、関数アクセス情報保存部２は、Ｓ２において、制御ソフトウェアの各関数について、関数がアクセスする変数と、その種別及び回数を判定する。なお、アクセス種別とは、変数に対する読み出し又は書き込みである。この処理は、アセンブラ・コードを解析することにより行うことができる。具体的には、データ転送命令や、１つの命令でデータの読み出し、値の変更及び書き込みを行う、インクリメント又はデクリメント操作といった更新命令や、変数の値により分岐する条件分岐命令等により、変数へのアクセスと、その種別を判定することができる。図４のアセンブラ・コードにおいて、Ａ０３行及びＡ０９行は、変数ｘに対する読み出しアクセスであり、Ａ０６及びＡ１４行の処理は、それぞれ、変数ｙに対する値１及び２の書き込みアクセスである。また、Ａ２３行の処理は、割込み制御レジスタの割込みレベルへの値２の書き込みアクセスであり、Ａ２５行の処理は変数ｘへの値３の書き込みアクセスであり、Ａ２６行の処理は、割込み制御レジスタの割込み状態への値７の書き込みアクセスである。さらに、Ａ３３行は、変数ｘを読み出した後、変数ｘを１だけ減ずる書き込みアクセスである。関数アクセス情報保存部２は、各関数がアクセスする変数、種別及びその回数を、関数アクセス情報として記憶部５に保存する。なお、本実施形態において、Ａ３３行に示す様なインクリメント又はデクリメント操作は書き込みアクセスとして取り扱う。
【００１６】
続いて、関数ツリー情報保存部３は、Ｓ３において、制御ソフトウェアを解析して関数の呼び出し関係を判定して、関数の呼び出し関係を示す関数ツリー情報を作成して記憶部５に保存する。図８は、関数ツリー情報の作成処理のフローチャートである。Ｓ１１において、関数ツリー情報保存部３は、制御ソフトウェアのコードから、関数を呼び出す呼出し処理を抽出する。Ｓ１２において、関数ツリー情報保存部３は、呼出しが関数名により行われているか、ポインタにより行われているかを判定する。関数名で呼び出されている場合、関数ツリー情報保存部３は、Ｓ１５において、関数と、その関数が呼び出す他の関数との関係を保存する。なお、Ｓ１２において、ポインタで呼び出しが行われている場合、関数ツリー情報保存部３は、Ｓ１３において、ポインタが関数ポインタ固定値テーブルを示しているか否かを判定する。ポインタが関数ポインタ固定値テーブルを示している場合、関数ツリー情報保存部３は、Ｓ１５において、関数ポインタ固定値テーブルから呼び出される関数名を判定して保存する。また、Ｓ１３において、ポインタが関数ポインタ固定値テーブルを示していない場合、関数ツリー情報保存部３は、Ｓ１４において、ポインタが、関数ポインタテーブルが書き込まれるメモリを示しているか否かを判定する。関数ポインタテーブルが書き込まれるメモリを示している場合、関数ツリー情報保存部３は、Ｓ１５において、メモリから呼び出される関数名を判定して保存する。以上の様に、関数と、その関数により呼び出される関数の関係を判定する。ある関数に呼び出される関数が、更に呼び出す関数を調べることにより、制御ソフトウェアの関数の呼び出し関係の全体を示すツリー情報を生成することができる。例えば、図３及び図４に示すコードから、関数ｍａｉｎが、関数ａを関数名で呼び出すことと、割込み関数ｉｎｔ＿００は、他の関数を呼び出さないことが判定される。
【００１７】
図１に戻り、処理部４は、Ｓ４において、割込み関数が書き込みアクセスする変数を判定して、判定対象変数とする。この処理は、関数アクセス情報保存部２が生成した関数アクセス情報を利用することができる。例えば、図３及び図４に示すプログラムの割込み関数ｉｎｔ＿００においては、変数ｘが判定対象変数と判定される。なお、Ｓ４の処理において、割込み関数が他の関数を呼び出す場合には、呼び出した他の関数における処理も割込み関数による処理として扱う。続いて、処理部４は、判定対象変数に複数回読み出しアクセスする関数を、Ｓ５において判定して、判定対象関数とする。例えば、図３及び図４に示すプログラムにおいて関数ａは変数ｘが０ではない場合、変数ｘに読み出しアクセスを２回行うので判定対象関数として判定される。なお、この処理も、関数アクセス情報保存部２が生成した関数アクセス情報を利用することができる。最後に、処理部４は、Ｓ５にて判定した判定対象関数それぞれについて、並行アクセスによる問題が生じる可能性を判定する。
【００１８】
図９は、処理部４が、Ｓ６において実行する判定処理のフローチャートである。まず、処理部４は、Ｓ２２において、判定対象関数及び判定対象関数が呼び出す関数の処理を順に解析する。そして、判定対象関数が判定対象変数に複数回の読み出しアクセスを行う間に、判定対象変数に書き込みアクセスする割込み関数による割込みが可能であるか否かを判定する。つまり、判定対象関数が判定対象変数に読み出しアクセスし、次に判定対象関数が判定対象変数に読み出しアクセスするまでに、当該割込み関数による割込みが可能であるか否かを判定する。なお、判定対象関数からの処理に条件分岐がある場合には、各分岐のパターンに対してその処理を解析する。複数回の読み出しアクセスの間、当該割込み関数による割込みが可能である場合、処理部４は、並行アクセスによる問題が生じる可能性が有ると判定する。一方、当該割込み関数による割込みが不可である場合、処理部４は、並行アクセスによる問題が生じる可能性が無いと判定する。問題が生じる可能性の有無を判定できた場合、処理部４は、Ｓ２３において、判定可能であると判定して、判定結果、つまり、問題が生じる可能性の有無を図示しない出力部経由で出力して処理を終了する。一方、連続する読み出しアクセスの間に当該割込み関数による割込みが可能である否かを判定できない場合、処理部４は、Ｓ２３において判定不可と判定する。この場合、処理部４は、Ｓ２４において、判定対象関数を呼び出す関数を、判定対象関数に変更してＳ２３の処理を繰り返す。なお、このとき処理部４は、関数ツリー情報保存部３が生成した関数ツリー情報に基づき判定対象関数を呼び出す関数を判定する。
【００１９】
例えば、図３及び図４のプログラムにおいて、Ｓ５の処理で関数ａが判定対象関数として判定されているため、図４のＡ０１行からＡ１８行の処理を順に実行する。Ａ０１行からＡ１８行の処理においては、変数ｘが０以外の値であると、判定対象変数である変数ｘに対する読み出しアクセスが２回続けて行われる。しかしながら、割込み制御レジスタに対する設定がなく、割込みレベル及び割込み状態共に未定義であるため、割込み関数ｉｎｔ＿００の実行が可能であるか否かが判定できない。したがって、Ｓ２３では判定不可となり、処理部４は、Ｓ２４において関数ａを呼び出す関数ｍａｉｎを判定対象関数とする。関数ｍａｉｎにおいては、割込みレベルを値２に、割込みマスクを値３に、割込み可／不可を割込み可に設定しているため、処理部４は、関数ａにおける変数ｘへの２回の読み出しアクセスの間、割込み関数ｉｎｔ＿００が実行され得ることを認識する。したがって、処理部４は、Ｓ２３において、並行アクセスによる問題が生じ得ると判定する。
【００２０】
（第二実施形態）続いて、第二実施形態について第一実施形態との相違点を中心に説明する。第一実施形態は、判定対象変数に対する複数回の読み出しアクセスの間に、判定対象変数に書き込みアクセスを行う割込み関数の実行が可能であるか否かを判定するものであった。本実施形態は、判定対象変数に対する読み出しアクセス後、書き込みアクセスを行うまでの間に、割込み関数が判定対象変数への書き込みアクセスを実行し得るか否かを判定する。図１０に本実施形態で使用するプログラムを、図１１に図１０のプログラムに対応するアセンブラ・コードを示す。
【００２１】
図１０のプログラムにおいては、関数ｍａｉｎと、割込み関数ｉｎｔ＿００と、関数ｍａｉｎから呼び出される関数ａ及び関数ｂの４つの関数が存在する。関数ｍａｉｎのＣ１０行及びＣ１３行の処理は、第一実施形態と同じく、割込みレベル及び割込み状態の設定である。Ｃ１４行の処理は、ｆｕｎｃに関数ｂのアドレス情報を書き込むものであり、Ｃ１６行のｉｆ文がＴｒｕｅであるときの処理は、ｆｕｎｃと言うＲＡＭの値を用いたポインタ呼び出しである。また、Ｃ０７行において、ｔａｂｌｅＡに関数ａを格納することが宣言されており、Ｃ１７行の処理は、ｔａｂｌｅＡを示すポインタ呼出しである。したがって、関数ツリー情報保存部３は、図８のＳ１３の処理で、関数ｍａｉｎが関数ｂを呼び出すことを判定し、図８のＳ１４の処理で、関数ｍａｉｎが関数ａを呼び出すことを判定する。
【００２２】
関数ｍａｉｎは、Ｃ１１行の処理で変数ｘに３を設定して、Ｃ１６行及びＣ１７行の処理で、変数ｘの値に応じて関数ａ又はｂを呼出す。関数ａは、ｘに２を設定し、関数ｂは、ｘに３を設定する。また、割込み関数ｉｎｔ＿００は、ｘを１だけ減ずる処理を行う。例えば、関数ｍａｉｎのｉｆ文により呼び出す関数を判定後、呼出した関数を実行するまでに、割込みが生じるものとする。この場合、割込み関数ｉｎｔ＿００が変数ｘを更新したとしても、割り込み前の変数ｘの値に基づき呼び出された関数が、さらに、その変数ｘを上書きすることになり問題が生じ得る。
【００２３】
なお、図１１のアセンブラ・コードにおいて、変数への読み出しアクセスは、Ａ２３行、Ａ２５行及びＡ０９行の処理であり、変数への書き込みアクセスは、それぞれ、Ａ０６、Ａ１２、Ａ１９、Ａ２１、Ａ２２、Ａ２４及びＡ４１行の処理である。
【００２４】
図１１のプログラムにおいて、割込み関数ｉｎｔ＿００は変数ｘに対する書き込みアクセスをＡ４１行で実行するため、図１のＳ４において判定対象変数は、変数ｘとなる。また、変数ｘに対して複数回のアクセスを行うのは関数ｍａｉｎであるため、図１のＳ５において判定対象関数は関数ｍａｉｎとなる。したがって、処理部４は、Ｓ６において、関数ｍａｉｎの処理を順に解析し、図９のｉｆ文の実行において変数ｘに対して読み出しアクセスを実行した後、関数ａ又はｂを読み出して変数ｘに対する書き込みアクセスを行うことを認識する。さらに、割込みレベルを値２に、割込みマスクを値３に、割込み可／不可を割込み可に設定しているため、処理部４は、変数ｘへ読み出しアクセスから書き込みアクセスの間に、割込み関数ｉｎｔ＿００が実行され得ることを認識する。したがって、処理部４は、並行アクセスによる問題が生じ得ると判定する。
【００２５】
（第三実施形態）続いて、第三実施形態について第一実施形態との相違点を中心に説明する。図１２に本実施形態で使用するプログラムを、図１３に図１２のプログラムに対応するアセンブラ・コードを示す。図１２のプログラムにおいては、関数ｍａｉｎと、割込み関数ｉｎｔ＿００と、関数ｍａｉｎから呼び出される関数ａの３つの関数が存在する。関数ｍａｉｎのＣ０８行及びＣ１１行の処理は、第一実施形態と同じく、割込みレベル及び割込み状態の設定である。関数ｍａｉｎは、Ｃ０９行の処理で変数ｘに３を設定し、Ｃ１０行の処理で変数ｙに１を設定する。その後、Ｃ１２行の処理で関数ａを呼び出す。関数ａは、Ｃ０３行の処理で変数ｘに値２を、Ｃ０４行の処理で変数ｙに０を設定する。また、割込み関数ｉｎｔ＿００は、ｙが０以外であれば、ｘに１を設定する処理を行う。
【００２６】
例えば、関数ｍａｉｎで変数ｘ及びｙに値３及び１を設定後、関数ａのＣ０３行とＣ０４行の処理の間に割込みが生じるものとする。この場合、割込み関数ｉｎｔ＿００が変数ｘを１に更新し、よって、変数ｘ及びｙは、それぞれ、値１及び０となり、これは、関数ａ及び割込み関数ｉｎｔ＿００のいずれの実行結果とも異なるものである。本実施形態はこの様な問題を検出するためのものである。したがって、本実施形態においては、判定対象変数は２つであり、一方が条件分岐の判定のために割込関数において読み出される第１の変数であり、他方は、その後に書き込みアクセスされる第２の変数である。なお、第２の変数は第１の変数とは異なる変数である。処理部４は、図１のＳ４において、条件分岐に使用される第１の変数に対する読み出しアクセス後に、第２の変数への書き込みアクセスを割込み関数が行う場合、その２つの変数を判定対象変数と判定する。この処理は、処理部４が割込み関数の処理を解析することにより行うことができる。また、問題が発生する可能性があるのは、第２の変数、第１の変数の順で書き込みアクセスを行う間に、割込みが発生することである。したがって、処理部４は、図１のＳ５において、関数アクセス情報に基づき、第１の変数及び第２の変数の両方に書き込みアクセスする関数を判定対象関数として選択する。
【００２７】
なお、図１２のアセンブラ・コードにおいて、変数への読み出しアクセスはＡ２３行の処理であり、変数への書き込みアクセスは、それぞれ、Ａ０４、Ａ０６、Ａ１２、Ａ１４、Ａ１６、Ａ１７及びＡ２６行の処理である。
【００２８】
図１２及び図１３のプログラムにおいて、割込み関数ｉｎｔ＿００は変数ｙに対する読み出しアクセスをＡ２３行で実行後、Ａ２６行で変数ｘに対する書き込みアクセスを実行する。したがって、図１のＳ４において、判定対象変数は、第１の変数ｙ及び第２の変数ｘとなる。また、関数ｍａｉｎは、変数ｘに対する１回の書き込みアクセスと、変数ｙに対する１回の書き込みアクセス、つまり、判定対象変数に対する計２回のアクセスを行う。さらに、関数ａも、変数ｘに対する１回の書き込みアクセスと、変数ｙに対する１回の書き込みアクセス、つまり、判定対象変数に対する計２回のアクセスを行う。したがって、図１のＳ５において、判定対象変数に複数回のアクセスを行う判定対象関数として、関数ｍａｉｎ及び関数ａが判定される。しかしながら、関数ツリー情報により、関数ｍａｉｎが関数ａを呼び出すことが分かるため、関数ｍａｉｎのみを判定対象関数とする。したがって、処理部４は、Ｓ６において、関数ｍａｉｎの処理を順に解析し、関数ａの呼出し後、変数ｘ、ｙの順で書き込みアクセスを行うことを認識する。さらに、第一実施形態と同様に、割込みレベルを値２に、割込みマスクを値３に、割込み可／不可を割込み可に設定しているため、処理部４は、並行アクセスによる問題が生じ得ると判定する。
【００２９】
上述した様に、特別なハードウェア基板を使用することなく、並行アクセスによる問題が生じる可能性を判定することができる。なお、判定対象変数は、第一及び第二実施形態においては、割込み関数が書き込みアクセスする変数であり、第三実施形態においては、条件分岐の判定のために読み出しアクセスする変数と、その後に書き込みアクセスする変数であった。しかしながら、割込み関数が変数に書き込みアクセスする場合には、並行アクセスにより問題が生じ得る。したがって、判定対象変数の選択基準は、書き込みアクセスする変数を少なくとも１つ含むものであれば、それ以外の任意の所定の選択基準を適用することができる。また、割込み関数による割込みを禁止すべき、判定対象関数による判定対象変数へのアクセス順序及びその種別についても、上記実施形態で述べた具体例以外にも種々のパターンが存在することは当業者には明らかである。
【００３０】
さらに、上述した実施形態においては、図１のＳ５の処理に置いて、判定対象関数は、判定対象変数に複数回アクセスする関数としていた。このため、関数アクセス情報保存部２は、各関数がアクセスする変数、種別及びその回数を関数アクセス情報として記憶部５に保存していた。しかしながら、判定対象変数にアクセスする関数を、その回数に拘わりなく判定対象関数として選択する形態であっても良い。この場合、処理部４は、Ｓ６の処理において、判定対象関数が判定対象変数への所定のパターンでのアクセスを行うことを判定する。さらに、関数アクセス情報保存部２を設けず、よって、判定対象関数及び判定対象変数の判定に関数アクセス情報を使用しない形態とすることもできる。この場合、処理部４は、判定対象変数及び判定対象の関数の判定を制御ソフトウェを解析することで行う。
【００３１】
（その他の実施形態）また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005848553.tif 000002
【図２】
0005848553.tif 000003
【図３】
0005848553.tif 000004
【図４】
0005848553.tif 000005
【図５】
0005848553.tif 000006
【図６】
0005848553.tif 000007
【図７】
0005848553.tif 000008
【図８】
0005848553.tif 000009
【図９】
0005848553.tif 000010
【図１０】
0005848553.tif 000011
【図１１】
0005848553.tif 000012
【図１２】
0005848553.tif 000013
【図１３】
0005848553.tif 000014