(57)【要約】【課題】ＢＩＯＳのデバッグ方法を提供する。【解決手段】デバッグシステムは、ＢＩＯＳ（Basic Input/Output System）で発生する例外を検出する例外検出部と、例外検出部が例外を検出するとＳＭＩ（System Management Interrupt）を発行するＳＭＩ発行部と、ＳＭＭ（System Management Mode）でデバッグ機能を実行するデバッグ機能部と、を備える。【選択図】図１１
2020086872.tif 000002
【特許請求の範囲】
【請求項１】
ＢＩＯＳ（Basic Input/Output System)で発生する例外を検出する例外検出部と、
前記例外検出部が例外を検出するとＳＭＩ（System Management Interrupt）を発行するＳＭＩ発行部と、
ＳＭＭ（System Management Mode）でデバッグ機能を実行するデバッグ機能部と、
を備えるデバッグシステム。
【請求項２】
前記例外検出部は、オペレーティングシステムが備える例外割り込みを検出する機能に基づいて前記例外の発生を検出し、検出した前記例外の発生場所のアドレスとＢＩＯＳに割り当てられたアドレス領域の範囲とに基づいて、ＢＩＯＳで例外を検出する、
請求項１に記載のデバッグシステム。
【請求項３】
前記例外検出部が、
ＩＤＴに所定の例外割り込みベクタに対応付けて登録される割り込みハンドラである、
請求項１または請求項２に記載のデバッグシステム。
【請求項４】
前記例外検出部は、ＢＩＯＳのプログラムに記載されたアサーションの評価式の値に基づいて、ＢＩＯＳでの例外の発生を検出する、
請求項１から請求項３の何れか１項に記載のデバッグシステム。
【請求項５】
前記アサーションでは、前記評価式に加え、前記評価式の値がＴｒｕｅではない場合のデバッガの実行に関する設定を行うことができる、
請求項４に記載のデバッグシステム。
【請求項６】
前記デバッガの実行に関する設定では、システムの通常運用時にデバッガを起動するか否かの設定を行うことができる、
請求項５に記載のデバッグシステム。
【請求項７】
前記アサーションでは、さらに前記プログラムに対するリカバリ処理の設定を行うことができる、
請求項５または請求項６に記載のデバッグシステム。
【請求項８】
非ＳＭＭレイヤに
ＢＩＯＳで発生する例外を検出する例外検出部と、
前記例外検出部が例外を検出するとＳＭＩを発行するＳＭＩ発行部と、
ＳＭＭでデバッグ機能を実行するデバッグ機能部と、
を備えるＢＩＯＳ。
【請求項９】
ＳＭＭでの動作が可能なプロセッサと、
請求項８に記載のＢＩＯＳと、
を備える情報処理装置。
【請求項１０】
ＢＩＯＳで発生する例外を検出するステップと、
前記例外を検出するとＳＭＩを発行させるステップと、
前記ＳＭＩ発行により遷移したＳＭＭでデバッグ機能を実行するステップと、
を有するデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグシステム、ＢＩＯＳ、情報処理装置及びデバッグ方法に関する。
【背景技術】
【０００２】
Ｘｅｏｎ（登録商標）プロセッサ等を搭載したサーバにおいては、システムマネジメントモード(ＳＭＭ：System Management Mode)と非ＳＭＭのモード変更を繰り返しながら、初期化が行われる。システムマネジメント割り込み（ＳＭＩ：System Management Interrupt）は、最高の優先度を持ったハードウェア割り込みである。ＳＭＭはＳＭＩを契機として移入するモードであり、プロセッサは、ＳＭＩが発行されると動作モードをＳＭＭへ遷移させる。ＳＭＭは、オペレーティングシステム(ＯＳ)を含むユーザからはアクセスできない独立した環境である。ＳＭＭでの動作中のみアクセスすることができるメモリ空間（SMM protected memory)が設定されており、ＳＭＭでの動作中にプロセッサがSMM protected memory以外のコードを参照すると、例外割り込みが発生するセキュリティが設けられている（特許文献１）。
【０００３】
一般的なソフトウェアデバッグ手法は、非ＳＭＭを前提としており、SMM protected memoryへのアクセスができない。一般的なＯＳやアプケーションのデバッグを行う場合には、SMM protected memoryを使用しないプログラムを対象とするデバッグであるため、SMM protected memoryへのアクセスができなくても特に不都合はない。しかしながら、ＢＩＯＳ（Basic Input/Output System)のデバッグを行う場合、SMM protected memoryもデバッグ対象となる場合がある。例えば、ＢＩＯＳの場合、非ＳＭＭで動作するプログラム(非ＳＭＭプログラム)とＳＭＭで動作するプログラム(ＳＭＭプログラム)が連携して処理を行うことがある。この場合、非ＳＭＭプログラムが期待外の動作をした場合でも、その原因はＳＭＭプログラムにある場合がある。従って、ＢＩＯＳで期待外の動作が発生した場合、原因を明らかにするためにはＳＭＭプログラムと非ＳＭＭプログラムの両方がデバッグできる必要がある。
【０００４】
一般にＢＩＯＳファームウェアの開発においては、ＪＴＡＧ（Joint Test Action Group）規格の外部装置（デバッガ）をＪＴＡＧポート接続し、デバッグを行う。ＪＴＡＧポートは、開発評価用の目的に使用され、セキュリティ上の配慮により、出荷時の基盤では削除されることが多い。つまり、出荷後に問題が起きてもＪＴＡＧ規格のデバッガによるデバッグを行うことができない。
【０００５】
特許文献１には、ＳＭＭおよび非ＳＭＭの両方において読み出し可能で、ＳＭＭにおいてのみ書き換えが可能とされる保護すべきシステムデータに対して、読み出し専用領域に記憶し、非ＳＭＭコードの実行中に前記読み出し専用領域へアクセスさせることを可能とする方法が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２０１３−５３６５０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
サーバ上で稼働するＯＳやアプリケーションが、ＢＩＯＳによって提供されるサービスを呼び出して使用するような場合、ＢＩＯＳのプログラムを原因とする障害が発生し得る。ＪＴＡＧ規格のデバッガが使用できない状況であってもSMM protected memoryを使用して動作するプログラムのデバッグを行うことができる方法が求められている。
【０００８】
そこでこの発明は、上述の課題を解決するデバッグシステム、ＢＩＯＳ、情報処理装置及びデバッグ方法を提供することを目的としている。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、デバッグシステムは、ＢＩＯＳ（Basic Input/Output System)で発生する例外を検出する例外検出部と、前記例外検出部が例外を検出するとＳＭＩ（System Management Interrupt）を発行するＳＭＩ発行部と、ＳＭＭ（System Management Mode）でデバッグ機能を実行するデバッグ機能部と、を備える。
【００１０】
また、本発明の一態様によれば、ＢＩＯＳは、ＢＩＯＳで発生する例外を検出する例外検出部と、前記例外検出部が例外を検出するとＳＭＩを発行するＳＭＩ発行部と、ＳＭＭでデバッグ機能を実行するデバッグ機能部と、を非ＳＭＭレイヤに備える。
【００１１】
また、本発明の他の一態様によれば、情報処理装置は、ＳＭＭでの動作が可能なプロセッサと、上記のＢＩＯＳと、を備える。
【００１２】
また、本発明の他の一態様によれば、デバッグ方法は、ＢＩＯＳで発生する例外を検出するステップと、前記例外を検出するとＳＭＩを発行させるステップと、前記ＳＭＩ発行により遷移したＳＭＭでデバッグ機能を実行するステップと、を有する。
【発明の効果】
【００１３】
本発明によれば、SMM protected memoryにアクセスして動作するプログラムのデバッグを行うことができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施形態によるデバッグシステムの一例を示す第１の図である。
【図２】本発明の第一実施形態によるＢＩＯＳ例外割り込みのハンドリングについて説明する図である。
【図３】本発明の第一実施形態によるＯＳ起動時の初期化処理の一例を示すフローチャートである。
【図４】本発明の第一実施形態によるＢＩＯＳのデバッガの呼び出し処理の一例を示すフローチャートである。
【図５】本発明の第二実施形態によるＢＩＯＳ例外アサーションのハンドリングを説明する図である。
【図６】本発明の第二実施形態によるアサーションに用いるパラメータの一例を示す図である。
【図７】本発明の第二実施形態によるＢＩＯＳのデバッガの呼び出し処理の一例を示す第１のフローチャートである。
【図８】本発明の第二実施形態によるＢＩＯＳのデバッガの呼び出し処理の一例を示す第２のフローチャートである。
【図９】本発明の一実施形態によるデバッグシステムの一例を示す第２の図である。
【図１０】本発明の一実施形態によるデバッグシステムの一例を示す第３の図である。
【図１１】本発明の各実施形態によるデバッグシステムの最小構成を示す図である。
【図１２】本発明の各実施形態におけるデバッグシステムを搭載した情報処理装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の各実施形態におけるデバッグシステムについて、図面を参照して説明する。
（システム構成）
図１は、本発明の各実施形態によるデバッグシステムの一例を示す図である。
デバッグシステム１は、ＯＳ１０とＢＩＯＳ２０とを含む。ＯＳ１０とＢＩＯＳ２０はソフトウェアである。デバッグシステム１は、サーバ等のコンピュータに実装され、コンピュータが備えるＣＰＵ（Central Processing Unit）等のプロセッサによって実行される。
【００１６】
ＯＳ１０は、ＩＤＴ（Interrupt Descriptor Table）１１０と、ＯＳ例外割り込みハンドリング機能１２０と、ＯＳ初期完了通知機能１３０とを備える。
ＩＤＴ１１０は、例外割り込みベクタと例外割り込みハンドラを設定するテーブルである。ＩＤＴ１１０には、０除算割り込み、ｂｒｅａｋｐｏｉｎｔ割り込み、ページフォルトなどの各種例外に対して、それぞれの例外が発生したときに呼び出される例外割り込みハンドラのメモリアドレスが登録されている。
ＯＳ例外割り込みハンドリング機能１２０は、ＩＤＴ１１０に定義された例外が発生した時に実行されるハンドラである。ＯＳ１０は、例外が発生すると、ＩＤＴ１１０を参照して、例外に応じたＯＳ例外割り込みハンドリング機能１２０を呼び出す。ＩＤＴ１１０とＯＳ例外割り込みハンドリング機能１２０は、一般的なＯＳの機能である。
【００１７】
ＯＳ初期完了通知機能１３０は、ＩＤＴ１１０の初期化が完了したことをＢＩＯＳ２０に通知する。一般的なＯＳは、この機能を備えていない。サーバ等のブートフローでは、ＩＤＴ１１０の初期化完了後にＡＣＰＩ（Advanced Configuration and Power Interface）の初期化が開始される。ＯＳ初期完了通知機能１３０は、例えば、ＡＣＰＩの初期化開始の契機である「\_SB._INI」の実行を契機として動作するように実装することができる。または、ＯＳ初期完了通知機能１３０を、ＩＤＴ１１０の初期化完了を検出してＢＩＯＳ２０にその旨を通知するデーモン・サービスアプリケーションとして実装し、自動実行させるようにしてもよい。
【００１８】
ＢＩＯＳ２０は、非ＳＭＭレイヤ３０と、ＳＭＭレイヤ４０とを備える。非ＳＭＭレイヤ３０は、非ＳＭＭでの動作時に実行され、ＳＭＭレイヤ４０は、ＳＭＭ動作時に実行される。
非ＳＭＭレイヤ３０は、ＳＭＩ発行機能３１０と、Ｄｅｂｕｇ／Ｒｅｌｅａｓｅ切り替え機能３２０と、ＢＩＯＳ例外割り込みハンドリング機能３３０と、ＩＤＴ書き換え機能３４０と、アサーションハンドリング機能３５０と、を備える。
【００１９】
ＳＭＩ発行機能３１０は、ＳＭＩを発行する。上記のようにＳＭＩはＳＭＭへ移入するための割り込みである。本実施形態では、ＳＭＩの発行を、後述するＳＭＭレイヤ４０のデバッグ機能４１０を呼び出すために用いる。
Ｄｅｂｕｇ／Ｒｅｌｅａｓｅ切り替え機能３２０は、現在の動作モードを、詳細解析モード(ｄｅｂｕｇ)と出荷モード(ｒｅｌｅａｓｅ)との何れかに切り替える機能である。この機能は、例えば、何れかの動作モードを設定した設定ファイルをＯＳ上に格納し、その設定に従って動作モードを切り替えるようにしてもよい。あるいは、何れかの動作モードを、ＵＥＦＩ（Unified Extensible Firmware Interface）に関する環境変数であるＵＥＦＩ変数として設定して不揮発な媒体に格納し、その設定を読み込んで動作モードを切り替えるようにしてもよい。また、Ｄｅｂｕｇ／Ｒｅｌｅａｓｅ切り替え機能３２０は、設定ファイル等に基づいて、現在の動作モードを判断することができる。
【００２０】
ＢＩＯＳ例外割り込みハンドリング機能３３０は、例外割り込みの発生時にＢＩＯＳの例外割り込みか、ＯＳの例外割り込みかを判断し、ＯＳ例外割り込みハンドリング機能１２０、または、ＳＭＩ発行機能３１０を呼び出す。次に図２、図３を用いて説明するように、ＢＩＯＳ例外割り込みハンドリング機能３３０は、例外割り込みハンドラのように振る舞う。
ＩＤＴ書き換え機能３４０は、ＩＤＴ１１０を書き換え、ＢＩＯＳ例外割り込みハンドリング機能３３０を動作可能にする。一つの実装形態では、ＩＤＴ書き換え機能３４０は、初期化後のＩＤＴ１１０に登録された所定の例外（例えば、ＰａｇｅＦａｕｔ例外など）について、それらの例外に対応する割り込み番号（割り込みベクタ）と、ＢＩＯＳ例外割り込みハンドリング機能３３０を呼び出すためのメモリアドレスとを対応付けて登録する。つまり、ＩＤＴ書き換え機能３４０は、それらの書き換えられた例外が発生すると、ＢＩＯＳ例外割り込みハンドリング機能３３０が呼び出されるような設定にＩＤＴ１１０を書き換える。
アサーションハンドリング機能３５０は、アサーション発生時にＳＭＩ発行機能３１０を呼び出す機能である。この機能については、後に図５を用いて説明する。
【００２１】
ＳＭＭレイヤ４０は、デバッグ機能４１０を備える。
デバッグ機能４１０は、ＢＩＯＳのデバッグを行うための機能である。デバッグ機能４１０は、一般的なＢＩＯＳが備える機能である。デバッグ機能４１０には、例えば、レジスタダンプ、メモリダンプ、対話型デバッグ機能などが存在する。
【００２２】
＜第一実施形態＞
（ＢＩＯＳ例外割り込みハンドリング機能）
次に第一実施形態におけるデバッグ機能の呼び出し処理について説明する。まず、図２を用いてＢＩＯＳ例外割り込みハンドリング機能３３０について説明する。
図２は、本発明の第一実施形態によるＢＩＯＳ例外割り込みのハンドリングについて説明する図である。
ＢＩＯＳ例外割り込みハンドリング機能３３０は、何らかの例外が発生し呼び出しを受けると、発生した例外の割り込みベクタに基づいて、発生した割り込みがＰａｇｅＦａｕｌｔ割り込みかどうかを判定する（ステップＳ２００）。ＰａｇｅＦａｕｌｔ割り込みの場合（ステップＳ２００；Ｙｅｓ）、ＢＩＯＳ例外割り込みハンドリング機能３３０は、ＯＳ例外割り込みハンドリング機能１２０を呼び出す（ステップＳ２１０）。具体的には、ＢＩＯＳ例外割り込みハンドリング機能３３０は、ＰａｇｅＦａｕｌｔ割り込み用の割り込みハンドラの呼び出しを行う。ここで、ＰａｇｅＦａｕｌｔ割り込みとは、プログラムが物理メモリマップされていない仮想アドレス空間上のページにアクセスしたときにハードウェアが発生する例外割り込みである。ＰａｇｅＦａｕｌｔ割り込みは、プログラムのエラーではないためＢＩＯＳのデバッグ機能を呼び出さない。また、ＢＩＯＳ例外割り込みハンドリング機能３３０は、ＩＤＴ書き換え機能３４０による書き換え前のＩＤＴ１１０に登録されていた例外割り込みベクタと例外割り込みハンドラの呼び出しアドレスの対応テーブルを内部に保持しており、この対応テーブルに基づいて、例外に応じたＯＳ例外割り込みハンドリング機能１２０の呼び出しを行う。
【００２３】
ＰａｇｅＦａｕｌｔ割り込みではない場合（ステップＳ２００；Ｎｏ）、ＢＩＯＳ例外割り込みハンドリング機能３３０は、例外が発生したメモリアドレスがＢＩＯＳのエリア外かどうかを判定する（ステップＳ２２０）。ｘ８６アーキテクチャ等の一般的なＣＰＵにおいては、例外割り込み発生時に、例外割り込み発生時の命令アドレス、例外割り込み要因がＣＰＵのレジスタに格納される。ＢＩＯＳ例外割り込みハンドリング機能３３０は、この例外割り込み発生時の命令アドレスがＢＩＯＳのエリア（コード領域）どうかを確認することで、ＢＩＯＳのエリアで例外割り込みが発生したかを判定することができる。また、ＢＩＯＳのコード領域については、ＢＩＯＳが生成したUEFI Memory Mapを参照することにより判断することができる。
【００２４】
ＢＩＯＳのエリア外の場合（ステップＳ２２０；Ｙｅｓ）、ＢＩＯＳ例外割り込みハンドリング機能３３０は、例外に応じたＯＳ例外割り込みハンドリング機能１２０を呼び出す（ステップＳ２３０）。
ＢＩＯＳのエリア内の場合（ステップＳ２２０；Ｎｏ）、ＢＩＯＳ例外割り込みハンドリング機能３３０は、ＳＭＩ発行機能３１０を呼び出す（ステップＳ２４０）。
このようにＢＩＯＳ例外割り込みハンドリング機能３３０を呼び出し可能な状態とすることにより、ＢＩＯＳのコード領域で例外が発生した場合に、ＳＭＩ発行により、ＳＭＭへ移入することができる。次に図３を用いて、ＢＩＯＳ例外割り込みハンドリング機能３３０を呼び出し可能な状態にするための処理の一例について説明する。
【００２５】
（ＢＩＯＳ例外割り込みハンドリング機能の初期化）
図３は、本発明の第一実施形態によるＯＳ起動時の初期化処理の一例を示すフローチャートである。
図３を用いてＯＳ１０の起動時にＢＩＯＳ例外割り込みハンドリング機能３３０を呼び出し可能とするようにＩＤＴ１１０に登録する処理（初期化）について説明する。
まず、ＯＳ１０は、ＯＳ例外割り込みハンドリング機能１２０を初期化する（ステップＳ３１０）。例えば、ＯＳ１０は、各種の例外が発生した時に割り込みハンドラを呼び出せるように、各種ハンドラを実行可能な状態にする。
次にＯＳ１０は、ＩＤＴ１１０を初期化する（ステップＳ３２０）。例えば、ＯＳ１０は、各種の例外割り込みベクタと対応する例外割り込みハンドラをＩＤＴ１１０に登録する。
次にＯＳ１０は、ＯＳ初期化完了通知機能１３０を実行する。ＯＳ初期化完了通知機能１３０は、ＩＤＴ１１０の初期化完了をＢＩＯＳ２０へ通知する（ステップＳ３３０）。
ＩＤＴ１１０の初期化完了通知を受信したＢＩＯＳ２０は、Ｄｅｂｕｇ／Ｒｅｌｅａｓｅ切り替え機能３２０により、現在の動作モードを確認する（ステップＳ３４０）。現在の動作モードがＲｅｌｅａｓｅ（出荷モード）の場合、本初期化処理を終了する。
現在の動作モードがＤｅｂｕｇ（詳細解析モード）の場合、ＢＩＯＳ２０は、ＩＤＴ書き換え機能３４０を呼び出す（ステップＳ３５０）。ＩＤＴ書き換え機能３４０は、ＢＩＯＳ例外割り込みハンドリング機能３３０を呼び出せるようにＩＤＴ１１０へ登録を行う。例えば、ＩＤＴ書き換え機能３４０は、初期化後のＩＤＴ１１０に対して、所定の割り込みベクタとＢＩＯＳ例外割り込みハンドリング機能３３０のアドレスとを対応付けて登録する。これにより、所定の割り込みベクタが示す例外が発生したときにＢＩＯＳ例外割り込みハンドリング機能３３０が呼び出し可能となる。図２を用いて説明したようにＢＩＯＳ例外割り込みハンドリング機能３３０は、例外割り込みベクタに基づいて、例外の発生エリアがＢＩＯＳのコード領域でなければ、例外に応じたＯＳ例外割り込みハンドリング機能１２０を呼び出し、例外の発生エリアがＢＩＯＳのコード領域であれば、ＳＭＩ発行機能３１０を呼び出す。
【００２６】
（デバッガ呼び出し処理）
次に図４を用いて、ＳＭＩ発行機能３１０が呼び出されたときにＢＩＯＳのデバッガを呼び出す処理について説明する。
図４は、本発明の第一実施形態によるＢＩＯＳのデバッガの呼び出し処理の一例を示すフローチャートである。
図３で説明した処理によりＩＤＴ１１０にＢＩＯＳ例外割り込みハンドリング機能３３０が登録され、例外が発生し、図２で説明した処理によりＳＭＩ発行機能３１０が呼び出されたとする。
まず、ＳＭＩ発行機能３１０は、所定のデバッグ要求情報をＢＩＯＳが確保したメモリ領域に格納する（ステップＳ４１０）。次にＳＭＩ発行機能３１０は、ＳＭＩを発行する（ステップＳ４２０）。例えば、ＰＣＨ（Platform Controller Hub）を備えたチップを搭載している場合、ＰＣＨのAdvanced Power Management Control PortのＩＯアドレスに所定の値を書くことでＳＭＩを発行することができる。
【００２７】
ＳＭＩが発行されると、プロセッサの動作はＳＭＭに遷移する。ＳＭＭレイヤ４０は、ＳＭＩ割り込み発生時の情報（コンテキスト）をメモリ上（SMM protected memory）に保存する（ステップＳ４３０）。このとき、ステップＳ４１０で格納されたデバッグ要求情報もメモリへ保存される。次にＳＭＭレイヤ４０は、メモリを参照し、デバッグ要求情報が格納されているかどうかを判断する（ステップＳ４４０）。
デバッグ要求情報が格納されている場合（ステップＳ４４０；Ｙｅｓ）、ＳＭＭレイヤ４０は、デバッグ機能４１０を実行する（ステップＳ４５０）。デバッグ機能４１０は、レジスタダンプ、メモリダンプを実施する。これにより、詳細解析モードで稼働するシステムでＯＳやアプリケーションが、ＢＩＯＳによって提供されるサービスを利用しているときに障害が発生した場合、ＳＭＭへ移入しデバッガを起動することができる。これにより、ＢＩＯＳのコード領域（ＳＭＭプログラム、非ＳＭＭプログラムを含む）で発生した障害情報を採取することができる。
【００２８】
ステップＳ４５０の実行後、あるいはステップＳ４４０でデバッグ要求無し、と判断された場合、プロセッサは、ステップＳ４３０で格納した情報を参照し、ＳＭＩ割り込み時の状態に復旧し（ステップＳ４６０）、ＳＭＭ終了コマンドを発行する(ステップＳ４７０)。
【００２９】
本実施形態によれば、外部装置を必要とせずにＢＩＯＳで生じた例外のデバッグを行うことができる。特にSMM protected memoryにアクセスして動作するＳＭＭプログラムのデバッグを行うことができる。
【００３０】
＜第二実施形態＞
第一実施形態では、詳細解析モード時にＢＩＯＳ例外割り込みを補足してＳＭＩ発行を行うことにより、ＢＩＯＳのデバッグ機能を呼び出す方法を説明した。第二実施形態では、非ＳＭＭプログラムにアサーション（assertion）を記載して、アサーションの診断結果に基づいてＳＭＩ発行を行う。アサーションとは、プログラムの処理や条件の成立を表明するための手法や機能のことである。本実施形態では、非ＳＭＭプログラムのコードにおける診断を行う部分に以下の記載を挿入する。
ＡＳＳＥＲＴ（ｅｘｐｒｅｓｓｉｏｎ）
アサーションハンドリング機能３５０は、診断の結果（評価式ｅｘｐｒｅｓｓｉｏｎの値）に応じてＳＭＩ発行機能３１０を呼び出す機能を備える。図５を用いて、アサーションハンドリング機能３５０について説明する。
図５は、本発明の第二実施形態によるアサーションハンドリング機能を説明する図である。
アサーションが記載された非ＳＭＭプログラムが実行され、ＡＳＳＥＲＴ（ｅｘｐｒｅｓｓｉｏｎ）を実行しているとする。アサーションハンドリング機能３５０は、アサーションの評価式ｅｘｐｒｅｓｓｉｏｎの値を判断する（ステップＳ５１０）。ｅｘｐｒｅｓｓｉｏｎの値がＴＲＵＥではない場合、アサーションハンドリング機能３５０は、ＳＭＩ発行機能３１０を呼び出す（ステップＳ５２０）。ＳＭＩ発行機能３１０を呼び出した後の処理は、図４で説明したものと同様である。つまり、ＳＭＩ発行により、ＳＭＭへ移入し、デバッグ機能４１０を実行することができる。
【００３１】
非ＳＭＭ３０レイヤ３０が、アサーションハンドリング機能３５０を備えることにより、例えば、非ＳＭＭプログラムからＳＭＭプログラムを呼び出す箇所などにアサーションを記載することで、SMM protected memoryを含むＢＩＯＳのコード領域で発生した障害情報を採取することができる。また、第二実施形態のデバッガ呼び出し方法は、出荷モードにも適用することができる。
【００３２】
さらに、アサーションチェックを拡張することにより、解析性と可用性を向上することが可能である。図６を用いて、拡張されたアサーションに用いるパラメータを説明する。
図６は、本発明の第二実施形態によるアサーションに用いるパラメータの一例を示す図である。
例えば、非ＳＭＭプログラムの診断を行う部分に以下の拡張されたアサーションの記載を行う。
ＡＳＳＥＲＴ＿ＥＸ（ｅｘｐｒｅｓｓｉｏｎ，ｄｅｂｕｇ＿ｐｏｌｉｃｙ，ｄｅｂｕｇ＿ｉｎｔｅｒａｃｔｉｖｅ，ｏｕｔｐｕｔ＿ｄａｔａ，ｒｅｃｏｖｅｒｙ）
上記引数のうちｅｘｐｒｅｓｓｉｏｎには評価式を設定する。また、ｄｅｂｕｇ＿ｐｏｌｉｃｙには、出荷モード時の動作を設定する。例えば、出荷モード時にデバッグを実施するか（ｒｅｌｅａｓｅ＿ｍｏｄｅ＿ｄｅｂｕｇ）、リカバリのみを実施するか（ｒｅｌｅａｓｅ＿ｍｏｄｅ＿ｒｅｃｏｖｅｒｙ＿ｏｎｌｙ）、何もしないか（ｒｅｌｅａｓｅ＿ｍｏｄｅ＿ｎｏｎｅ）を設定する。ｄｅｂｕｇ＿ｉｎｔｅｒａｃｔｉｖｅには、対話型デバッグを行うか否かを設定する。ｏｕｔｐｕｔ＿ｄａｔａには、解析に必要なデータを設定する。ｒｅｃｏｖｅｒｙには、継続運用を行うか（ｒｅｃｏｖｅｒｙ＿ｍｏｄｅ＿ｎｅｅｄ）、ＯＳダンプを行うか（ｒｅｃｏｖｅｒｙ＿ｍｏｄｅ＿ｄｕｍｐ）、何もしないか（ｒｅｃｏｖｅｒｙ＿ｍｏｄｅ＿ｎｏｎｅ）を設定する。なお、継続運用を行う設定の場合には、リカバリ処理の内容（アサーション要因を解決するための式）を設定することができる（ｒｅｃｏｖｅｒｙ＿ｅｘｐｒｅｓｓｉｏｎ）。
【００３３】
（デバッガ呼び出し処理）
次に図７、図８を用いて、拡張されたアサーション（ＡＳＳＥＲＴ＿ＥＸ）を用いたデバッガ呼び出し処理についてより具体的に説明する。
図７、図８は、それぞれ、本発明の第二実施形態によるＢＩＯＳのデバッガの呼び出し処理の一例を示す第１のフローチャート、第２のフローチャートである。
拡張されたアサーションが記載された非ＳＭＭプログラムが実行されているとする。アサーションハンドリング機能３５０は、アサーションの記載箇所ごとに以下の処理を実行する。
まず、アサーションハンドリング機能３５０は、ＡＳＳＥＲＴ＿ＥＸの評価式ｅｘｐｒｅｓｓｉｏｎの値がＴＲＵＥか判断する（ステップＳ７１０）。ｅｘｐｒｅｓｓｉｏｎの値がＴＲＵＥの場合（ステップＳ７１０；Ｙｅｓ）、本フローチャートの処理を終了する。ｅｘｐｒｅｓｓｉｏｎの値がＦＡＬＳＥの場合（ステップＳ７１０；Ｎｏ）、デバッグ処理が開始される。例えば、ｅｘｐｒｅｓｓｉｏｎに（ｖａｌ＝＝１）と記載した場合、ｖａｌが１以外であれば、ｅｘｐｒｅｓｓｉｏｎの値がＦＡＬＳＥとなるので、アサーションハンドリング機能３５０が、以下の処理を開始する。
【００３４】
まず、アサーションハンドリング機能３５０は、Ｄｅｂｕｇ／Ｒｅｌｅａｓｅ切り替え機能３２０を用いて、現在の動作モードを取得する（ステップＳ７２０）。アサーションハンドリング機能３５０は、現在の動作モードがＲｅｌｅａｓｅかつＡＳＳＥＲＴ＿ＥＸのｄｅｂｕｇ＿ｐｏｌｉｃｙがｒｅｌｅａｓｅ＿ｍｏｄｅ＿ｎｏｎｅであるかどうかを判断する（ステップＳ７３０）。この条件を満たす場合（ステップＳ７３０；Ｙｅｓ）、本フローチャートの処理を終了する。条件を満たさない場合（ステップＳ７３０；Ｎｏ）、アサーションハンドリング機能３５０は、ＳＭＩ発行機能３１０を呼び出す（ステップＳ７４０）。すると、図４を用いて説明したように、ＳＭＩ発行機能３１０は、デバッグ要求情報をメモリに格納し、ＳＭＩを発行する。ＳＭＩが発行されると、プロセッサの動作はＳＭＭに遷移する。
【００３５】
ＳＭＭレイヤ４０は、ＳＭＩ割り込み発生時の情報（コンテキスト）をメモリ上（SMM protected memory）に保存する（ステップＳ７５０）。このとき、ＳＭＩ発行機能３１０が格納したデバッグ要求情報もメモリへ保存される。次にＳＭＭレイヤ４０は、メモリを参照し、デバッグ要求情報が格納されているかどうかを判断する（ステップＳ７６０）。デバッグ要求情報が格納されていない場合（ステップＳ７６０；Ｎｏ）、ステップＳ８６０以降の処理を行う（後述）。
【００３６】
デバッグ要求情報が格納されている場合（ステップＳ７６０；Ｙｅｓ）、ＳＭＭレイヤ４０は、デバッグ機能４１０を実行する。デバッグ機能４１０は、ステップＳ７２０でＤｅｂｕｇ／Ｒｅｌｅａｓｅ切り替え機能３２０により取得した現在の動作モードの情報を取得する（ステップＳ７７０）。デバッグ機能４１０は、現在の動作モードがＤｅｂｕｇかつＡＳＳＥＲＴ＿ＥＸのｄｅｂｕｇ＿ｉｎｔｅｒａｃｔｉｖｅにｔｒｕｅが設定されているかどうかを判断する（ステップＳ７８０）。この条件を満たす場合（ステップＳ７８０；Ｙｅｓ）、デバッグ機能４１０は、対話型デバッグ機能を実行する（ステップＳ７９０）。これにより、ユーザは、対話型でデバッグを行うことができる。
【００３７】
条件を満たさない場合（ステップＳ７８０；Ｎｏ）、デバッグ機能４１０は、現在の動作モードがＲｅｌｅａｓｅかつＡＳＳＥＲＴ＿ＥＸのｒｅｌｅａｓｅ＿ｍｏｄｅ＿ｒｅｃｏｖｅｒｙ＿ｏｎｌｙにｆａｌｓｅが設定されているかどうかを判断する（ステップＳ８００）。この条件を満たす場合（ステップＳ８００；Ｙｅｓ）、デバッグ機能４１０は、ＡＳＳＥＲＴ＿ＥＸのｏｕｔｐｕｔ＿ｄａｔａで指定された情報を表示する（ステップＳ８１０）。例えば、デバッグに必要な値として変数ｖａｌ＿ａ、ｖａｌ＿ｂ、ｖａｌ＿ｃがｏｕｔｐｕｔ＿ｄａｔａに（ｖａｌ＿ａ；ｖａｌ＿ｂ；ｖａｌ＿ｃ）のように設定されている場合、プログラム実行時のｖａｌ＿ａ、ｖａｌ＿ｂ、ｖａｌ＿ｃの値が表示される。
ステップＳ８１０の実行後、又はステップＳ８００の判断がＮｏの場合、次にデバッグ機能４１０は、ＡＳＳＥＲＴ＿ＥＸのｒｅｃｏｖｅｒｙにｒｅｃｏｖｅｒｙ＿ｍｏｄｅ＿ｎｅｅｄが設定されているかどうかを判断する（ステップＳ８２０）。この条件を満たす場合、デバッグ機能４１０は、ｒｅｃｏｖｅｒｙ＿ｅｘｐｒｅｓｓｉｏｎで指定されたリカバリ処理を実施する（ステップＳ８３０）。例えば、ｒｅｃｏｖｅｒｙ＿ｅｘｐｒｅｓｓｉｏｎに（ｖａｌ＿ａ＝２；）と設定されている場合、ステップＳ８３０では、ｖａｌ＿ａ＝２が実行される。
【００３８】
条件を満たさない場合（ステップＳ８２０；Ｎｏ）、デバッグ機能４１０は、ＡＳＳＥＲＴ＿ＥＸのｒｅｃｏｖｅｒｙにｒｅｃｏｖｅｒｙ＿ｍｏｄｅ＿ｄｕｍｐが設定されているかどうかを判断する（ステップＳ８４０）。この条件を満たす場合、デバッグ機能４１０は、ＯＳダンプ割り込みを実行する（ステップＳ８５０）。一般に、ＯＳダンプ割り込みには、ＮＭＩ（Non-Maskable Interrupt）が使用される。なお、ＮＭＩは一般的なＰＣＨの機能を使うことで発行可能である。
【００３９】
ステップＳ７９０、ステップＳ８３０、ステップＳ８５０の何れかの実行後、又はステップＳ７６０かステップＳ８４０の判断がＮｏの場合、ＳＭＭレイヤ４０は、ステップＳ７５０で格納した情報を参照し、ＳＭＩ割り込み時の状態に復旧し（ステップＳ８６０）、ＳＭＭ終了コマンドを発行する(ステップＳ８７０)。
【００４０】
本実施形態によれば、出荷モードにおいても、ＢＩＯＳのコード領域（ＳＭＭプログラム、非ＳＭＭプログラムを含む）で発生した障害情報を採取することができる。さらに拡張されたアサーション（ＡＳＳＥＲＴ＿ＥＸ）を使用した場合には、詳細な動作指定とリカバリ処理を設定することができるので、解析性と可用性を両立させることが可能である。特に出荷モードにおいてシステムの通常運用を継続しつつ、問題解析に必要なデータを採取することができる。
【００４１】
＜他の実施形態＞
なお、図１では、第一実施形態と第二実施形態の両方の機能を備えたデバッグシステム１の構成例を示したが、第一実施形態の機能のみを実装した構成とすることが可能である。具体的には、一つの実施形態では、図９に示すようにデバッグシステム１Ａを構成することが可能である。デバッグシステム１Ａにおいて、ＯＳ１０は、ＩＤＴ１１０と、ＯＳ例外割り込みハンドリング機能１２０と、ＯＳ初期完了通知機能１３０とを備える。ＢＩＯＳ２０において、非ＳＭＭレイヤ３０は、ＳＭＩ発行機能３１０と、Ｄｅｂｕｇ／Ｒｅｌｅａｓｅ切り替え機能３２０と、ＢＩＯＳ例外割り込みハンドリング機能３３０と、ＩＤＴ書き換え機能３４０とを備え、ＳＭＭレイヤ４０はデバッグ機能４１０を備える。
【００４２】
また、第二実施形態の機能のみを実装した図１０に示すデバッグシステム１Ｂの構成とすることが可能である。デバッグシステム１ＢではＢＩＯＳ２０において、非ＳＭＭレイヤ３０は、ＳＭＩ発行機能３１０と、Ｄｅｂｕｇ／Ｒｅｌｅａｓｅ切り替え機能３２０と、アサーションハンドリング機能３５０とを備え、ＳＭＭレイヤ４０は、デバッグ機能４１０を備える。
【００４３】
図１１は、本発明の各実施形態によるデバッグシステムの最小構成を示す図である。
図１１に示すようにデバッグシステム５０は、少なくとも例外検出部５０１と、ＳＭＩ発行部５０２と、デバッグ機能部５０３を備える。
例外検出部５０１は、ＢＩＯＳのコード領域で発生する例外を検出する。例外検出部５０１は、上記実施形態のＢＩＯＳ例外割り込みハンドリング機能３３０、アサーションハンドリング機能３５０に対応する。
ＳＭＩ発行部５０２は、例外検出部５０１が例外を検出するとＳＭＩを発行する。ＳＭＩ発行部５０２は、ＳＭＩ発行機能３１０に対応する。
デバッグ機能部５０３は、ＳＭＭでデバッグ機能を実行する。デバッグ機能部５０３は、デバッグ機能４１０に対応する。
一つの実施形態では、デバッグシステム５０は、上記実施形態のＢＩＯＳ２０の非ＳＭＭレイヤ３０に実装される。
【００４４】
図１２は、本発明の各実施形態におけるデバッグシステムを搭載した情報処理装置のハードウェア構成の一例を示す図である。
コンピュータ９００は、ＣＰＵ９０１、主記憶装置９０２、補助記憶装置９０３、入出力インタフェース９０４、通信インタフェース９０５を備える。
ＣＰＵ９０１は、ＳＭＭでの動作が可能なプロセッサである。ＣＰＵ９０１は、例えば、インテル社のＩｎｔｅｌ６４およびＩＡ−３２アーキテクチャのＣＰＵである。上述のＯＳ１０、ＢＩＯＳ２０は、プログラムの形式で補助記憶装置９０３に格納されている。そして、ＣＰＵ９０１は、プログラムを補助記憶装置９０３から読み出して主記憶装置９０２に展開し、当該プログラムに従って上記処理を実行する。また、ＣＰＵ９０１は、プログラムに従って、記憶領域を主記憶装置９０２に確保する。
【００４５】
なお、少なくとも１つの実施形態において、補助記憶装置９０３は、例えば、マザーボード上のＲＯＭであって、ＢＩＯＳ２０は、このＲＯＭに記憶されている。また、他の１つの実施形態において、補助記憶装置９０３は、一時的でない有形の媒体の一例である。一時的でない有形の媒体の他の例としては、入出力インタフェース９０４を介して接続される磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等が挙げられる。また、このプログラムが通信回線によってコンピュータ９００に配信される場合、配信を受けたコンピュータ９００が当該プログラムを主記憶装置９０２に展開し、上記処理を実行しても良い。また、当該プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、当該プログラムは、前述した機能を補助記憶装置９０３に既に記憶されている他のプログラムとの組み合わせで実現するもの、いわゆる差分ファイル（差分プログラム）であっても良い。また、補助記憶装置９０３は、ＣＰＵ９０１を備える演算装置とは別体として構成されていてもよい。
【００４６】
その他、本発明の趣旨を逸脱しない範囲で、上記した実施の形態における構成要素を周知の構成要素に置き換えることは適宜可能である。また、この発明の技術範囲は上記の実施形態に限られるものではなく、本発明の趣旨を逸脱しない範囲において種々の変更を加えることが可能である。
UEFI Memory Mapは、ＢＩＯＳに割り当てられたアドレス領域の範囲の一例である。
【符号の説明】
【００４７】
１、１Ａ、１Ｂ、５０・・・デバッグシステム
１０・・・ＯＳ
１１０・・・ＩＤＴ
１２０・・・ＯＳ例外割り込みハンドリング機能
１３０・・・ＯＳ初期化完了通知機能
２０・・・ＢＩＯＳ
３０・・・非ＳＭＭレイヤ
３１０・・・ＳＭＩ発行機能
３２０・・・Ｄｅｂｕｇ／Ｒｅｌｅａｓｅ切り替え機能
３３０・・・ＢＩＯＳ例外割り込みハンドリング機能
３４０・・・ＩＤＴ書き換え機能
３５０・・・アサーションハンドリング機能
４０・・・ＳＭＭレイヤ
４１０・・・デバッグ機能
５０１・・・例外検出部
５０２・・・ＳＭＩ発行部
５０３・・・デバッグ機能部
９００・・・コンピュータ
９０１・・・ＣＰＵ
９０２・・・主記憶装置
９０３・・・補助記憶装置
９０４・・・入出力インタフェース
９０５・・・通信インタフェース
【図１】
2020086872.tif 000003
【図２】
2020086872.tif 000004
【図３】
2020086872.tif 000005
【図４】
2020086872.tif 000006
【図５】
2020086872.tif 000007
【図６】
2020086872.tif 000008
【図７】
2020086872.tif 000009
【図８】
2020086872.tif 000010
【図９】
2020086872.tif 000011
【図１０】
2020086872.tif 000012
【図１１】
2020086872.tif 000013
【図１２】
2020086872.tif 000014