(57)【要約】  【課題】  特殊な回路を用いることなく、ファームウェアの一部の範囲を能率よくトレースし得る診断装置を提供する。  【解決手段】  診断装置(10)は、トラップ命令により例外を発生する第１のモードと、命令を実行するごとに例外を発生する第２のモードを有するプロセッサ(20)によって実行されるファームウェアを診断の対象とする。診断装置は、指定された第１のアドレスの命令をトラップ命令で置き換えておいて、第１のモードでプロセッサに実行を開始させ、トラップ命令により例外が発生したときに、置き換え前の命令を例外処理としてプロセッサに実行させて、プロセッサを第２のモードに設定して実行を再開させる。その後、例外が発生するごとに実行した命令のアドレスを記録し、指定された第２のアドレスの命令が実行され、または関数もしくはサブルーチンが終了したときに、アドレスの記録を終了して、プロセッサを第１のモードに戻す。【選択図】      図１
2005301382.tif 000002
【特許請求の範囲】
【請求項１】
トラップ命令により例外を発生して例外処理を実行する第１のモードと、命令を実行するごとに例外を発生して例外処理を実行する第２のモードとを有するプロセッサによって実行されるファームウェアの診断装置において、
使用者からファームウェアの第１のアドレスと第２のアドレスを指定され、
第１のアドレスの命令を記憶しておくとともに、第１のアドレスの命令をトラップ命令で置き換えておいて、プロセッサを第１のモードに設定して実行を開始させ、
プロセッサが第１のアドレスのトラップ命令により例外を発生したときに、第１のアドレスの置き換え前の命令を例外処理としてプロセッサに実行させて、プロセッサを第２のモードに設定して実行を再開させ、
その後、プロセッサが命令を実行して例外を発生するごとに、プロセッサが実行した命令のアドレスを記録して、プロセッサを第２のモードに設定したまま実行を再開させ、
記録したアドレスが第２のアドレスになったときに、プロセッサを第１のモードに設定して実行を再開させる
ことを特徴とするファームウェア診断装置。
【請求項２】
トラップ命令により例外を発生して例外処理を実行する第１のモードと、命令を実行するごとに例外を発生して例外処理を実行する第２のモードとを有するプロセッサによって実行されるファームウェアの診断装置において、
使用者からファームウェアに含まれる関数またはサブルーチンの中のアドレスを指定され、
指定されたアドレスの命令を記憶しておくとともに、指定されたアドレスの命令をトラップ命令で置き換えておいて、プロセッサを第１のモードに設定して実行を開始させ、
プロセッサが指定されたアドレスのトラップ命令により例外を発生したときに、その時点で関数またはサブルーチンの戻り先として設定されているアドレスを記憶するとともに、指定されたアドレスの置き換え前の命令を例外処理としてプロセッサに実行させて、プロセッサを第２のモードに設定して実行を再開させ、
その後、プロセッサが命令を実行して例外を発生するごとに、プロセッサが実行した命令のアドレスを記録して、プロセッサを第２のモードに設定したまま実行を再開させ、
記録したアドレスが関数またはサブルーチンの戻り先として設定されていたアドレスになったときに、プロセッサを第１のモードに設定して実行を再開させる
ことを特徴とするファームウェア診断装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機器の制御等に用いられるプロセッサ上で動作するファームウェアの診断装置に関し、特に、診断の一部として、プロセッサが実行した命令のアドレスを順に記録する診断装置に関する。
【背景技術】
【０００２】
今日では、多くの機器がプロセッサによって制御されており、また、様々な処理がプロセッサによって行われている。特定の機器の制御や特定の処理のために用いられハードウェアに近い性質を有するプログラムはファームウェアと呼ばれ、機種や処理の種類ごとに開発する必要がある。当然、ファームウェアの動作に不具合があってはならず、ファームウェアの作成は慎重に行われる。
【０００３】
しかし、思わぬ欠陥（バグ）が存在することもあり、ファームウェアの作成後は動作の診断が不可欠である。予期せぬ動作が見つかれば、その原因となるバグの除去（デバッグ）を行うことになるが、多くの命令のうちのどれがバグの原因になっているかを見い出すのは容易でない。このため、プロセッサが実行した命令のアドレスを順に記録（トレース）することが行われている。ただし、ファームウェアの最初から最後までをトレースすると、記録量が膨大になってしまい、どの範囲にバグがあるのかが判っているときでも、記録の中からその範囲を見い出すこと自体が容易でなくなる。
【０００４】
そこで、ファームウェアの所定範囲のみをトレースしたり、所定数のアドレスのみを記録したりするようにしている。例えば、特開平５−６６９６４号には、使用者の指定したアドレスが実行された後に実行された分岐命令を所定数記録する診断装置が提案されている。この診断装置は、実行された命令のアドレスを監視するための回路と所定容量のメモリを備えており、実行された命令のアドレスを監視し続けて、使用者によって指定されたアドレスが実行された後に実行された分岐命令のアドレスを、メモリが一杯になるまで格納していく。
【特許文献１】特開平５−６６９６４号公報
【０００５】
上記公報の方法は、分岐命令のアドレスのみを記録するため、ファームウェアの実行の流れを容易に知ることができ、また、記録するアドレスを使用者が任意に指定したアドレス以降の所定数に限っているため、記録の解析が容易である。しかし、実行される命令のアドレスを監視するために、特殊な回路が必要である。しかも、ファームウェアの実行開始からアドレスの監視を行う必要があり、使用者によって指定されたアドレスが実行されるまでは記録することのないアドレスを監視することになって、アドレス記録の観点からは、記録開始までの監視は無駄である。
【０００６】
一般に、プロセッサはトラップ命令によって例外を発生して、例外処理を行う機能を有する。近年では、トラップ命令によって例外を発生する第１のモードに加え、命令の種類にかかわらず、命令を１つ実行するごとに例外を発生して、例外処理を行う第２のモードを有するプロセッサも提供されており、ファームウェアを動作させるプロセッサの大半は第２のモードを有するものとなっている。第２のモードを有するプロセッサには、例えば、ＩＢＭ社のＰｏｗｅｒＰＣシリーズ、モトローラ社の６８０００シリーズ等がある。
【０００７】
第２のモードを有するプロセッサでは、１命令ごとに例外を発生させてプロセッサの動作を停止させることができ、その間に、次に実行する命令のアドレスを知ることができる。したがって、特殊な回路を用いることなくトレースを行うことが可能である。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、プロセッサを第２のモードに設定してファームウェアを実行させると、最初から例外が発生して実行速度が低下し、トレースしようとする範囲に達するまでにも時間を要してしまう。また、その範囲のトレースが終了した後も例外が継続して発生することになり、実行の終了までに要する時間も長くなる。例外の発生による実行速度の低下は、診断に長時間を要する結果となり、また、ファームウェアのパフォーマンスの改善のために診断を行う際には、真のパフォーマンスを評価する障害となる。
【０００９】
したがって、トレースを行う範囲に限って、プロセッサを第２のモードに設定するべきである。ここで、第１のモードにあるプロセッサを第２のモードに切り換えることは、制御ポートのモード設定用端子に与える信号を変えるだけで簡単に行うことが可能である。しかし、プロセッサは第１のモードでは連続して命令を実行するため、トレースを行う範囲の最初のアドレスで確実に第１のモードから第２のモードに切り換えるためには、何らかの工夫が必要になる。しかも、モードの切り換えのために実行の流れが変わってしまっては診断を正しく行うことができなくなるので、実行の流れに変更をもたらすことのない方法を採用する必要がある。ところが、そのような方法は提案されていないのが現状である。
【００１０】
一方、トレースする範囲の最後で第２のモードから第１のモードに切り換えることは、例外によりプロセッサが停止しているため、容易である。しかしながら、トレースする範囲の最後のアドレスの命令を実行した時点で第１のモードに切り換えるようにするだけでは、第１のモードへの切り換えをできないことがある。
【００１１】
ファームウェアの多くは関数やサブルーチンを呼び出す形式で作成されており、関数やサブルーチンから他の関数やサブルーチンを呼び出すことも多い。また、１つの関数やサブルーチンを複数の関数やサブルーチンから呼び出すこともある。ところが、関数やサブルーチンを呼び出す命令は必ず実行されるとは限らず、パラメータの値によっては呼び出し命令よりも前の条件付き分岐命令が実行されて、呼び出し命令がスキップされたり、呼び出し命令に達する前に呼び出し元に戻るリターン命令が実行されたりする。
【００１２】
したがって、例えば、トレースする範囲の最後のアドレスを呼び出されると予想される関数やサブルーチンの中に設定した場合に、予想に反して、その関数やサブルーチンが呼び出されなければ、トレースする範囲の最後のアドレスの命令は実行されず、第１のモードへの切り換えがなされないことになる。このような事態が生じると、ファームウェア全体の終了までトレースを行う結果となり、トレースによる記録は、大量になって利用し難くなる。また、ファームウェア全体の終了まで例外を発生し続けることになり、長時間を要する上、パフォーマンスの評価ができなくなる。
【００１３】
本発明は、このような問題点に鑑みてなされたもので、特殊な回路を用いることなく、ファームウェアの一部の範囲を能率よくトレースし得る診断装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明では、トラップ命令により例外を発生して例外処理を実行する第１のモードと、命令を実行するごとに例外を発生して例外処理を実行する第２のモードとを有するプロセッサによって実行されるファームウェアの診断装置において、使用者からファームウェアの第１のアドレスと第２のアドレスを指定され、第１のアドレスの命令を記憶しておくとともに、第１のアドレスの命令をトラップ命令で置き換えておいて、プロセッサを第１のモードに設定して実行を開始させ、プロセッサが第１のアドレスのトラップ命令により例外を発生したときに、第１のアドレスの置き換え前の命令を例外処理としてプロセッサに実行させて、プロセッサを第２のモードに設定して実行を再開させ、その後、プロセッサが命令を実行して例外を発生するごとに、プロセッサが実行した命令のアドレスを記録して、プロセッサを第２のモードに設定したまま実行を再開させ、記録したアドレスが第２のアドレスになったときに、プロセッサを第１のモードに設定して実行を再開させるものとする。
【００１５】
この診断装置の使用者は、第１のアドレスと第２のアドレスを指定し、診断装置は、第１のアドレスの命令をトラップ命令で置き換えて、プロセッサに第１のモードでファームウェアの実行を開始させる。プロセッサは、第１のアドレスに達するまでは、例外を発生することなく、連続して命令を実行していく。第１のアドレスに達すると、そこにはトラップ命令が記されているから、プロセッサは例外を発生して動作を停止する。そこで、診断装置は、第１のアドレスの本来の命令を、例外処理としてプロセッサに実行させる。これでファームウェアの実行の流れが変わることが避けられる。診断装置は、本来の命令を実行させた後、プロセッサを第２のモードに切り換えて、命令の実行を再開させる。
【００１６】
実行を再開したプロセッサは、第２のモードになっているため、命令を１つ実行すると、例外を発生して動作を停止する。プロセッサが動作を停止すると、診断装置は、プロセッサが実行した命令のアドレスを記録する。そして、第２のモードに保ったままで、プロセッサに実行を再開させる。プロセッサによる例外の発生と診断装置によるアドレスの記録は、記録したアドレスが第２のアドレスになるまで、すなわち、プロセッサが第２のアドレスの命令を実行するまで継続される。これで、第１のアドレスから第２のアドレスまでのトレースがなされる。
【００１７】
記録したアドレスが第２のアドレスになると、診断装置は、プロセッサを第１のモードに戻して、命令の実行を再開させる。その後、プロセッサは、例外を発生することなく、連続して命令を実行していく。
【００１８】
前記目的を達成するために、本発明ではまた、トラップ命令により例外を発生して例外処理を実行する第１のモードと、命令を実行するごとに例外を発生して例外処理を実行する第２のモードとを有するプロセッサによって実行されるファームウェアの診断装置において、使用者からファームウェアに含まれる関数またはサブルーチンの中のアドレスを指定され、指定されたアドレスの命令を記憶しておくとともに、指定されたアドレスの命令をトラップ命令で置き換えておいて、プロセッサを第１のモードに設定して実行を開始させ、プロセッサが指定されたアドレスのトラップ命令により例外を発生したときに、その時点で関数またはサブルーチンの戻り先として設定されているアドレスを記憶するとともに、指定されたアドレスの置き換え前の命令を例外処理としてプロセッサに実行させて、プロセッサを第２のモードに設定して実行を再開させ、その後、プロセッサが命令を実行して例外を発生するごとに、プロセッサが実行した命令のアドレスを記録して、プロセッサを第２のモードに設定したまま実行を再開させ、記録したアドレスが関数またはサブルーチンの戻り先として設定されていたアドレスになったときに、プロセッサを第１のモードに設定して実行を再開させるものとする。
【００１９】
この診断装置の使用者は、関数またはサブルーチンの中のアドレスを指定し、診断装置は、指定されたアドレスの命令をトラップ命令で置き換えて、プロセッサに第１のモードでファームウェアの実行を開始させる。プロセッサは、指定されたアドレスに達するまでは、例外を発生することなく、連続して命令を実行していく。指定されたアドレスに達すると、そこにはトラップ命令が記されているから、プロセッサは例外を発生して動作を停止する。そこで、診断装置は、その時点での関数またはサブルーチンの戻り先のアドレスを記憶する。また、指定されたアドレスの本来の命令を、例外処理としてプロセッサに実行させる。これでファームウェアの実行の流れが変わることが避けられる。診断装置は、本来の命令を実行させた後、プロセッサを第２のモードに切り換えて、命令の実行を再開させる。
【００２０】
実行を再開したプロセッサは、第２のモードになっているため、命令を１つ実行すると、例外を発生して動作を停止する。プロセッサが動作を停止すると、診断装置は、プロセッサが実行した命令のアドレスを記録する。そして、第２のモードに保ったままで、プロセッサに実行を再開させる。プロセッサによる例外の発生と診断装置によるアドレスの記録は、記録したアドレスが記憶している関数またはサブルーチンの戻り先のアドレスになるまで、すなわち、指定されたアドレスを含んでいる関数またはサブルーチンが終了するまで継続される。これで、１つの関数またはサブルーチンの一部の範囲のトレースがなされる。
【００２１】
記録したアドレスが関数またはサブルーチンの戻り先のアドレスになると、診断装置は、プロセッサを第１のモードに戻して、命令の実行を再開させる。その後、プロセッサは、例外を発生することなく、連続して命令を実行していく。
【発明の効果】
【００２２】
本発明のファームウェア診断装置は、１命令ごとに例外を発生するというプロセッサの第２のモードを利用してトレースを行うため、特殊な回路を備えることなく、ファームウェアの一部の範囲のみをトレースすることができる。しかも、トレースを開始すべきアドレスの命令をプロセッサが実行した時点で確実にプロセッサを第１のモードから第２のモードに切り換えることができるため、トレースの開始までに長時間を要さず、ファームウェアの真のパフォーマンスの評価も容易である。特に、記録したアドレスが関数またはサブルーチンの戻り先のアドレスになったときにプロセッサを第１のモードに戻すものでは、実行の流れが明らかでないときでも、トレースを確実に終了することが可能である。したがって、記録が大量になるのが防止される上、ファームウェアの実行終了までに長時間を要することがなく、また、パフォーマンスの評価も確実に行うことができる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の実施形態について図面を参照しながら説明する。第１の実施形態のファームウェア診断装置１０、ファームウェアを実行するプロセッサ２０、および、ファームウェアを記憶するメモリ３０の構成を図１に模式的に示す。
【００２４】
プロセッサ２０は、トラップ命令によって例外を発生して、例外処理を行う第１のモードと、命令の種類にかかわらず、命令を１つ実行するごとに例外を発生して、例外処理を行う第２のモードとを有する。また、プロセッサ２０は、命令を実行するコア２１、メモリ３０への入出力を行うためのメモリポート２２、および、外部からの制御のための制御ポート２３を有する。
【００２５】
コア２１は、メモリポート２２を介して、メモリ３０のあらゆるアドレスにアクセスすることができる。制御ポート２３には、動作モードを設定するためのモード設定端子２３ａ、コア２１に動作開始の指示を与えるための動作開始端子２３ｂ、例外を発生したことを外部に通知するための例外通知端子２３ｃ、およびコア２１に例外処理実行の指示を与えるための例外実行端子２３ｄが含まれる。
【００２６】
メモリ３０は、プログラム領域３１、パラメータ領域３２、アドレススタック領域３３、アーギュメントスタック領域３４、プログラムポインタ３５、アドレスポインタ３６、アーギュメントポインタ３７、および、例外処理命令領域３８を有する。プログラム領域３１、パラメータ領域３２、アドレススタック領域３３、およびアーギュメントスタック領域３４はそれぞれ複数のアドレスより成り、プログラムポインタ３５、アドレスポインタ３６、アーギュメントポインタ３７、および例外処理命令領域３８はそれぞれ１つのアドレスのみから成る。
【００２７】
プログラム領域３１はプログラムに含まれる命令を記憶するもので、診断装置１０が診断の対象とするファームウェアの命令はこのプログラム領域３１に記憶される。パラメータ領域３２は、プログラム（ファームウェア）に含まれるパラメータを記憶する。アドレススタック領域３３は、プログラム中の関数またはサブルーチンの戻り先アドレスを記憶し、アーギュメントスタック領域３４は、関数またはサブルーチンの呼び出し元と呼び出された関数またはサブルーチンとが受け渡すパラメータである引数（アーギュメント）を記憶する。
【００２８】
プロセッサ２０のコア２１は、関数またはサブルーチンを呼び出す呼び出し命令を実行する際に、プログラム領域３１のアドレスのうち、その呼び出し命令が記されていたアドレスの次のアドレスを、戻り先アドレスとしてアドレススタック領域３３に記憶させる。戻り先アドレスを記憶するアドレスは、関数またはサブルーチンを呼び出すごとに変わる。コア２１は、また、関数またはサブルーチンの呼び出し命令を実行する際に、引数をアーギュメントスタック領域３４に記憶させる。引数を記憶するアドレスも、関数またはサブルーチンを呼び出すごとに変わる。
【００２９】
プログラムポインタ３５は、プログラム領域３１のアドレスのうち、コア２１が次に実行すべき命令のアドレスを記憶する。プログラムポインタ３５が記憶するアドレスは、通常、最も新しく実行した命令のアドレスの次のアドレスであるが、最も新しく実行した命令が分岐命令であるときは、分岐先のアドレスとなる。
【００３０】
アドレスポインタ３６は、アドレススタック領域３３のアドレスのうち、最も新しく呼び出された関数またはサブルーチンの戻り先のアドレスを記憶する。アーギュメントポインタ３７は、アーギュメントスタック領域３４のうち、最も新しく呼び出された関数またはサブルーチンと呼び出し元とが受け渡す引数のアドレスを記憶する。また、例外処理命令領域３８は、プロセッサ２０が例外処理として実行する命令を記憶する。
【００３１】
ファームウェア診断装置１０は、プロセッサ２０が実行したファームウェアの命令のアドレスを順に記録（トレース）する機能、および、プロセッサ２０によって実行されている間のファームウェアの任意のパラメータの値を調べる機能をはじめ、ファームウェアの診断に関する様々な機能を有する。ただし、本発明はファームウェアの命令のアドレスのトレースに関するものなので、ここでは、トレースの機能とそのための構成についてのみ説明し、他の機能に関する説明は省略する。
【００３２】
ファームウェア診断装置１０は、制御部１１、アドレス記録部１２、命令記憶部１３、パラメータ記憶部１４、操作部１５、表示部１６、印刷部１７、および入出力ポート１８より成る。
【００３３】
制御部１１は、ＣＰＵとそのプログラムを記したメモリを有し（不図示）、診断装置１０の動作全体を制御する。アドレス記録部１２は、トレースしたアドレス、すなわち、プロセッサ２０が実行した命令のアドレスを順に記録し保存する。命令記憶部１３は、プロセッサ２０に例外処理として実行させる命令を記憶する。パラメータ記憶部１４は、診断装置１０がトレースのために用いるパラメータを記憶する。
【００３４】
操作部１５は、使用者によって操作され、トレースに用いるパラメータの入力を受け付ける。使用者が入力するパラメータは、トレースを開始するアドレスとトレースを終了するアドレスである。以下、トレースを開始するアドレスを第１のアドレス、トレースを終了するアドレスを第２のアドレスという。使用者が入力した第１のアドレスと第２のアドレスはパラメータ記憶部１４に記憶される。
【００３５】
なお、使用者は、通常、第１のアドレスよりも大きいアドレスを第２のアドレスとして入力するが、第１のアドレスよりも小さいアドレスを第２のアドレスとして入力することもできる。これは、分岐命令により実行するアドレスが小さくなることもあり得ることを考慮したものである。
【００３６】
表示部１６は、使用者が第１、第２のアドレスを入力するための操作案内や、トレースの結果すなわちアドレス記録部１２が記録したアドレスを表示する。また、印刷部１７は、トレースの結果を印刷出力する。
【００３７】
入出力ポート１８は、プロセッサ２０の制御ポート２３への入出力と、メモリ３０への入出力を司る。制御部１１は、入出力ポート１８と制御ポート２３を介して、プロセッサ２０を制御することができる。具体的には、制御部１１は、プロセッサ２０のモードを設定し（Ａ）、停止中のプロセッサ２０に動作を開始させ（Ｂ）、プロセッサ２０が発生した例外の通知を受け（Ｃ）、また、命令を例外処理としてプロセッサ２０に実行させる（Ｄ）。
【００３８】
制御部１１は、また、入出力ポート１８を介してメモリ３０の任意のアドレスから記憶内容を読み出し、メモリ３０の任意のアドレスに任意の値を記憶させることができる。具体的には、制御部１１は、プログラム領域３１から命令を読み出し（Ｅ）、プログラム領域３１に命令を記憶させ（Ｆ）、アドレススタック領域３３から関数またはサブルーチンの戻り先アドレスを読み出し（Ｇ）、例外処理命令領域３８に例外処理の命令を記憶させる（Ｈ）。また、プログラムポインタ３５から、プログラム領域３１中の、プロセッサ２０が次に実行する命令のアドレスを読み出し（Ｊ）、アドレスポインタ３６から、アドレススタック領域３４中の、最新の戻り先アドレスを示すアドレスを読み出す（Ｋ）。
【００３９】
なお、制御部１１が、プログラム領域３１に記憶させる（Ｆ）命令はトラップ命令である。また、例外処理命令領域３８に記憶させる（Ｈ）命令は、プログラム領域３１から読み出した（Ｅ）命令である。プログラム領域３１から読み出された命令は、例外処理領域３８に書き込まれるまで、命令記憶部１３に記憶される。
【００４０】
以下、ファームウェア診断装置１０が行うトレースに関する処理について、その流れを示す図２と上述の図１を参照しながら、説明する。
【００４１】
ファームウェア診断装置１０の使用者は、診断装置１０にファームウェアのトレースを開始させる前に、操作部１５より、第１のアドレスと第２のアドレスを入力しておく（図２、ステップ＃２）。前述のように、第１のアドレスと第２のアドレスはどちらが大きくてもかまわない。
【００４２】
第１のアドレスと第２のアドレスが入力されると、制御部１１は、それらをパラメータ記憶部１４に記憶させ、プログラム領域３１中の第１のアドレスから記憶されている命令を読み出して（Ｅ、＃４）、読み出した命令を命令記憶部１３に記憶させ、また、プログラム領域３１中の第１のアドレスにトラップ命令を記憶させる（Ｆ、＃６）。つまり、第１のアドレスの命令をトラップ命令で置き換える。制御部１１は、さらに、プロセッサ２０を第１のモードに設定し（Ａ、＃８）、その後、操作部１５を介して使用者より与えられる開始指示に応じて、プロセッサ２０に動作を開始させる（Ｂ、＃１０）。
【００４３】
動作を開始したプロセッサ２０は、プログラム領域３１の最初のアドレスに記憶されている命令から、プログラムポインタ３５が示すアドレスに従って順に、プログラム領域３１中の命令を実行していく。このとき、プロセッサ２０は、第１のモードに設定されているため、第１のアドレスに達するまでは例外を発生しない。第１のアドレスの命令を実行すると、その命令はトラップ命令になっているので、プロセッサ２０は例外を発生して動作を停止する。
【００４４】
プロセッサ２０が例外を発生すると、制御部１１はそれを検知し（Ｃ、＃１２）、プログラムポインタ３５に記憶されているアドレス、すなわちプロセッサ２０が次に実行する命令のアドレスを読み出して（Ｊ、＃１６）、パラメータ記憶部１４に記憶させる。制御部１１は、また、アドレスポインタ３６に記憶されているアドレスを読み出し（Ｋ）、そのアドレスに記憶されているアドレススタック領域３３のアドレス、すなわち、最も新しく呼び出された関数またはサブルーチンの戻り先アドレスを読み出して（Ｇ、＃１８）、パラメータ記憶部１４に記憶させる。
【００４５】
制御部１１は、さらに、命令記憶部１３に記憶させておいた（トラップ命令で置き換える前の）第１のアドレスの命令を例外処理命令領域３８に記憶させ（Ｈ）、その命令を例外処理としてプロセッサ２０に実行させる（Ｄ、＃２０）。その後、制御部１１は、プロセッサ２０を第２のモードに設定し（Ａ、＃２２）、プロセッサ２０に動作を再開させる（Ｂ、＃２４）。
【００４６】
動作を再開したプロセッサ２０は、プログラムポインタ３５の指示するアドレスに従って順に、プログラム領域３１中の命令を実行する。この際、プロセッサ２０は、第２のモードに設定されているため、命令を１つ実行するごとに例外を発生する。
【００４７】
プロセッサ２０が例外を発生すると、制御部１１はそれを検知し（Ｃ、＃２６）、ステップ＃１６で読み出してパラメータ記憶部１４に記憶させたアドレスをアドレス記録部１２に記録させる（＃３０）。なお、このアドレスの命令を実行することによってステップ＃２６の例外が発生しており、このアドレスは、記録時には、既に実行された命令のアドレスとなっている。
【００４８】
その後、制御部１１は、プロセッサ２０が実行した命令のアドレスがパラメータ記憶部１４に記憶している第２のアドレスと関数またはサブルーチンの戻り先のアドレスのいずれでもなければ（＃３６、＃３８）、プログラムポインタ３５に記憶されているアドレス、すなわちプロセッサ２０が次に実行する命令のアドレスを読み出して（Ｊ、＃４０）、パラメータ記憶部１４に記憶させ、第２のモードに保ったままで、プロセッサ２０に動作を再開させる（Ｂ、＃２４）。ステップ＃２４〜＃４０を繰り返すことで、プロセッサ２０が実行した命令のアドレスが順に記録されていく。
【００４９】
一方、プロセッサ２０の実行した命令が第２のアドレスと関数またはサブルーチンの戻り先のアドレスのいずれかであれば（＃３６，＃３８）、制御部１１は、プロセッサ２０を第１のモードに設定して（Ａ、＃４２）、プロセッサ２０に動作を再開させる（Ｂ、＃４４）。
【００５０】
第１のモードに設定されて実行を再開したプロセッサ２０は、ポログラムポインタ３５が示すアドレスに従って順に、プログラム領域３１中の命令を実行していく。このとき、プロセッサ２０は、第１のモードに設定されているため、再び第１のアドレスに達しない限り、ファームウェアの終了まで（＃１４）、例外を発生することなく命令を実行する。
【００５１】
分岐命令によって処理の流れが戻り、再び第１のアドレスに達すると、プロセッサ２０はトラップ命令を実行することになって例外を発生する（＃１２）。この後、診断装置１０とプロセッサ２０は、上記の処理を再度行うことになる。なお、ファームウェアにはパラメータが所定の値のときのみに分岐する条件付き分岐命令が含まれることが多いから、プロセッサ２０が第１のアドレスのトラップ命令を複数回実行する場合でも、必ずしも無限ループには陥らない。
【００５２】
プロセッサ２０が第２のモードで命令を実行している間に、ファームウェアが終了することもある（＃２８）。また、プロセッサ２０が第２のモードで命令を実行している間に、分岐命令により処理の流れが戻って、再び第１のアドレスのトラップ命令を実行することもある。この場合のために、制御部１１は、実行した命令のアドレスをステップ＃３０でアドレス記録部１２に記録させた後、そのアドレスが第１のアドレスであるか否かを判定し（＃３２）、第１のアドレスであれば、命令記憶部１４に記憶させておいた（トラップ命令で置き換える前の）第１のアドレスの命令を例外処理命令領域３８に記憶させ（Ｈ）、その命令を例外処理としてプロセッサ２０に実行させる（Ｄ、＃３４）。
【００５３】
ファームウェアの実行終了後、制御部１１は、操作部１５を介して使用者から与えられる指示に応じて、アドレス記録部１２が記録したアドレスを、表示部１６に表示させ、あるいは、印刷部１７に印刷出力させる。
【００５４】
上述のようにしてトレースを行うファームウェア診断装置１０では、使用者が指定した第１のアドレスの命令の直後に実行される命令のアドレスから、使用者が指定した第２のアドレスまで、または、第１のアドレスを含む関数またはサブルーチンの実行が終了するまでに実行されるアドレスを記録することができる。したがって、記録量が膨大になることがない。しかも、アドレスの記録開始までは、トレースを行わない場合と同じ速度でプロセッサ２０を動作させることができて、不要な時間を要さず、ファームウェアの真のパフォーマンスの評価も容易である。
【００５５】
また、たとえ、使用者の指定した第２のアドレスが分岐命令により実行されなくても、第１のアドレスが関数またはサブルーチン内のアドレスである限り、その関数またはサブルーチンの実行が終了した時点でプロセッサ２０を第１のモードに戻すため、アドレスの記録終了後も、トレースを行わない場合と同じ速度でプロセッサ２０を動作させることができて、不要な時間を費やさない。したがって、ファームウェアのパフォーマンスを一層正しく評価することができる。
【００５６】
なお、第２のアドレスの入力を省略するようにしてもよい。この場合でも、第１のアドレスが関数またはサブルーチン内のアドレスである限り、その関数またはサブルーチンの実行が終了した時点で、確実にアドレスの記録を終了することができる。
【００５７】
第２の実施形態のファームウェア診断装置１０、ファームウェアを実行するプロセッサ２０、および、ファームウェアを記憶するメモリ３０の構成を図３に模式的に示す。本実施形態は第１の実施形態を修飾して、ファームウェアを記憶しておくために必要なメモリ３０を、ファームウェアの診断のために一層効率よく利用して、診断装置１０の構成を簡素化したものである。第１の実施形態で説明した構成要素と同一または類似の機能を有する構成要素については、同じ符号で表して、重複する説明は省略する。
【００５８】
第１の実施形態では、トレースしたアドレスを記録するアドレス記録部１２、第１のアドレスから読み出した命令を記憶する命令記憶部１３、および第１のアドレスと第２のアドレスを記憶するパラメータ記憶部１４を診断装置１０自体に備えていたが、本実施形態では、メモリ３０の記憶領域の一部をこれらの目的に使用する。診断装置１０の制御部１１の制御プログラム１１ａもメモリ３０に記憶させる。なお、診断装置１０の入出力ポート１８、および、プロセッサ２０のメモリポート２２、制御ポート２３は図示していない。
【００５９】
プロセッサ２０は、モードレジスタ２４とプログラムカウンタ２５を備えている。モードレジスタ２４はプロセッサ２０の動作モードを表すもので、プロセッサ２０は、モードレジスタ２０の値に従って、第１のモードまたは第２のモードで動作する。プログラムカウンタ２５は、前述のプログラムポインタ３５と同様に、コア２１が次に実行する命令のアドレスを記憶するものである。本実施形態では、診断装置１０は、プロセッサ２０が実行する命令のアドレスを、プロセッサ２０自体から通知される。
【００６０】
本実施形態では、診断装置１０が行うトレースに関する処理は第１の実施形態と同様であるが、トレースしたアドレス等をメモリ３０に記憶させるようにしているため、診断装置１０の構成はより簡素になっている。なお、ここではトレースの結果を表示部１６に表示するのみとしているが、前述の印刷部１７を備えて、トレース結果を印刷出力するようにしてもよい。
【図面の簡単な説明】
【００６１】
【図１】第１の実施形態のファームウェア診断装置、ファームウェアを実行するプロセッサ、およびファームウェアを記憶するメモリの構成を模式的に示す図。
【図２】上記ファームウェア診断装置のトレース処理の流れを示すフローチャート。
【図３】第２の実施形態のファームウェア診断装置、ファームウェアを実行するプロセッサ、およびファームウェアを記憶するメモリの構成を模式的に示す図。
【符号の説明】
【００６２】
１０    ファームウェア診断装置
１１    制御部
１１ａ  制御プログラム
１２    アドレス記録部
１３    命令記憶部
１４    パラメータ記憶部
１５    操作部
１６    表示部
１７    印刷部
１８    入出力ポート
２０    プロセッサ
２１    コア
２２    メモリポート
２３    制御ポート
２３ａ  モード設定端子
２３ｂ  動作開始端子
２３ｃ  例外通知端子
２３ｄ  例外実行端子
２４    モードレジスタ
２５    プログラムカウンタ
３０    メモリ
３１    プログラム領域
３２    パラメータ領域
３３    アドレススタック領域
３４    アーギュメントスタック領域
３５    プログラムポインタ
３６    アドレスポインタ
３７    アーギュメントポインタ
３８    例外処理命令領域
【図１】
2005301382.tif 000003
【図２】
2005301382.tif 000004
【図３】
2005301382.tif 000005