6.5 ハイパーバイザのデバッグについて

仮想化拡張機能をサポートしている ARM プロセッサには、ハイパーバイザの下で複数のゲストオペレーティングシステムを実行する機能があります。ハイパーバイザは、ゲストオペレーティングシステム間を調停し、ハードウェアへのアクセスを制御するソフトウェアです。
DS-5 デバッガには、ベアメタルハイパーバイザのデバッグのベーシックサポートが用意されています。仮想化拡張機能をサポートしているプロセッサと接続すると、デバッガによって、ハイパーバイザとゲストメモリを区別し、ハイパーバイザモード時や特定のゲストオペレーティングシステム内でのみ適用されるブレークポイントを設定できます。
一般的にハイパーバイザは、ハイパーバイザ自体の個別のアドレス空間だけでなく、各ゲストオペレーティングシステムのアドレス空間も提供します。特に情報が与えられない限り、デバッガによるすべてのメモリアクセスは現在のコンテキスト内で発生します。ハイパーバイザモードで停止すると、メモリアクセスではハイパーバイザのメモリ空間が使用され、ゲストオペレーティングシステムで停止すると、ゲストオペレーティングシステムのアドレス空間が使用されます。特定のアドレス空間へのアクセスを強制するには、ハイパーバイザについては、接頭辞 H: を、ゲストオペレーティングシステムについては接頭辞 N: をアドレスの前に付ける必要があります。ゲストオペレーティングシステムのアドレス空間にアクセスできるのは、そのゲストオペレーティングシステムが現時点でハイパーバイザ内で実行するようにスケジュールされている場合だけです。別のゲストオペレーティングシステムを指定することはできません。
同様に、ハードウェアブレークポイントとソフトウェアブレークポイントは、同じアドレス接頭辞を使用してハイパーバイザまたはゲストオペレーティングシステムで一致するように設定できます。アドレス接頭辞を使用しない場合、ブレークポイントは、最初に設定されたときに最新となっているアドレス空間に適用されます。ソフトウェアブレークポイントがハイパーバイザとゲストオペレーティングシステム間で共有されているメモリ内で設定されていると、ブレークポイントが誤ったモードからヒットすることがあります。その場合は、デバッガが停止理由としてブレークポイントを認識できない可能性があります。
ハードウェアブレークポイントについてのみ(ソフトウェアブレークポイントではない)、特定のゲストオペレーティングシステム内で一致するようにブレークポイントを追加設定できます。この機能では、特定のゲストオペレーティングシステムが実行されているときに見分けるための、アーキテクチャ上で定義されている仮想マシン ID(VMID)レジスタが使用されます。ハイパーバイザは、一意の VMID を各ゲストオペレーティングシステムに割り当て、そのゲストオぺレーティングシステムの実行時に VMID レジスタ内でこれを設定する役割を担います。この機能を使用する場合は、ユーザがデバッグする各ゲストオペレーティングシステムにどの VMID が関連付けられているかを把握して下さい。VMID を知っていると、[Breakpoints]ビュー内で、または break-stop-on-vmid コマンドを使用してこの VMID にブレークポイントを適用できます。
複数のゲストオペレーティングシステムが実行されているシステムをデバッグする場合は、set print current-vmid 設定を有効にして、デバッガが停止し、現在の VMID が変更されたときにコンソールで通知を受け取ることもできます。また、$vmid デバッガ変数を使用して DS-5 スクリプト内で VMID を取得できます。
関連する参考文書
10.6 [Commands]ビュー
10.7 [Debug Control]ビュー
関連情報
DS-5 デバッガコマンド
非機密扱いPDF file icon PDF 版ARM DUI0446VJ
Copyright © 2010-2015 ARM.All rights reserved.