(57)【特許請求の範囲】
【請求項１】
命令ストリームを処理するプロセッサを診断する方法であって、
（ｉ）前記命令ストリームからの単一命令が実行されるように、シングルステップモードにおいて実行するように前記プロセッサを制御することであって、前記プロセッサは、前記単一命令が、少なくとも１つの既定種類の命令の１つであるかどうかを判断し、データストレージ位置に種類インジケータを格納し、前記プロセッサが前記単一命令を処理した後に診断例外に応答する、前記プロセッサを制御することと、
（ｉｉ）前記データストレージ位置内に格納された前記種類インジケータにアクセスすることを含む前記診断例外の後に続く診断動作を実行することと、
（ｉｉｉａ）前記単一命令が前記既定種類の１つではなかったことを示す前記種類インジケータに応答して、次の単一命令が、前記診断例外から戻ると実行されるように、前記シングルステップモードにおける命令を実行し続けるように前記プロセッサを制御することと、
（ｉｉｉｂ）前記単一命令が前記少なくとも１つの既定種類の１つであったことを示す前記種類インジケータに応答して、前記シングルステップモードを出て、次に実行されるべき前記命令ストリーム内の命令を、後に診断例外が続く単一命令として実行することなく、実行するように前記プロセッサを制御することと、を含む、方法。
【請求項２】
前記ステップ（ｉｉｉｂ）は、前記診断例外から戻ると、前記命令ストリーム内の複数の命令を実行するように前記プロセッサを制御することを含む、請求項１に記載の方法。
【請求項３】
前記複数の命令は、前記命令ストリーム内の前記実行された単一命令に続く複数の命令を備える、請求項２に記載の方法。
【請求項４】
前記複数の命令は、前記命令ストリーム内の前記実行された単一命令に続く複数の命令であって前記単一命令を含む複数の命令を備える、請求項２に記載の方法。
【請求項５】
前記複数の命令が、少なくとも１つのブレークポイントに達するまで実行されるように、前記単一命令が、前記命令ストリーム内の前記少なくとも１つのブレークポイントを設定する前記少なくとも１つの既定種類の１つであったことを示す前記種類インジケータに応答して、もし他の例外が前記複数の命令の実行の間に受信されないならば、前記少なくとも１つのブレークポイントに達したことに応答してブレークポイント診断例外に応答する更なるステップを含む、請求項２〜４のいずれか一項に記載の方法。
【請求項６】
前記ステップ（ｉｉｉｂ）は、前記命令ストリーム内の前記実行された単一命令および少なくとも１つの後の命令をエミュレートすることと、次いで、エミュレートされた前記少なくとも１つの後の命令の後に続く前記命令ストリーム内の命令から前記シングルステップモードを開始するよう前記プロセッサを制御することと、を含む、請求項１に記載の方法。
【請求項７】
前記データストレージ位置内に格納された前記種類インジケータは、前記命令が前記既定種類の１つであったこと、または前記命令が前記既定種類の１つではなかったこと、あるいは前記命令が未知の種類のものであることを示し、前記種類インジケータにアクセスする前記ステップにおいて、前記種類インジケータが、前記命令が未知の種類のものであることを示すことが判断される場合、前記単一命令を検査し、前記単一命令が前記既定種類のものであるかを判断する追加的ステップが、実行される、請求項１〜６のいずれかに記載の方法。
【請求項８】
前記種類インジケータは２つのインジケータ値を備え、第１の値は、前記命令が、前記既定種類のものであるか、または前記既定種類のものではないかを示し、第２の値は、前記第１の値が有効であるかどうかを示し、無効である前記第２の有効値は、前記命令が前記未知の種類のものであることを示す、請求項７に記載の方法。
【請求項９】
前記種類インジケータは、応答した診断例外の種類の表示を更に備える、請求項７に記載の方法。
【請求項１０】
前記方法は、単一命令ステップ診断方法が実行されることを示す単一命令ステップ制御値を設定し、前記命令ストリーム内の単一命令が、次の診断例外に応答する前に実行されることを示すステップインジケータ値を設定する最初のステップを含む、請求項１〜９のいずれかに記載の方法。
【請求項１１】
ゼロ命令が、次の診断例外に応答する前に実行されることを示す前記ステップインジケータ値に応答して、前記種類インジケータは、前記診断例外に応答すると未知の種類に設定される、請求項７〜９のいずれか一項に従属する場合の請求項１０に記載の方法。
【請求項１２】
前記次の診断例外に応答する前の前記プロセッサのフラッシュ状態に応答して、前記種類インジケータは、前記実行された命令が前記未知の種類のものであることを示すように設定される、請求項７〜９のいずれか一項に従属する場合の請求項１０に記載の方法。
【請求項１３】
前記命令ストリーム内の少なくとも１つの後の命令が別々に実行し得るように、前記既定種類は、例外へ入るまたは例外から戻ると例外ハンドラによって実行される動作が、前記プロセッサを備える装置の状態を変更する命令の種類を含む、請求項１〜１２のいずれかに記載の方法。
【請求項１４】
前記少なくとも１つの既定種類の命令の１つは、ロック位置にアクセスする命令を含み、前記ロック位置はロック値とクリア値とのうちの１つを格納し、前記クリア値は、プロセッサが既定ストレージ位置に書き込むことができることを示し、前記ロック値は、前記ロック値を格納したプロセッサのための前記既定ストレージ位置への排他書き込みアクセスを示す、請求項１３に記載の方法。
【請求項１５】
請求項１〜１４のいずれか一項に記載の方法におけるステップを実行するために、データ処理装置によって実行されるときに前記データ処理装置を制御するコンピュータプログラムを格納するためのコンピュータプログラム製品。
【請求項１６】
命令ストリームを処理するプロセッサを解析するための診断装置であって、
前記診断装置は、
制御信号を前記プロセッサに出力するための出力、およびデータを前記プロセッサから受信するための入力と、
診断動作を実行するための診断回路と、を備え
前記診断回路は、前記命令ストリーム内の単一命令が実行され、次いで、診断例外に応答するように、前記プロセッサがシングルステップモードにおいて実行するためのものであることを示すインジケータ値を設定するために、制御信号を前記プロセッサに出力するように構成され、
前記診断回路は、前記実行された単一命令が、少なくとも１つの既定種類の命令の１つであったかどうかを示す種類インジケータを格納するためにストレージ位置にアクセスするように構成され、
前記実行された単一命令が前記既定種類の１つではなかったことを示す前記種類インジケータに応答して、次の単一命令が、前記診断例外から戻ると実行されるように、前記診断回路は、前記シングルステップモードにおける命令を実行し続けるために前記プロセッサを制御するように構成され、
前記実行された単一命令が前記少なくとも１つの既定種類の１つであったことを示す前記種類インジケータに応答して、前記診断回路は、前記シングルステップモードを出て、次に実行されるべき前記命令ストリーム内の命令を、後に診断例外が続く単一命令として実行することなく、実行するように前記プロセッサを制御するように構成される、診断装置。
【請求項１７】
前記実行された単一命令が、前記少なくとも１つの既定種類の１つであったことを示す前記種類インジケータに応答して、前記診断回路は、前記診断例外から戻ると、前記命令ストリーム内の複数の命令を実行するために、前記プロセッサを制御するように構成される、請求項１６に記載の診断装置。
【請求項１８】
前記複数の命令は、前記命令ストリームにおいて前記実行された単一命令の後に続く複数の命令を備える、請求項１７に記載の診断装置。
【請求項１９】
前記複数の命令は、前記命令ストリームにおいて前記実行された単一命令の後に続く複数の命令であって、前記単一命令を含む複数の命令を備える、請求項１７に記載の診断装置。
【請求項２０】
前記診断回路は、前記実行された命令が前記少なくとも１つの既定種類の１つであったことを示す前記種類インジケータに応答して、前記複数の命令の後に前記命令ストリーム内にブレークポイントを設定するように、構成される、請求項１７〜１９のいずれか一項に記載の診断装置。
【請求項２１】
前記診断回路は、前記命令ストリームにおける前記実行された単一命令および少なくとも１つの後の命令をエミュレートし、エミュレートされた前記少なくとも１つの後の命令に続く命令から前記シングルステップモードを開始するよう制御信号を前記プロセッサに出すように構成される、請求項１６に記載の診断装置。
【請求項２２】
前記データストレージ位置内に格納された前記種類インジケータは、前記命令が前記既定種類の１つであったこと、または前記命令が前記既定種類の１つではなかったこと、あるいは、前記命令が未知の種類のものであることを示し、前記診断回路は、前記種類が未知であることを示す前記種類インジケータに応答して、前記プロセッサに前記実行される単一命令を要求し、前記命令から前記種類を判断するように、構成される、請求項１６〜２１のいずれか一項に記載の診断装置。
【請求項２３】
前記種類インジケータは２つのインジケータ値を備え、第１の値は、前記既定種類であることまたは前記既定種類ではないことを示し、第２の有効値は、前記第１の値が有効であるかどうかを示し、無効である前記第２の有効値は、前記命令が未知の種類のものであることを示す、請求項１６〜２２のいずれか一項に記載の診断装置。
【請求項２４】
前記種類インジケータは、応答した診断例外の種類の表示を更に備える、請求項１６〜２２のいずれか一項に記載の診断装置。
【請求項２５】
命令ストリームを処理するためのプロセッサと、前記プロセッサを解析するための請求項１６〜２４のいずれか一項に記載の診断装置と、を備える、データ処理装置。
【請求項２６】
前記種類インジケータを格納するためのストレージ位置を備え、前記プロセッサは、前記命令ストリームからの前記単一命令を実行することに応答して、前記単一命令が少なくとも１つの既定種類の１つであるかどうかを判断し、前記単一命令が前記既定種類のものであるか否かを示す種類インジケータを格納するように構成される、請求項２５に記載のデータ処理装置。
【請求項２７】
前記プロセッサは、前記単一命令の１つの実行の後に前記診断例外以外の例外に応答することに応答して、前記実行された命令が未知の種類のものであることを示すために前記種類インジケータを設定するように、構成される、請求項２５または２６に記載のデータ処理装置。
【請求項２８】
前記診断装置は、単一命令ステップ診断方法を実行し、前記方法を実行するときに、前記単一命令ステップ診断方法が実行されることを示す単一命令ステップ制御値を設定し、前記命令ストリームにおける単一命令が、次の診断例外に応答する前に実行されることを示すステップインジケータ値を設定するように構成される、請求項２５〜２７のいずれか一項に記載のデータ処理装置。
【請求項２９】
前記プロセッサは、前記単一命令の１つの実行の後に応答する前記診断例外以外の例外に応答して、ゼロ命令を示す前記ステップインジケータ値を設定するように、構成され、前記例外から戻ると、前記ステップインジケータ値に応答して、全く命令が実行されず、前記プロセッサが保留になっている診断例外に応答するように、構成される、請求項２８に記載のデータ処理装置。
【請求項３０】
前記少なくとも１つの既定種類の命令の１つは、ロック位置にアクセスする命令を含み、前記ロック位置は、ロック値とクリア値とのうちの１つを格納し、前記クリア値は、プロセッサが既定ストレージ位置に書き込むことができることを示し、前記ロック値は、前記ロック値を格納したプロセッサのための前記既定ストレージ位置への排他書き込みアクセスを示す、請求項２５〜２９のいずれか一項に記載のデータ処理装置。
【請求項３１】
データを処理するためのプロセッサと、制御データを格納するための複数のストレージ位置とを備える、データ処理装置であって、
前記ストレージ位置の少なくとも１つはシングルステップモード制御値を格納し、前記データ処理装置は、各命令の実行後に診断例外に応答するように、シングルステップモードにおける命令ストリームからの前記命令を実行するように設定された前記シングルステップモード制御値に応答するよう構成され、
前記プロセッサは、前記シングルステップモード制御値が設定されるときに、前記プロセッサによって実行される前記各命令について前記命令が少なくとも１つの既定種類の１つであろうかどうかを判断し、種類インジケータを前記ストレージ位置の１つの中に格納するように構成され、前記種類インジケータは、前記命令が前記既定種類の１つであったこと、または前記命令が前記既定種類の１つではなかったこと、あるいは前記命令が未知の種類のものであることを示す、データ処理装置。
【請求項３２】
前記種類インジケータの格納装置は、２つの値用の格納装置を備え、第１の値は、前記種類が前記既定種類のものであるか否かを示し、第２の値は、前記第１の値が有効であるか否かを示し、前記未知の種類は、前記第１の値が無効であることを示す前記第２の値によって表わされる、請求項３１に記載のデータ処理装置。
【請求項３３】
前記種類インジケータは、応答した診断例外の種類の表示を更に備える、請求項３１に記載のデータ処理装置。
【請求項３４】
前記データ処理装置は、前記次の診断例外に応答する前の前記プロセッサのフラッシュ状態に応答して、前記実行された命令が前記未知の種類のものであることを示すために前記種類インジケータを設定するように、構成される、請求項３１〜３３のいずれか一項に記載のデータ処理装置。
【請求項３５】
前記ストレージ位置の１つは、１またはゼロ命令が、次の診断例外に応答する前に実行されることを示すステップインジケータ値を格納するように構成され、前記データ処理装置は、ゼロである前記ステップインジケータ値に応答して前記診断例外に応答すると、前記種類インジケータを前記未知の種類に設定するように構成される、請求項３１〜３４のいずれか一項に記載のデータ処理装置。
【請求項３６】
前記既定種類は、前記命令ストリーム内の後の命令が別々に実行され得るように、例外へ入るまたは例外から戻ると例外ハンドラによって実行される動作が、前記処理装置の状態を変更する命令の種類を含む、請求項３０〜３４のいずれか一項に記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の技術分野は、データ処理に関するものであり、特に、データ処理装置上で診断動作を実行することに関するものである。
【背景技術】
【０００２】
ハードウェア、オペレーティングシステム、アプリケーションプログラム、全体のシステム設計および同様のものの開発を支援するように、データ処理システム上の診断動作（例えば、ソフトウェアおよびハードウェアの障害確認や解析（デバッグ））を実行するために使用され得る診断機構を備えるデータ処理システムを提供することが知られている。
【０００３】
データ処理システムを解析するとき、システム上で実行される診断動作を指定する制御信号がホストからシステムに伝えられるように、解析される対象システムに接続されるホストシステム上で走るデバッグプログラムを備える外部デバッガが使用され得る。
【０００４】
外部デバッガは、外部ポート経由でその対象に接続されるデバッガを含み、更にまた、そのデバッガは、デバッグハードウェアをプログラムするために使用される。プロセッサは、診断例外とみなされるデバッグイベントが、特別なデバッグ状態に入ることを引き起こし、そのデバッグ状態において、データ処理装置は、外部デバッガによって問い合わされ制御されるように、構成される。
【０００５】
あるいは、デバッグモニタソフトウェアが、デバッグされる対象上で実行される、自己ホスト化デバッグシステムがあるかもしれない。そのような場合には、プロセッサは、デバッグイベントが、デバッグされるソフトウェアに割り込みを行いデバッグモニタソフトウェアに制御を移す診断例外を引き起こすように、構成される。有用な診断ツールは、プログラムを通してシングルステップに対してプロセッサを制御する能力である。このことは、要求があった場合、システムの状態がプロシージャの各ステップで解析されることを可能にする。シングルステップモードにおいて、プロセッサは、命令を実行し、次いで、診断例外が取られ、制御が、プロセッサの状態を解析することができるデバッグソフトウェアに伝わることになる。診断例外からの復帰が起こると、次いで、プロセッサは、次の命令を実行し、その後、次の診断例外が取られることになる。このようにして、デバッグソフトウェアは、プログラム全体を通してまたはシステムを解析する人の興味のある部分だけを通して、シングルステップに対してプロセッサを制御し得る。
【０００６】
コードを通したシングルステッピングのときに生じ得る１つの問題は、例外が命令間で取られる場合に異なる実行パスを有するコードが発生するかどうかである。このことは、異なる実行パスが無限ループを含む場合に特に困難であり得る。例えば、命令は、排他モニタを要求することを試みる。コードは、排他モニタを要求することに成功する場合には、特定ストレージ位置に排他的にアクセスでき、そこにデータを格納することができる。それゆえに、排他モニタを要求するために、現在実行されている命令ストリームが特定ストレージ位置に排他的にアクセスできることを示すように、ストレージ位置の現在値を戻すことと、排他モニタを設定することとの両方をする特別な排他ロード命令が、使用される。次いで、排他ストア命令が、そのようなストレージ位置にデータを格納するために、実行され得る。しかしながら、コードを通したシングルステッピングの場合において、排他モニタが、一旦、そのモニタを設定することによって要求されると、診断例外が取られ、この例外から戻ると、例外ハンドラが排他モニタをクリアすることになる。これは、例外が取られるときに例外ハンドラが、先に実行されていたコードに戻らなくてもよいのではなく、異なるコードに戻ることになるからであり、それゆえに、実行される次の命令ストリームがストレージ位置に排他的にアクセスできるべきではないので、排他モニタはクリアされるべきである。
【０００７】
しかしながら、排他モニタをクリアされたシングルステップにおいて、次いで、排他ストア命令に達すると、その命令は失敗し、これが排他モニタを要求するステップを引き起こし、これにより排他モニタが要求され、次いで、例外リターンによってクリアされ、その結果、シングルステップでは、排他ストア命令が繰り返して失敗することになり、プログラムは決して進行しないことになる。
【０００８】
この問題を有するコードの例が以下に与えられる。
ループ
LDREX    R5、  [R1]        ;  ロック（排他ロード）を読み取る
CMP      R5、  #0          ;  0であるかをチェックする
STREXEQ  R5、  R0、  [R1]  ;  新しい値を格納することを試みる
CMPEQ    R5、  #0          ;  格納が成功したかを検査する
BNE      ループ            ;  そうでない場合には再試行する
【０００９】
診断例外から戻ると排他モニタまたはロック位置をクリアし、ステップモードにあるときにこのコード内に無限ループを発生させる例外ハンドラに関する問題が、知られており、これらのものなどのブロックの位置を判断するために、コードを通したステッピングより前に命令をスキャンすることによって、ＰｏｗｅｒおよびＭＩＰＳアーキテクチャのためのＧＤＢにおいて対処される。それらは、ブレークポイントがこの場合において排他ストア命令後に設定されるようにコマンドが使用されるまでステップを一旦確認されると、例外はこのブロック内の命令間で取られず、ロック位置は、例外ハンドラによってクリアされない。
【００１０】
この解決策の欠点は、問題のコードを識別するために全てのコードが検査される必要があることである。このことは、診断システムが、命令ストリームの実行を制御しているオペレーティングシステムに進み、コードを解析し得るためにコードをフェッチすることをそのオペレーティングシステムに問う必要があることになるので、かなりのオーバーヘッドを有する。診断装置が処理装置から遠く離れている場合、オーバーヘッドが特に大きくなる。
【００１１】
Ｐｏｗｅｒは、（Ｐｏｗｅｒアーキテクチャにおいてトレース例外と呼ばれる）ステップ例外が、その状態へ戻ることを許可するために取られるときに、プロセッサの状態についての情報を格納するシンドロームレジスタの使用を開示する。そのシンドロームレジスタが格納する１つの情報は、排他ロード命令が実行されていることと、位置が例外を取る前にロックされることと、を示すインジケータである。この値がどのように使用されるかについての情報は無い。
【００１２】
実行パスが命令間で例外を取ることによって変更される種類のコードがある場合でさえも、シングルステッププロシージャを用いてコードを診断することができることが望ましいであろう。
【発明の概要】
【００１３】
本発明の第１の態様は、命令ストリームを処理するプロセッサを診断する方法であって、（ｉ）命令ストリームからの単一命令が実行されるように、シングルステップモードにおいて実行するようにプロセッサを制御することであって、プロセッサは、単一命令が少なくとも１つの既定種類の命令の１つであるかどうかを判断し、データストレージ位置に種類インジケータを格納し、診断例外は、プロセッサが単一命令を処理した後に取られる、当該プロセッサを制御することと、（ｉｉ）データストレージ位置に格納された種類インジケータにアクセスすることを含む診断例外の後に続く診断動作を実行することと、（ｉｉｉａ）単一命令が既定種類の１つではなかったことを示す種類インジケータに応答して、次の単一命令が、例外から戻ると実行されるように、シングルステップモードにおける命令を実行し続けるようにプロセッサを制御することと、（ｉｉｉｂ）単一命令が、少なくとも１つの既定種類の１つであったことを示す種類インジケータに応答して、シングルステップモードを出て、後に診断例外が続く単一命令として命令ストリーム内の次の命令を実行しないようプロセッサを制御することと、を含む方法を提供する。
【００１４】
本発明は、コードを通したシングルステッピングの際に問題が生じ得ることと、いくつかの場合には、シングルステッピングが適切ではないところを判断し、シングルステッピングを抑制することは有利であり得ることとを認識する。例えば、命令ストリームが、ストリーム内の後の命令によって取られる実行パスが命令間で例外を取ることによって変更される命令を含む場合には、シングルステッピングは、コードのその部分の実行を解析する適切な手法ではないことになり、抑制されるべきである。本発明はまた、これが特定の問題であり得ることも、例外を取ることが無限ループに入るコードをトリガーする場合には、認識する。本発明は、実行される命令が既定種類のものであるか否かを判断し、もしそうであった場合、シングルステッピングを続けるのではなく、異なるプロシージャを実行することによって、上記問題に対処する。多くの場合において、命令が既定種類のものであるか否かは実行の間に判断され得るし、シングルステッピングは、必要に応じて抑制され得る。
【００１５】
いくつかの実施形態では、ステップ（ｉｉｉｂ）は、例外から戻ると命令ストリーム内の複数の命令を実行するようプロセッサを制御することを含む。
【００１６】
実行パスを変更する命令間の例外の問題に対処するために、複数の命令が、例外が発生することなく、全て順次実行されるように、複数の命令についてシングルステップモードを抑制することが適切であろう。順次実行される命令の数は、コード次第で選択され得るし、シングルステップモードは、そのコードに適した命令ストリーム内のポイントに戻され得る。
【００１７】
いくつかの実施形態では、複数の命令は、命令ストリームにおける実行された単一命令の後に続く複数の命令を備える。
【００１８】
例外から戻ると実行される複数の命令は、命令ストリームにおける実行された単一命令の後に続く命令であってもよい。あるいは、実行された命令が、いくつかの次の命令と共に再度実行されてもよい。後者は、この命令を再実行することが可能であることを判断した場合にのみ可能である。いくつかの場合では、これは不可能であり得る。しかしながら、それが可能である場合、その後に例外が続かないで命令が再度実行されることは、有利であろう。
【００１９】
いくつかの実施形態では、単一命令が少なくとも１つの既定種類の１つであったことを示すその種類インジケータに応答して、複数の命令が、少なくとも１つのブレークポイントに達するまで実行されるように、命令ストリーム内に少なくとも１つのブレークポイントを設定し、少なくとも１つのブレークポイントに達することに応答して、ブレークポイント診断例外を取る更なるステップがある。既定種類の命令が検出される場合には、いくつかの実施形態では、ブレークポイントが、既定種類の命令の次のコード内のポイントに設定され得る。次いで、シングルステップモードは中断され、命令はブレークポイントに達するまで実行され、その結果、ブレークポイント診断例外が取られる。このことに応答して、プロセッサは、適切な場合、シングルステップモードに戻ってもよいし、あるいは、更なるブレークポイントが設定されてもよいし、または、検査されるコードの終了に達していてもよい。
【００２０】
いくつかの実施形態では、ステップ（ｉｉｉｂ）は、命令ストリーム内の実行された単一命令および少なくとも１つの後の命令をエミュレートすることと、次いで、エミュレートされた少なくとも１つの後の命令の次の命令ストリームにおける命令からシングルステップモードを開始するようプロセッサを制御することと、を含む。
【００２１】
いくつかの実施形態では、命令を実行するのではなくて、命令は、例えば診断装置によってエミュレートされてもよく、これらのエミュレートされた命令が一旦実行されると、プロセッサは、命令ストリーム内の適切な命令からシングルステップモードを再開するよう制御され得る。シングルステップモードが、各命令間で取られた診断例外が、命令ストリームが進む様式を変えない命令から再開するように、エミュレートされた命令は、選択されることになる。
【００２２】
いくつかの実施形態では、データストレージ位置内に格納された種類インジケータは、命令が既定種類の１つであったこと、または命令が既定種類の１つではなかったこと、あるいは、命令が未知の種類のものであることを示し、種類インジケータにアクセスするステップにおいて、種類インジケータは、その種類が未知のものであることを示すことが判断された場合に単一命令を検査し、単一命令が、既定種類のものであるかを判断する追加的ステップが実行される。
【００２３】
種類インジケータは、命令が既定種類のものであるか否かを示し得る、命令が未知である場合、その命令が既定種類のものであるか否かも示し得る。後者の場合において、本方法は、命令がどの種類かを判断するために命令を検査する。このことは、命令が解析され得るように、命令がフェッチされることが要求され得る。そのようなステップは、そのことと関連付けられたレイテンシオーバーヘッドを有するが、未知の種類が示されることになるのはわずかな場合だけであろうし、それゆえに、このことは、全体の診断方法を過度に実行するためのオーバーヘッドを増加させないであろう。
【００２４】
いくつかの実施形態では、種類インジケータは２つのインジケータ値を備え、第１の値は、命令が既定種類のものであるか、または既定種類のものではないかを示し、第２の有効値は、第１の値が有効であるかどうかを示し、無効である第２の有効値は、命令が未知の種類のものであることを示す。
【００２５】
種類の表示は、２つの値、または２つのビットを用いて行われてもよく、一方が種類を示し、有効ビットである他方が、種類ビットが無効、すなわち、種類が未知である場合を示す。このことは、種類値がもはや信頼され得ないことを意味する状況が生じるとき、有効ビットは単に無効に設定され得るので、その値を表わす便利な手法であり得る。
【００２６】
他の実施形態では、種類の表示は単一値であってもよい。この値は、いくつかの実施形態では、取られた診断例外の種類の表示を更に含んでもよい。
【００２７】
例えば、表示は、取られたブレークポイントまたは停止要求などの診断例外の理由を示してもよい。
【００２８】
いくつかの実施形態では、次の診断例外を取る前のプロセッサのフラッシュ状態に応答して、種類インジケータは、実行された命令が未知の種類のものであることを示すように設定される。
【００２９】
次の診断例外を取る前にプロセッサの状態がフラッシュされる場合には、命令種類は未知に設定されるべきであり、そのことは、いくつかの実施形態では、有効ビットを無効に設定することによって行われ得る。状態をフラッシュすることは、パイプライン化されたプロセッサ内のパイプラインをフラッシュすることに応答して、あるいは、フラッシュ命令に応答して、起こり得る。
【００３０】
いくつかの実施形態では、その方法は、単一命令ステップ診断方法が実行されることを示す単一命令ステップ制御値を設定し、命令ストリーム内の単一命令が次の診断例外が取られる前に実行されることを示すステップインジケータ値を設定する最初のステップを含む。
【００３１】
シングルステップモードは、格納された制御値によって示され得、この制御値が設定されるときに、プロセッサが、シングルステップモードにおいて動作していることと、各命令が実行された後に、診断例外を取るべきであることとを知っているように、示され得る。また、１つのステップが実行されることを示す例えば１などの１つの値に設定されるステップインジケータ値があってもよく、命令が処理されている場合、それは、別の値、例えばゼロに設定され、次の診断例外が取られる前に更なる命令が実行されないことを示す。
【００３２】
いくつかの実施形態では、次の診断例外を取る前にゼロ命令が実行されることを示すステップインジケータ値に応答して、種類インジケータは、次の診断例外を取ると、未知の種類に設定される。
【００３３】
ステップインジケータ値は、診断例外ではない例外が、シングルステップモードの間に取られている場合、有用であり得る。そのような場合には、ステップインジケータ内の値は、例外から戻ると、命令が実行されるべきか、または診断例外が即時に取られるべきかを示す。その上、実行されるゼロ命令を示すことが設定される場合には、これは、命令が実行された後ではあるが、後の診断例外が取られる前に、例外が取られていることを示し、この場合において、例外を取ることが種類インジケータを変更している場合があるので、命令の種類が未知に設定される場合に有利である。
【００３４】
既定種類の命令は、多くのことであり得るが、いくつかの実施形態では、少なくとも１つの既定種類の命令の１つは、命令の後に続く例外を実行することが、命令ストリーム内の少なくとも１つの後の命令を別々に実行させ得る命令の種類を含む。特に、命令ストリーム内の後の命令が別々に実行し得るように、その既定種類は、診断例外へ入るまたは診断例外から戻ると、例外ハンドラによって実行される動作が、プロセッサを備える装置の状態を変更する命令の種類を備える。そのような命令は、シングルステップモードにおける解析に適さない。
【００３５】
例外が元の命令ストリームの実行のパスを変更する命令は、シングルステップモードにおける解析に適さず、それゆえに、これらの命令がどれであるかを判断し、次いで、シングルステップモードを抑制し得る診断方法は、有利である。
【００３６】
いくつかの実施形態では、少なくとも１つの既定種類の命令の１つは、ロック位置にアクセスする命令を備え、ロック位置は、ロック値とクリア値とのうちの１つを格納し、クリア値は、プロセッサが既定ストレージ位置に書き込み得ることを示し、ロック値は、ロック値を格納したプロセッサのための既定ストレージ位置への排他書き込みアクセスを示す。
【００３７】
命令ストリームの処理の間に例外を取る場合、その例外から戻ると、プロセッサは、その命令ストリームが割り込まれたポイントで実行を再開しなくてもよいが、異なるポイントで実行することを開始してもよく、例えば、異なるアプリケーションからの命令を実行することを開始してもよい。それゆえに、ロック位置があり、そのロック位置において、格納されたロック値が、既定ストレージ位置がロックされたことを示し、そのアプリケーションからの既定アドレスへの排他ストアアクセスによってだけ書き込まれ得る場合、例外からの復帰は、アプリケーション内の同じポイントまでではない可能性があり、次いで、ロック値は、実行される次の命令に適さないであろうから、ロック値は、その例外から戻るとクリアされる。このことは、例外が各命令間に生じるステップモードに問題を引き起こし、それゆえに、この種類の命令が、ステップモードから出させる既定種類の１つである場合に有利である。
【００３８】
本発明の第２の態様は、データ処理装置によって実行されるときに、本発明の第１の態様に係る方法におけるステップを実行するように、データ処理装置を制御するコンピュータプログラムを格納するためのコンピュータプログラム製品を提供する。
【００３９】
本発明の第３の態様は、命令ストリームを処理するプロセッサを解析するための診断装置であって、制御信号をプロセッサに出力するための出力、およびプロセッサからデータを受信するための入力と、診断動作を実行するための診断回路と、を備え、命令ストリーム内の単一命令が実行され、次いで、診断例外が取られるように、診断回路は、プロセッサがシングルステップモードにおいて動作するためのものであることを示すインジケータ値を設定するために、制御信号をプロセッサに出力するように構成され、診断回路は、実行された単一命令が少なくとも１つの既定種類の命令の１つであったかどうかを示す種類インジケータを格納するためにストレージ位置にアクセスするよう構成され、実行された単一命令が既定種類の１つではなかったことを示す種類インジケータに応答して、診断回路は、例外から戻ると次の単一命令が実行されるように、シングルステップモードにおける命令を実行し続けるために、プロセッサを制御するよう構成され、実行された単一命令が少なくとも１つの既定種類の１つであったことを示す種類インジケータに応答して、診断回路は、シングルステップモードを出て、後に例外が続く単一命令として命令ストリーム内の次の命令を実行しないように、プロセッサを制御するよう構成される、診断装置を提供する。
【００４０】
本発明の第４の態様は、命令ストリームを処理するためのプロセッサと、プロセッサを解析するための本発明の第３の態様に係る診断装置と、を備える、データ処理装置を提供する。
【００４１】
本発明の第５の態様は、データを処理するためのプロセッサと制御データを格納するための複数のストレージ位置とを備えるデータ処理装置であって、ストレージ位置の少なくとも１つは、シングルステップモード制御値を格納し、当該データ処理装置は、診断例外が、命令のそれぞれの実行後に取られるように、シングルステップモードにおける命令ストリームからの命令を実行するように設定されたシングルステップモード制御値に応答するように構成され、プロセッサは、シングルステップモード制御値が設定されるときに、プロセッサによって実行された各命令についてその命令が少なくとも１つの既定種類の１つであるかどうかを判断し、ストレージ位置の１つの中に種類インジケータを格納するように構成され、種類インジケータは、その命令が既定種類の１つであったこと、またはその命令が既定種類の１つではなかったこと、あるいはその命令が未知の種類のものであることを示す、データ処理装置を提供する。
【００４２】
データ処理装置がシングルステップモードにおいて実行するとき、命令は１つずつ実行され、このモードにおける全ての命令の実行後に、診断例外が取られ、これにより、処理装置の状態が解析され得る。診断例外は、別の例外が、命令の実行の間に受信され得、これは最初に取られ得るという点で、命令の実行後に即時に取られなくてもよいことが留意されるべきである。しかしながら、この例外から戻ると、診断例外は、命令ストリーム内の次の命令が実行される前に取られることになる。発明のこの態様では、プロセッサは、実行される各単一命令についてその命令が既定種類のものであるか否かを判断し、その命令が既定種類のものである場合、その命令が既定種類のものではない場合、あるいはその種類が未知である場合を示す種類インジケータを格納する。
【００４３】
いくつかの実施形態では、種類インジケータ格納装置は、２つの値のための格納装置を備え、第１の値は、種類が既定種類のものであるか否かを示し、第２の値は、第１の値が有効であるか否かを示し、未知の種類は、第１の値が無効であることを示す第２の値によって表わされる。
【００４４】
種類情報を格納する便利な手法は、２つの値を用いることであり、第１の値は種類を示し、第２の値は、第１の値が有効であるか否か、すなわち、その種類が既知または未知であるかを示す。値は、２つの値の１つをそれぞれ有することができるので、それらの値は、単一ビットによってそれぞれ表わされ得る。
【００４５】
他の実施形態では、種類情報は単一値であり、いくつかの実施形態では、取られる診断例外の種類の表示を更に備える。例えば、その表示は、診断例外の理由を示してもよく、それゆえに、これは、診断例外が、既定種類の命令のソフトウェアステップ、既定種類のものではない命令のソフトウェアステップ、または、例えば取られたブレークポイントもしくは停止要求などのいくつかの他のデバッグイベントに起因することであり得る。
【００４６】
いくつかの実施形態では、データ処理装置は、次の診断例外を取る前のプロセッサのフラッシュ状態に応答して、実行された命令が未知の種類のものであることを示すよう種類インジケータを設定するように、構成される。
【００４７】
一般に、命令を実行するとき、プロセッサは、その命令が既定種類のものであるか否かを判断することができ、この情報を格納することができる。しかしながら、一定の状況では、プロセッサの状態は、フラッシュされるであろうし、この情報は失われるであろう。それゆえに、そのような状況において、種類インジケータが未知に設定され、そのため、これが認識されることは重要である。状態のフラッシュは、例えば、実行される明示的なフラッシュ命令に応答してまたは例外から戻ると、起こる。
【００４８】
いくつかの実施形態では、ストレージ位置の１つは、１またはゼロ命令が、次の診断例外を取る前に実行されることを示すステップインジケータ値を格納するよう構成され、データ処理装置は、ステップインジケータ値がゼロであることに応答して診断例外を取ると、種類インジケータを未知の種類に設定するよう構成される。
【００４９】
データ処理装置は、いくつかの実施形態では、例外から戻ると、ステップインジケータ値がゼロであることに応答して命令が実行されないように、また保留の診断例外が取られるように、診断例外が取られる前に、単一命令の１つの実行の後に取られる例外に応答して、ステップインジケータ値をゼロに設定するように、構成される。この時点では、種類インジケータは、他の命令が、他の例外に応答して実行されているかもしれないので、未知に設定されるべきであり、それゆえに、この値は、ステップモードにおいて実行された前の単一命令をもはや示さない可能性がある。
【００５０】
いくつかの実施形態では、既定種類は、命令ストリーム内の後の命令が別々に実行されてもよいように、診断例外へ入るまたは診断例外から戻ると例外ハンドラによって実行される動作が処理装置の状態を変更する命令の種類を備える。
【００５１】
本発明の第６の態様は、データ処理装置上で実行するコンピュータプログラムによって提供される仮想マシンを提供し、その仮想マシンは、本発明の第４または第５の態様のデータ処理装置に係る命令実行環境を提供する。
本発明は、ほんの一例として、添付の図面に例示されるように本発明の実施形態を参照して、更に記載される。
【図面の簡単な説明】
【００５２】
【図１】本発明の実施形態に係るデータ処理装置に接続された遠隔診断装置を備えるデータ処理装置を示す。
【図２】本発明の実施形態に係る診断回路を組み込むデータ処理装置を示す。
【図３】本発明の実施形態に係るシングルステップ診断モードにおいて実行する命令ストリーム内の排他ロード命令の処理を示す。
【図４】割り込みが排他ロード命令後に生じるシングルステップ診断モードにおける命令ストリームの処理を示す。
【図５】割り込みが排他ロード命令の実行前に生じるシングルステップ診断モードにおける命令ストリームの処理を示す。
【図６】シングルステップ診断モードにおいて動作するプロセッサの可能な状態を示す。
【図７ａ】本発明の実施形態に係る方法におけるステップを例示するフロー図を示す。
【図７ｂ】本発明の更なる実施形態に係る方法におけるステップを例示するフロー図を示す。
【図７ｃ】ステップを踏まれる命令の種類と共にデバッグイベントの理由を示すインジケータについての可能な値の表を示す。
【図８】本発明の実施形態の仮想マシンインプリメンテーションを示す。
【発明を実施するための形態】
【００５３】
図１は、命令ストリームを処理するためのプロセッサ２０を有するデータ処理装置１０を示す。プロセッサは、命令キャッシュ２２からの命令をフェッチするためのフェッチユニット２０ａと、命令を復号するための復号ユニット２０ｂと、復号された命令を実行するための実行ユニット２０ｃと、を有するパイプラインを備える。データ処理装置１０はまた、処理の間に使用されたデータを格納するためのレジスタを備えるレジスタバンク３０を有する。これらは、プロセッサの現在の状態を格納する状態レジスタと、制御値を格納するための少なくとも１つの制御レジスタと、を含む。状態レジスタは、例えば割り込みがなされ、プロセッサの現在の状態が格納される必要があり、そのため、割り込みから戻るとその現在の状態が復元され得る場合に、必要とされ得る。
【００５４】
データ処理装置１０はまた、診断回路４２を含む診断装置４０と接続する外部ポート１２を有する。診断回路４２は、データ処理装置の動作を解析するために使用され、それゆえに、プロセッサ２０の実行を制御するための信号を送信することができ、解析のためにプロセッサからのデータ出力を受信することができる。
【００５５】
この実施形態では、診断回路４２は、その診断回路が命令ストリームのプロセッサの実行を解析することを望む場合、シングルステップモードにおいて動作するために、プロセッサ２０を制御するよう構成される。各命令の実行の後のシングルステップモードにおいて、診断例外が、命令ストリーム内の次の命令の実行前に取られる。このようにして、プロセッサはプログラムを通してステップを踏み、各ステップの後のプロセッサの状態は、診断回路４２によって解析され得る。診断回路４２は、制御レジスタＥＤＥＣＲにビットＥＤＥＣＲ．ＳＳを設定することによってシングルステップモードにおいて動作するようにプロセッサを制御し、このビットが設定されて、プロセッサがシングルステップモードにおいて動作すべきことをプロセッサ２０に示す。命令が実行されるときにデクリメントされ、診断例外を取ることによってインクリメントされるビットＥＤＥＳＲ．ＳＳを有する更なる制御レジスタＥＤＥＳＲがある。このビットは、プロセッサが、シングルステップモードの間に非診断的例外が取られる場合、命令が、非診断的例外から戻ると実行されるべきか、あるいは診断例外が取られるかどうかを知ることを可能にする。更なる状態レジスタＥＤＳＣＲがあり、その状態レジスタＥＤＳＣＲは、診断例外を取る理由を記録するビットフィールドＥＤＳＣＲ．ＭＯＥを有する。
【００５６】
診断例外が取られると、診断コードが診断回路４２によって実行され、その診断回路４２は、データ処理装置１０の状態を検出し、解析のためにこの情報のいくつかを格納する。
【００５７】
診断回路４２が処理を終了することを望む場合、診断回路４２は、制御レジスタ内のシングルステップビットＥＤＥＣＲ．ＳＳおよびＥＤＥＳＲ．ＳＳをリセットし、次いで、プロセッサは、通常実行モードに戻る。
【００５８】
シングルステップモードにおいて動作するためにプロセッサを制御することに加えて、診断回路４２はまた、実行される他の診断動作を制御することができる。例えば、その診断回路は、ブレークポイントまたは実行されるコード内の監視ポイントを設定することができ、これらは、コードが、そのコードの実行における一定の設定ポイントで割り込まれることを可能にし、次いで、プロセッサの状態は、これらのポイントで解析され得る。
【００５９】
図１では、処理装置１０の外部にあるように診断回路４２が示されるが、多くの実施形態、例えば図２などでは、診断回路４２は、処理装置の内側にある。
【００６０】
それゆえに、図２は、診断回路４２、レジスタバンク３０、および、いくつかの実施形態では診断回路４２内のプロセッサによって、その一方で他の実施形態ではプロセッサ２０自体上で、実行され得る診断ソフトウェアを格納するためのデータストアを備えるデータ処理装置１０を示す。いくつかの実施形態では、診断ソフトウェアは、外部メモリ４４内に格納されてもよい。
【００６１】
上で詳記された場合において、診断例外を取ることは、格納装置４３またはメモリ４４内に格納されプロセッサ２０によって実行される診断ソフトウェアをトリガーすることになる。この実施形態では、レジスタバンク３０内に格納された値は、図１のレジスタバンク内に格納された値とは少し異なる。この実施形態では、ユーザは、シングルステップ診断モードが入れられるべきであることを示してもよく、診断回路４２は、レジスタバンク３０内の制御レジスタに書き込み、信号ステップモードを示すＭＤＳＣＲレジスタ内のシングルステップビットＭＤＳＣＲ．ＳＳと、１または０に取られるステップの数を示す保存された状態レジスタＳＰＳＲ内の保存されたステップ数ビットＳＰＳＲ．ＳＳと、を設定するであろう。次いで、診断回路４２は、デバッグされるソフトウェアを実行することをプロセッサ２０に命令する。プロセッサは、この要求に応答して、ＳＰＳＲ．ＳＳビットを現在の状態レジスタＣＰＳＲ内の現在のステップ数ビットＣＰＳＲ．ＳＳにコピーする。
【００６２】
それゆえに、設定されるこれらのビットに応答して、プロセッサは、単一命令を処理し、プロセッサが１つの命令を実行していることを示すようにＣＰＳＲ．ＳＳビットを０に設定し、次いで、診断例外を取る。プロセッサ２０は、診断例外を取る一部としてステップ数ビットを現在の状態レジスタＣＰＳＲ．ＳＳから保存された状態レジスタＳＰＳＲ．ＳＳにコピーする。
【００６３】
プロセッサ２０はまた、診断例外についての更なる情報をレジスタバンク３０内の更なる状態レジスタＥＳＲに書き込み、それは、診断例外を含む例外についての情報を記録するために使用される。
【００６４】
プロセッサ２０は、後に診断コードが続く例外ハンドラコードを実行し、プロセッサの現在の状態が解析される。ＳＰＳＲレジスタ内のステップ数ビットＳＰＳＲ．ＳＳは、命令ストリーム内の次の命令が今から実行されるべきであることを示す１に設定される。シングルステップ診断モードが終了されると、レジスタＳＰＳＲ内の制御ビットＭＤＳＣＲ．ＳＳおよびＳＰＳＲ．ＳＳと、レジスタバンク３０内のＭＤＳＣＲがリセットされる。
【００６５】
複数の階層的処理状態、または例外レベルが実装される場合には、各例外レベルは、それ自体のＳＰＳＲおよびＥＳＲレジスタ、例外レベル１についてのＳＰＳＲ＿ＥＬ１およびＥＳＲ＿ＥＬ１、例外レベル２についてのＳＰＳＲ＿ＥＬ２およびＥＳＲ＿ＥＬ２などを有する。
【００６６】
図３は、排他ロード命令ＬＤＲＥＸを含む命令コードが、本発明の実施形態に係るシングルステップ診断モードにおいてどのように実行されるかを示す。この図面において、時間は左から右に流れる。それゆえに、ＳＰＳＲ．ＳＳビットおよびＭＤＳＣＲ．ＳＳビットは、動作のシングルステップモードを示す１に設定され、例外リターンＥＲＥＴ命令は、デバッグされるソフトウェアに飛び入るよう実行される。これは、ＳＰＳＲ．ＳＳをＣＰＳＲ．ＳＳにコピーし、次いで、デバッグされるソフトウェアからの単一命令が実行される。この命令は排他ロード命令ＬＤＲＥＸ命令であり、実行される排他ロード命令ＬＤＲＥＸに応答して、ＣＰＳＲ．ＳＳビットは、診断例外が取られる前に更なる命令が実行されるべきではないことを示す０に設定される。
【００６７】
診断例外が取られ、ＣＰＳＲ．ＳＳはＳＰＳＲ．ＳＳにコピーされ、状態レジスタ内のシンドロームビットＥＳＲ．ＥＸは、排他ロード命令ＬＤＲＥＸが実行されたことを示す１に設定される。このレジスタ内の有効ビットＥＳＲ．ＩＳＶがまた設定され、その有効ビットＥＳＲ．ＩＳＶは、これが、このビットについて有効値であることを示す。
【００６８】
これらのシンドロームおよび対応有効ビットは、特定種類の命令が実行される場合は常に、発明の実施形態において設定される。これらは、モニタを排他的に要求する命令の種類であってもよく、次いで、そのモニタは、それらが、特定ストレージ位置、例えば排他ロード命令などに排他的にアクセスできることを示す。それらはまた、命令ストリーム内の後の命令の実行が例外ハンドラの実行によって変えられ得る他の種類の命令であってもよい。
【００６９】
ＬＤＲＥＸ命令が第１の位置にアクセスすると、モニタビットは、この第１の位置がアクセスされたことを記録する。モニタは、２つの状態、すなわち、「オープンアクセス」および「排他アクセス」を有する。ＬＤＲＥＸは、モニタを「排他アクセス」状態にすることによって第１の位置へのアクセスを要求し、モニタは、アクセスされたアドレスの記録をアドレスタグの形態で保持する。
【００７０】
モニタおよびそれのタグは、排他ストアＳＴＲＥＸ命令上でチェックされる。ＳＴＲＥＸ命令は、値が第２の位置に書き込まれることを要求するストア命令である。ＳＴＲＥＸ命令は、モニタが「排他アクセス」状態にある場合にだけ、書き込みを進めることが許され、ＳＴＲＥＸはタグ付きアドレスに書き込む、すなわち、第２の位置が第１の位置に一致する。モニタは、ＳＴＲＥＸそれ自体によってばかりではなく、排他クリアＣＬＲＥＸ命令によっても、あるいはことによると、タグ付きアドレスにアクセスするいくつかの他の命令によっても、「オープンアクセス」に戻ることを強要される。ＬＤＲＥＸ命令とＳＴＲＥＸ命令との間のソフトウェアコンテキストの変更を引き起こす例外ハンドラに起因して起こり得るソフトウェア誤動作を避けるために、排他モニタはまた、例外リターンによって「オープンアクセス」に戻ることを強要される。このことは、ソフトウェア規定によって、例えば、ＥＲＥＴ前にＣＬＲＥＸ命令を常に実行することによって行われてもよいし、あるいは、ＥＲＥＴ命令を実行するとモニタを「オープンアクセス」状態に戻すことを強要するハードウェアによって強制されてもよい。
【００７１】
マルチプロセッサシステムにおける広域モニタのために、ＳＴＲＥＸは、アクセスがまた、ＬＤＲＥＸを発行した同一プロセッサから生じる場合にだけ書き込みを可能にする。モニタはまた、タグ付きアドレスに近いものなどの他の位置にアクセスする他の命令によって「オープンアクセス」状態にクリアされてもよい。
【００７２】
それゆえに、単一ＬＤＲＥＸ命令の実行に続くこの実施形態では、シングルステップモードを示すよう設定されたＭＤＳＣＲ．ＳＳ制御ビットに応答して、診断例外は取られ、ＥＳＲ．ＥＸおよびＥＳＲ．ＩＳＶビットが設定され、次いで、診断コードが実行される。診断コードは、ＥＳＲ．ＩＳＶ有効ビットおよび対応ＥＳＲ．ＥＸシンドロームビットが設定されることを検出し、これらは、前の命令が、シングルステップモードが適切ではない既定種類の１つであったことを示すので、例外ハンドラから戻るとシングルステップモードが実行され、命令ストリームの通常実行が生じるように、プロセッサにＭＤＳＣＲ．ＳＳおよびＳＰＳＲ．ＳＳビットをクリアすることを命令する。
【００７３】
診断コードはまた、命令ストリーム内のポイントを示す適切なブレークポイントを設定し、このことは、診断回路が、このポイントで通常実行を中断し、必要に応じて、シングルステップモードを再開することを可能にする。
【００７４】
次いで、プロセッサは、ブレークポイントに達するまで、命令ストリームの次の部分を実行する。このブレークポイントは、コードのブロックの後にあるコード内の位置に設定されていることになり、そしてそれの実行は、命令間で生じている例外によって変えられる。
【００７５】
実行されるコードは、例えば、セマフォ変数への排他アクセスを得るように試みるコードであってもよい。
ループ
LDREX    R5、  [R1]        ;  ロック（排他ロード）を読み取る
CMP      R5、  #0          ;  0かどうかをチェックする
STREXEQ  R5、  R0、  [R1]  ;  新しい値を格納することを試みる
CMPEQ    R5、  #0          ;  格納が成功したかどうかを検査する
BNE      ループ            ;  そうではない場合、再試行する
【００７６】
この例において、コードは、セマフォを取得するまでループする。次いで、コードは、ループを正常に出ることになり、したがって、ブレークポイントは、シングルステップモードに戻ることを可能にするコードのこのセクションの後に置かれ得る。
【００７７】
他のコードでは、ソフトウェアは、それがセマフォを取得しない場合、何か他のことをするよう望む可能性がある。コードは、別の処理がセマフォを取得した可能性があり、それゆえ、それが、利用可能になるためにいくらか時間がかかり得る場合を考慮に入れるように、このようにして書き込まれ得る。これは、異なる種類のコードである。
ループ
LDREX    R5、  [R1]        ;  ロック（排他ロード）を読み取る
CMP      R5、  #0          ;  0（セマフォがフリーである）かどうかを
チェックする
BNE      SomethingElse     ;  そうではない場合、何か他のことをする
STREX    R5、  R0、  [R1]  ;  新しい値を格納することを試みる
CMP      R5、  #0          ;  格納が成功したかどうかを検査する
BNE      ループ            ;  そうではない場合、再試行する
【００７８】
ＳＴＲＥＸの失敗は、セマフォが別の処理によって取られていないことを必ずしも暗示しないので、ＳＴＲＥＸが失敗する場合、コードはループし、再試行する価値があることに留意する。
【００７９】
ＬＤＲＥＸのステップを踏んだこの場合において、デバッガは、ループについて２つの出口ポイントを見つけ、１つは、コードのこのセグメントの終わりにあり、１つは、ラベル「ＳｏｍｅｔｈｉｎｇＥｌｓｅ」（図示しない）にある。そのため、デバッガは、それらの両方上にブレークポイントを設定しなければならない。
【００８０】
上記実施形態では、プロセッサは、通常実行を再開し、排他ロード命令後からコードを実行し続けた。他の実施形態では、診断コードは、これが適切である場合、排他ロード命令を再実行するためにプロセッサを制御してもよいし、あるいは、シングルステップモードにおいて実行されるべきではないコードのセクションをそれ自体でエミュレートし、次いで、コードのこのセクションの後に、この場合においては排他ストア命令後に、コードの実行を開始するようプロセッサを制御してもよい。
【００８１】
診断コードが、設定される有効ビットＥＳＲ．ＩＳＶおよびシンドロームビットＥＳＲ．ＥＸに応答して、シングルステップ診断モードを出るためにプロセッサを制御するよう構成されなかった場合、診断例外から戻ると、例外ハンドラは、排他モニタをクリアすることになり、コードは、前進しないことになる。
【００８２】
図４は、優先度の高い割り込みが、排他ロード命令がシングルステップモードにおいて実行された（ＭＤＳＣＲ．ＳＳ＝１）後に保留になっている実施形態を示す。この実施形態では、複数の例外レベルがある。診断コードは、ＥＬ１で実行しており、単一命令がシングルステップモードにおいて実行されることを示すことは、それの保存された状態レジスタ内の保存されたステップ数ビット、ＳＰＳＲ＿ＥＬ１．ＳＳを１に設定する。それは、ＥＲＥＴ命令を実行し、図３に示すように、そのＥＲＥＴ命令はＳＰＳＲ＿ＥＬ１．ＳＳをＣＰＳＲ．ＳＳにコピーする。排他ロード命令が実行された後に、ＣＰＳＲ．ＳＳは０にクリアされる。それゆえに、割り込みが、保留になってもいる診断例外に優先して例外レベル２ＥＬ２で取られると、プロセッサは、ＥＬ２  ＳＰＳＲ＿ＥＬ２．ＳＳビットについて保存されたステップ数ビットを０に設定する。割り込みが処理されている場合、割り込みから戻るための命令が実行される。これは、（例外から戻ると一般に行われるように）排他モニタをクリアし、ＳＰＳＲ＿ＥＬ２．ＳＳをＣＰＳＲ．ＳＳにコピーする。ステップ数ビットＣＰＳＲ．ＳＳはここで０に設定されるので、診断例外が、何の命令も実行することなく生じられる。命令が実行されなかったので、プロセッサ２０は、排他モニタと関連付けられた有効ビットＥＳＲ．ＩＳＶをゼロに設定し、前に実行されている命令の種類であって、排他モニタを要求した可能性がある命令の種類が、未知であることを示す。
【００８３】
ゼロであるＥＳＲ．ＩＳＶを検出することに応答して、デバッグコードは、どの命令が前に実行されたかを判断する必要があり、それゆえに、この命令のためのコードをプロセッサに要求する。そのような要求と関連付けられたいくつかのオーバーヘッドがあるが、この要求は、命令がシングルステップモードにおいて実行された後に例外が発生している状況だけに必要とされ、それゆえに、要求される各命令を必要とすることとはかなり異なる。
【００８４】
図５は、命令がシングルステップを踏まれるすぐ前にＥＬ２優先度割り込みが受信される場合に、何が起こるかを示す。この場合において、ステップ数インジケータＣＰＳＲ．ＳＳは、割り込みがなされる場合に１に設定され、したがって、ＳＰＳＲ＿ＥＬ２．ＳＳは１に設定され、それゆえに、この例外から戻ると、次の命令、排他ロードが実行され、次いで、診断例外が取られる。実行された命令が排他ロード命令であったので、プロセッサ２０は、ＥＳＲ．ＥＸビットおよびＥＳＲ．ＩＳＶビットを設定し、それゆえに、診断コードは、これに応答してＳＰＳＲ＿ＥＬ１．ＳＳおよびＭＤＳＣＲ．ＳＳ値をクリアし、１つまたは複数の第１の設定ブレークポイントを有する通常オペレーティングモードに入るようにプロセッサを制御する。
【００８５】
要約すれば、ソフトウェアステップ診断例外が命令ステップのすぐ後に続いて生じられる場合、有効ビットＥＳＲ．ＩＳＶが１に設定され、ソフトウェアステップデバッグ例外が、命令をちょうど実行すること無く生じられる場合には、有効ビットＥＳＲ．ＩＳＶが０に設定される。
【００８６】
図６は、ソフトウェアステップモードにおけるプロセッサの可能な状態を示す。
【００８７】
ＭＤＳＣＲ．ＳＳビットが設定されない場合には、プロセッサは、シングルステップモードにおいて実行していない。それゆえに、最初に、プロセッサのソフトウェアステップ状態は、非アクティブ状態であり、無効化され、デバッガは診断ソフトウェアを実行する。次いで、ＭＤＳＣＲ．ＳＳビットおよびＳＰＳＲ．ＳＳビットは、ステップモードが、デバッガからの例外リターンを実行すると入れられることを示すように設定される。例外から戻ると、プロセッサは、アクティブな非保留状態に入り、その状態において、単一命令が実行され得る（すなわち、ソフトウェアステップはアクティブであるが、この時点で診断例外は保留になっていない）。プロセッサは、デバッギーコードを実行している場合、この状態にあり、ＭＤＳＣＲ．ＳＳビットはシングルステップモードを示して設定され、ＣＰＳＲ．ＳＳビットは１つの命令が実行されることを示して設定される。
【００８８】
プロセッサは、単一命令を実行することによって、あるいは取られる例外によって、この状態から出る可能性がある。プロセッサが命令を実行する場合には、ＣＰＳＲ．ＳＳは、シングルステップが完了したことを示すゼロにリセットされる。この段階では、ソフトウェアステップ診断例外は、ここで保留になっており、それゆえ、ソフトウェアステップ状態は、アクティブな保留状態になっている。
【００８９】
プロセッサはまた、ソフトウェアステップ診断例外以外の例外を取ることによってこの状態から出る可能性があり、その結果、この例外が診断例外よりも高い優先度のものである場合、ソフトウェアステップ状態は、それが処理される間に無効化される。例外の種類次第で、および、例外が、命令が実行される前または後に生じるかどうかによって、ＳＰＳＲ．ＳＳビットは、例外を取ると１または０であり、次いで、例外ハンドラから戻ると、プロセッサは、アクティブな非保留状態またはアクティブな保留状態に戻る。
【００９０】
しかしながら、他の例外が診断例外よりも低い優先度のものである場合、ＣＰＳＲ．ＳＳビットは、シングルステップが完了したことを示すゼロにリセットされる。この段階では、ソフトウェアステップ診断例外はここで保留になっており、それゆえ、ソフトウェアステップ状態は、アクティブな保留状態になっている。
【００９１】
アクティブな保留状態から、ソフトウェアステップ診断例外が取られ、ＣＰＳＲ．ＳＳをＳＰＳＲ．ＳＳにコピーする。実行はデバッガに戻り、ソフトウェアステップ状態は無効化される。ＭＤＳＣＲ．ＳＳビットは、まだシングルステップモードを示して設定され、ＳＰＳＲ．ＳＳビットは、ステップが実行されたことを示してクリアされる。
【００９２】
図７ａは、本発明の実施形態に係る方法におけるステップを例示するフロー図を示す。その方法は、診断装置が、制御レジスタにおけるシングルステップビットを設定することと、ステップ数を１に設定することとによって、シングルステップ診断モードに入ることで始まる。
【００９３】
次いで、その方法は、（「Ａ」とラベルされた接続経由で）ステップを踏まれるコードに戻ることによって進む。
【００９４】
最初にステップ数は１であるので、次いで、保留になっている例外が無い場合、単一命令が実行される。この命令が例外を生じさせないことを仮定すると、ステップ数は、ゼロに設定され、他の例外が保留になっていない場合、装置はまた、命令が既定種類のものであったかを判断し、この種類は、命令の実行後に例外を取ることが、次の命令がどのように実行するかに影響を及ぼすことになる種類である。次いで、その命令がその種類である場合、有効ビットは状態レジスタにおいて設定され、そうではない場合、有効ビットが設定され、その種類ビットはクリアされる。診断例外はここで取られ、方法は（「Ｂ」とラベルされた接続経由で）続く。
【００９５】
その方法が完了していないと仮定すると（これがどのように判断されるかについての詳細は図示しない）、診断装置は、診断例外がソフトウェアステップに起因したことを判断し、更に、そうである場合、有効ビットおよび種類ビットが設定されるかどうかが更に判断される。有効ビットが設定され、種類ビットがクリアされる場合には、その方法は、ステップ数を１に設定するために戻り（シングルステップ制御ビットはまだ設定される）、次の命令のステップを踏むことによって続く。これは、その方法を通した最も一般的なパスであり、また最適なパスであることに留意する。
【００９６】
しかしながら、有効ビットおよび種類ビットの両方が設定される場合には、これは、シングルステップモードが抑制されるべきことの表示であり、シングルステップビットはクリアされ、（複数の）ブレークポイントは、シングルステップモードが再開され得るコード内の（複数の）適切なポイントに設定される。
【００９７】
同様に、有効ビットが、診断例外を取ると設定されないよう判断された場合には、その方法は、（複数の）既定種類の１つであったかどうかを見るためにステップを踏まれた命令の直接検査を実行する。この検査に基づいて、その方法は、シングルステップモードを進めるか、あるいは（複数の）ブレークポイントを設定するかどうかを判断する。その方法は、（接続「Ａ」経由で）ステップを踏まれるコードに戻ることによって再度進行する。
【００９８】
（複数の）ブレークポイントが使用されている場合には、しかしながら、ブレークポイントに達し、診断例外が取られるまで、命令が命令ストリームとして実行されるように、シングルステップ制御ビットは設定されない。診断例外がブレークポイントに起因したことが後で判断されるので、（複数の）ブレークポイントは取り除かれ、シングルステップ制御ビットが設定され、ステップ数が１に設定され、それゆえ、シングルステップモードが再開する。
【００９９】
割り込みおよび他の例外が、通常の手法における命令ストリームの実行の間に生じ、取られる可能性があることが留意されるべきである。
【０１００】
デバッグされるコードからの（複数の）命令を実行する間はいつでも、非診断例外が保留になっている場合には、その非診断例外が取られることになる。命令が実行される前に取られる例外について、および、実行される命令によって生じるシステムコール（ｓｙｓｃａｌｌ）例外（メモリ管理障害など）以外の例外について、ステップ数は例外を取る前に変更されない（１である）。これらの場合において、例外は有効に命令をキャンセルし、それが、ステップを踏まれた場合、再度ステップを踏まれるべきであることを意味する。
【０１０１】
それゆえに、例外を取ると、ステップ数は例外ハンドラのためにＳＰＳＲ内に記録される。次いで、ステップ数はゼロに設定される。
【０１０２】
非診断例外は、診断例外の優先度よりも低い優先度を有し得ることが更に留意されるべきである。この場合には、ソフトウェアステップ制御ビットは非診断例外の処理の間に有効であり、そして、ステップ数がここでゼロであるので、診断例外は即時に取られることになる。命令は実行されないので、有効ビットおよび種類ビットの両方がクリアされる。
【０１０３】
命令後に取られる高優先度の割り込みおよび命令によって生じるシステムコール例外について、命令は有効に完了し、そうして、ステップ数は例外を取る前にゼロに設定される。診断例外およびシステムコール例外よりも高い優先度を有する割り込みだけが、このポイントで取られ得る。
【０１０４】
そうではない場合、例外から戻ると、シングルステップ制御ビットが設定される場合、ステップ数がＳＰＳＲから復元され、評価される。ステップ数が１である場合には、これは例外が、ステップモードにおける命令が完了される前に取られたことを示し、次いで、例外から戻ると、ストリーム内の命令が再実行される。
【０１０５】
ステップ数がゼロである場合には、これは、例外が、ステップモードにおける命令の実行が完了した後であって、その命令と関連付けられた診断例外を取る前に取られたことを示す。この場合において、優先度の高い例外が保留になっていないことを仮定すると、診断例外が即時に取られる。しかしながら、有効ビットおよび関連付けられた種類ビットは、命令の種類を示す値は、他の命令が一方で実行されることになるので判断され得ないことを示すために、クリアされなければならない。
【０１０６】
それゆえに、（「Ｂ」経由で）診断例外を取ると、有効ビットがクリアであることが判断されることになり、その方法は、（複数の）既定種類の１つであったかどうかを見るために、ステップを踏まれた命令の直接検査を実行する。この検査に基づいて、その方法は、シングルステップモードを進めるべきかどうか、あるいは（複数の）ブレークポイントを設定するかどうかを判断する。
【０１０７】
その方法は、上記したように、ステップを踏まれるコードに戻ることによって（「Ａ」経由で）再度進行する。
【０１０８】
図７ｂは、本発明の更なる実施形態に係る方法におけるステップを例示するフロー図を示す。この方法は、一般に、デバッガが例えば図１に示される外部装置などの外部装置上にある「外部デバッグ」の場合のために使用される。この場合において、インジケータ値は、プログラムがステップを踏んでいることであり得る診断例外の理由を示し、その場合において、インジケータ値は、命令の種類を示すことになり、あるいは、デバッグイベント／診断例外の別の理由であり得る。それゆえに、このインジケータ値は、既定種類のものではないステップを踏まれる命令、既定種類のステップを踏まれる命令、未知の種類のステップを踏まれる命令を含む複数の可能な値を有し、その３つの種類についての値は、０１１０、０１１１、および１１１０であり得る。他の値は、デバッグイベント／診断例外の他の理由、例えば取られるブレークポイント、停止要求などを示すために使用される。これらの可能な値は、図７ｃの表に示される。これらは、その方法において生じ得る単なるイベント種類であるので、ステップおよびブレークポイント値だけが図７ｂのフロー図において考慮される。
【０１０９】
それゆえに、図７ａに示すように、その方法は、制御レジスタ内でシングルステップビットを設定し、ステップ数を１に設定することによって、診断装置をシングルステップ診断モードに入れることによって始まる。
【０１１０】
次いで、その方法は、ステップを踏まれるコードに戻ることによって（「Ａ」とラベルされた接続経由で）進行する。
【０１１１】
最初にステップ数は１であるので、保留になっている例外がない場合、単一命令が実行される。この命令が例外を生じないことを仮定すると、ステップ数はゼロに設定され、他の例外が保留になっていない場合、装置はまた、命令が既定種類のものであったかどうかを判断し、この種類は、命令の実行後に例外を取ることが、次の命令をどのように実行するかに影響を及ぼすことになる種類である。命令が既定種類のものである場合には、種類表示は、状態レジスタ内でＳＴＥＰｅｘｃｌに設定され、命令が既定種類の１つではない場合には、種類表示はＳＴＥＰｏｋに設定される。診断例外はここで取られ、方法は（「Ｂ」とラベルされた接続経由で）続く。
【０１１２】
その方法が完了していないと仮定すると（これがどのように判断されるかについての詳細は図示しない）、診断装置は、種類の表示が何に設定されるかを判断する。その種類表示が、命令が既定種類の１つではなかったことを示すＳＴＥＰｏｋに設定された場合には、その方法は、ステップ数を１に設定するよう戻り（シングルステップ制御ビットはまだ設定される）、次の命令のステップを踏むことによって続く。これは、その方法を通した最も一般的なパスであり、また最適なパスであることに留意する。
【０１１３】
種類の表示が、命令の種類が未知であることを示すＳＴＥＰｕｎｋｎｏｗｎに設定される場合には、その方法は、命令が（複数の）既定種類の１つであったかどうかを見るために、ステップを踏まれた命令の直接検査を実行する。この検査に基づいて、その方法は、シングルステップモードを続けるかどうか、あるいは（複数の）ブレークポイントを設定するかどうかを判断する。その方法は、ステップを踏まれるコードに戻ることによって（接続「Ａ」経由で）再度進行する。
【０１１４】
種類の表示が、ステップを踏まれた命令が既定種類のものであったことを示すＳＴＥＰｅｘｃｌに設定される場合には、これは、シングルステップモードが抑制されるべきであるという表示であり、シングルステップ制御ビットはクリアされ、（複数の）ブレークポイントは、シングルステップモードが再開され得るコード内の（複数の）適切なポイントに設定される。
【０１１５】
（複数の）ブレークポイントが使用されている場合には、シングルステップ制御ビットは、ブレークポイントに達するまで、命令が命令ストリームとして実行されるよう設定されない。この時点では、表示種類は、診断例外がブレークポイントに起因するものであるのでＢＲＫに設定され、診断例外が取られる。後ほど、ＢＲＫである種類表示に応答して、（複数の）ブレークポイントが取り除かれ、シングルステップ制御ビットが設定され、ステップ数が１に設定され、次いで、シングルステップモードが再開する。
【０１１６】
割り込みおよび他の例外は、通常の手法における命令ストリームの実行の間に、生じ、取られる可能性があることが留意されるべきである。
【０１１７】
デバッグされるコードからの（複数の）命令を実行する間はいつでも、非診断例外は、保留になっている場合には、取られることになる。命令が実行される前に取られる例外について、および、実行される命令によって生じるシステムコール（ｓｙｓｃａｌｌ）例外以外の例外（メモリ管理障害など）について、ステップ数は、例外を取る前に変更されない（１である）。これらの場合において、例外は、有効に命令をキャンセルし、それがステップを踏まれていた場合、再度ステップを踏まれるべきであることを意味する。
【０１１８】
ステップ数は、例外ハンドラのためにＳＰＳＲ内に記録される。次いで、ステップ数はゼロに設定される。
【０１１９】
非診断例外は、診断例外の優先度よりも低い優先度を有し得ることが更に留意されるべきである。この場合には、ソフトウェアステップ制御ビットは、非診断例外の処理の間に有効であり、そして、ステップ数はここでゼロであるので、診断例外は即時に取られることになる。命令は実行されないので、種類の表示はＳＴＥＰｕｎｋｎｏｗｎに設定される（図示しない）。
【０１２０】
命令後に取られた優先度の高い割り込みおよび命令によって生じたシステムコール例外について、命令は有効に完了し、次いで、ステップ数は、例外を取る前にゼロに設定される。診断例外およびシステムコール例外よりも高い優先度を有する割り込みだけが、このポイントで取られ得る。
【０１２１】
その他の場合には、シングルステップ制御ビットが設定される場合、例外から戻ると、ステップ数はＳＰＳＲから復元され、評価される。ステップ数が１である場合には、これは、例外が、ステップモードにおける命令が完了される前に取られたことを示し、次いで、例外から戻ると、ストリームにおける命令が再実行される。
【０１２２】
それがゼロである場合には、これは、例外が、ステップモードにおける命令の実行が完了した後ではあるが、その命令と関連付けられた診断例外を取る前に、取られたことを示す。この場合において、優先度の高い例外が保留になっていないことを仮定すると、診断例外が即時に取られ、種類の表示が、診断例外を取るより前にＳＴＥＰｕｎｋｎｏｗｎに設定され、命令の種類が、他の命令が一方で実行されていることになるので判断され得ないことを示す。
【０１２３】
それゆえに、（「Ｂ」経由で）診断例外を取ると、表示種類がＳＴＥＰｕｎｋｎｏｗｎであることが判断されることになり、その方法は、命令が（複数の）既定種類の１つであったかを見るために、ステップを踏まれた命令の直接検査を実行する。この検査に基づいて、その方法は、シングルステップモードを進めるかどうか、あるいは（複数の）ブレークポイントを設定するかどうかを判断する。
【０１２４】
図８は、使用され得る仮想マシンインプリメンテーションを例示する。前に記載した実施形態は、関係している技術を支援する特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェアデバイスのいわゆる仮想マシンインプリメンテーションを提供することも可能である。これらの仮想マシンインプリメンテーションは、仮想マシンプログラム５１０を支援するホストオペレーティングシステム５２０を典型的に走らせるホストプロセッサ５３０上で走る。典型的に、大型で強力なプロセッサは、適度な速度で実行する仮想マシンインプリメンテーションを提供するよう要求されるが、そのようなアプローチは、一定状況、例えば、互換性または再利用の理由のために別のプロセッサ生まれのコードを走らせる要望があるときなどにおいて、妥当とされ得る。仮想マシンプログラム５１０は、そのような実際のハードウェアデバイスによるプログラムの実行で与えられることになるのと同じ結果を与えるように、アプリケーションプログラム（またはオペレーティングシステム）５００を実行することができる。それゆえに、動作のこのモードへの出入りの制御を含むプログラム命令の診断ステップは、仮想マシンプログラム５１０を用いてアプリケーションプログラム５００内から実行されてもよい。
【０１２５】
本発明の様々な更なる態様および特徴は、添付された特許請求の範囲において定義される。様々な修正は、本発明の範囲から逸脱することなく、前に記載された本明細書中における実施形態になされ得る。
【図１】
0005905911.tif 000002
【図２】
0005905911.tif 000003
【図３】
0005905911.tif 000004
【図４】
0005905911.tif 000005
【図５】
0005905911.tif 000006
【図６】
0005905911.tif 000007
【図７ａ−１】
0005905911.tif 000008
【図７ａ−２】
0005905911.tif 000009
【図７ｂ−１】
0005905911.tif 000010
【図７ｂ−２】
0005905911.tif 000011
【図７ｃ】
0005905911.tif 000012
【図８】
0005905911.tif 000013