JP2000066923A - エミュレータにおける全命令トレースの制御方法 - Google Patents

エミュレータにおける全命令トレースの制御方法

Info

Publication number
JP2000066923A
JP2000066923A JP10239249A JP23924998A JP2000066923A JP 2000066923 A JP2000066923 A JP 2000066923A JP 10239249 A JP10239249 A JP 10239249A JP 23924998 A JP23924998 A JP 23924998A JP 2000066923 A JP2000066923 A JP 2000066923A
Authority
JP
Japan
Prior art keywords
instruction
trace
flag
tracing
emulator
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP10239249A
Other languages
English (en)
Other versions
JP3480903B2 (ja
Inventor
Yasushi Sugimura
康 杉村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP23924998A priority Critical patent/JP3480903B2/ja
Publication of JP2000066923A publication Critical patent/JP2000066923A/ja
Application granted granted Critical
Publication of JP3480903B2 publication Critical patent/JP3480903B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】 従来の処理では実現が不可能であったエミュ
レータにおける全命令トレースをすべて正しく適確に行
うことができるエミュレータにおける全命令トレースの
制御方法を提供する。 【解決手段】 全命令トレース実行中時にエミュレータ
がCPUのトレースフラグをオフにしようとしても、全
命令トレース用シングルステップ割り込み処理プログラ
ムがそれを阻止し、全命令トレースデータの収集を行
い、また全命令トレース仮停止中時にエミュレータがC
PUのトレースフラグをオンにしても、全命令トレース
用シングルステップ割り込み処理プログラムがオフに戻
し、この時全命令トレースデータの収集を行わない。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、情報処理装置内の
中央演算ユニット(以下、CPUと略記する)が全命令
トレースを行い、このトレース対象のオペレーティング
システムが他のシステムのシステムコールの動作をエミ
ュレートするエミュレータにおける全命令トレースの制
御方法に関し、特に電子計算機、ワードプロセッサ、電
子交換機、ワークステーション等の情報処理装置内のC
PUの全命令トレースの制御方法に関する。
【0002】
【従来の技術】一般に、性能評価等の目的のため、評価
対象のオペレーティングシステムのプログラム(該オペ
レーティングシステム上で動作するすべてのアプリケー
ションプログラムを含み、全命令トレースを行うための
プログラムを除く、以下省略)の命令群の内、CPUが
実行するすべての命令に関する情報(実行された命令の
内容、命令の長さ、レジスタの変化状況、変化したレジ
スタの内容、その他必要に応じてプログラムの管理単位
であるスレッドの情報等の情報)を1命令の実行直前毎
に収集することを、全命令トレースと言い、その全命令
トレースによって収集された情報を全命令トレースデー
タと言う。上記プログラムは、関数(プログラムからコ
ールされ、入り口が1つであるプログラム)並びに割り
込み処理プログラム(割り込み等を契機としてコールさ
れるプログラムであり、通常はプログラムからはコール
されないプログラム)からなり、全命令トレースにおい
てはそれらのすべてがトレース対象である(関数のみの
トレースしか行わないものは、全命令トレースとは言わ
ない)。
【0003】シングルステップ割り込み機能を持つCP
Uの元での全命令トレースにおいては、関数に関しては
予めCPUのトレースフラグをONとしておき、割り込
み処理に関しては、その先頭でCPUのトレースフラグ
をONとする等によって、CPUに1命令の実行直前毎
にシングルステップ割り込みを起こさせることが一般的
に行われている。
【0004】CPUが評価対象のオペレーティングシス
テムの1命令を実行する直前毎に、CPU自身に起こさ
せるシングルステップ割り込みを利用して、CPUは全
命令トレース用シングルステップ割り込み処理プログラ
ムに制御を渡し、そのプログラムが全命令トレースデー
タを収集し、一旦全命令トレースデータバッファという
メモリ上のエリアに格納して、上記割り込み元にリター
ンし、リターン後にCPUは、割り込まれた命令を1命
令実行し、その実行が終わって、次の1命令を実行する
直前に、上記と同様にシングルステップ割り込みを起こ
させることにより、評価対象のオペレーティングシステ
ムのプログラムの命令群の内、実行されるすべての命令
の全命令トレースが行われる。
【0005】上記全命令トレースにおいては、一般に、
何らかの手法で全命令トレースの開始点を検出した時点
(その手法は多数あり、任意、以下全命令トレース開始
時点と略記)で、CPUのトレースフラグをONとし、
何らかの手法で全命令トレースの停止点を検出した時点
(その手法は多数あり、任意、以下全命令トレース停止
し時点と略記)でCPUのトレースフラグをOFFとす
ることにより、その時実行中のプログラムの全命令トレ
ースを制御するが、以下に示す手法の中で示すように、
それだけでは全命令トレース開始時点〜全命令トレース
終了時点までのすべてのスレッドや割り込み処理の全命
令トレースを行うことができないので、従来より、一般
に全命令トレースにおいては下記の2つの手法を併用す
る。
【0006】(1)全命令トレースは、割り込み処理に
おいても、全命令トレースデータを収集しなければなら
ないが、割り込み処理においては、一般に、CPUが、
割り込まれた時のトレースフラグをスタックに退避し、
トレースフラグをOFFとした後に、割り込み処理プロ
グラムに制御を渡す。従って、何もしないと、割り込み
処理プログラムの命令の実行においてシングルステップ
割り込みが発生しないため、全命令トレースデータを収
集することができない。それに対処するために、上記全
命令トレース開始時点で、外部変数「全命令トレース実
行中」に1(初期値は0)を設定し、上記全命令トレー
ス停止時点で、該外部変数の値を0に戻し、割り込み処
理の先頭で、該外部変数の値をチェックし、該値が1の
時のみ、CPUのトレースフラグに1を設定することに
より、全命令トレース実行中にのみ、割り込み処理の部
分も全命令トレースを行う(当然ながら、シングルステ
ップ割り込みは、全命令トレースの情報を収集する処理
であるので、上記処理は行わない。シングルステップ割
り込み処理だけは、全命令トレース対象外である)。
【0007】(2)一般にオペレーティングシステム内
にはスレッド(独立して走行するプログラムの単位)が
多数存在し、オペレーティングシステムは、それらのス
レッドを適宜切り換えて実行することにより、CPUの
有効利用を図る。しかし、CPUが1時点で実行してい
るスレッドは、ただ1つである。そのため、その時実行
されていないスレッドは、その実行は一旦中断されてい
る。そして、その中断されたスレッドを適宜再開するた
めに、中断時点のレジスタ等の情報を、そのスレッドの
スタックエリアに退避している。その中には、CPUの
トレースフラグも含まれる。従って、何もしないと、現
在のスレッドの実行が中断され、既に中断されているス
レッドを再開する時に、スタックエリアに退避されてい
るトレースフラグ等は、中断直前の状態に回復され、そ
の時に、トレースフラグがOFFになってしまうため、
全命令トレースが行われない結果となる。それらを回避
する(すべてのスレッドの全命令トレースを実行させ
る)ために、一般に、上記トレース開始時点において、
すべてのスレッドのスタックエリアに既に退避されてい
るトレースフラグをすべてONにし、上記トレース停止
時点において、OFFに戻すことにより、全命令トレー
ス実行中に、すべてのスレッドの全命令トレースが行わ
れるようにしている。上記スタックエリアは、一般にカ
ーネルスタックエリアと呼ばれ、そのスタックエリア
は、カーネル空間(全命令トレース用シングルステップ
割り込み処理プログラム等のカーネル関連プログラムか
ら可視である空間)にあり、スレッド毎に予め決められ
た構造体内にあるので、上記のように、トレース開始時
点とトレース停止時点に、一度に変更することが可能で
ある。
【0008】
【発明が解決しようとする課題】しかしながら、最近に
おいては、1つのオペレーティングシステム内において
別のオペレーティングシステムのシステムコールの動作
を、ユーザ空間上でエミュレートするエミュレータが実
現されている。該エミュレータは、オペレーティングシ
ステムが動作するカーネル空間で動作するのではなく、
スレッド等毎にあるユーザ空間上で動作し、そのため、
そのスタック情報は、ユーザスタック(上記カーネルス
タックとは別のユーザ毎のスタック)に格納される。
【0009】一方、他のオペレーティングシステムのシ
ステムコールをユーザ空間上でエミュレーションするた
めには、システムコールで呼ばれるプログラムはシステ
ム空間になければならないので、システムコールで一旦
システム空間に行った時に、そのシステムコールルーチ
ン等によりスタック等に退避された情報を、ユーザスタ
ック上にコピーし、その後、ユーザ空間にジャンプし
て、システムコールのエミュレート動作を行い、最後
に、上記ユーザスタック上にコピーされた情報を回復
することによって、上記システムコールの発行元にリタ
ーンする。そしてその回復される情報の中に、トレース
フラグが含まれる。即ち、そのトレースフラグの情報
は、ユーザスタック内にあり、ユーザスタック内のどの
位置にあるかは、そのスレッドでどのようにユーザスタ
ックが使用されたかに依存し(上記のカーネルスタック
のように、スレッド毎の特定の位置にある訳ではないの
で)、従来の技術で述べた手法のように、トレース開始
時点やトレース終了時点では、上記のトレースフラグの
アドレスを特定することができないので、変更すること
ができない(そのスタックを実際に退避回復する場所で
しか、その位置を知ることができない)。
【0010】従って、従来の手法においては、別のオペ
レーティングシステムのシステムコールの動作をユーザ
空間上でエミュレートするエミュレータが搭載されてい
るシステムにおいては、上記ののトレースフラグの回
復が行われた時点以降はトレースフラグがOFFになっ
てしまい、そのため、そのエミュレータが動作している
スレッドの全命令トレースを行うことができないという
問題がある。
【0011】本発明は、上記に鑑みてなされたもので、
その目的とするところは、従来の処理では実現が不可能
であったエミュレータにおける全命令トレースをすべて
正しく適確に行うことができるエミュレータにおける全
命令トレースの制御方法を提供することにある。
【0012】
【課題を解決するための手段】上記目的を達成するた
め、請求項1記載の本発明は、情報処理装置内の中央演
算ユニットが全命令トレースを行い、このトレース対象
のオペレーティングシステムが他のシステムのシステム
コールのエミュレーションを行い、このエミュレーショ
ンを含むすべての命令の実行の全命令トレースを行う場
合において、全命令トレース用シングルステップ割り込
み処理プログラムの外部変数の計数手段としてカウンタ
を設け、全命令トレースの実行中においては、前記プロ
グラムがエミュレーションにおけるトレースフラグをオ
フにする命令を検出した場合、このオフを阻止し、前記
カウンタの値に1を加算し、全命令トレースの終了以降
(以下、全命令トレース仮停止中と略記)においては、
前記カウンタの値が0でない場合に、前記プログラムが
シングルステップ割り込みの発生を監視し、該割り込み
が発生した場合は、トレースフラグをオフとし、前記カ
ウンタから1を減算し、この結果のカウンタの値が0で
ない場合は、前記監視を継続し、この結果のカウンタの
値が0である場合は、前記監視を停止して、全命令トレ
ースのすべての動作を終了することを要旨とする。
【0013】請求項1記載の本発明にあっては、全命令
トレース実行中時にエミュレータがCPUのトレースフ
ラグをオフにしようとしても、全命令トレース用シング
ルステップ割り込み処理プログラムがそれを阻止し、全
命令トレースデータの収集を行い、また全命令トレース
仮停止中時にエミュレータがCPUのトレースフラグを
オンにしても、全命令トレース用シングルステップ割り
込み処理プログラムがオフに戻し、この時全命令トレー
スデータの収集を行わないため、エミュレータにおける
全命令トレースを適確に行うことができる。
【0014】
【発明の実施の形態】本発明の実施形態を説明する前
に、まず上述したように、従来、エミュレータが動作し
ているスレッドの全命令トレースを行うことができない
という問題を解決するために利用する4つの事実および
本発明の概要について説明する。この4つの事実は以下
の通りである。
【0015】上記トレースフラグの回復は、POPF
Dという特定の命令によってのみ可能であり、エミュレ
ータは上記命令によりトレースフラグを回復する。
【0016】上記の特定の命令においては、トレース
フラグに設定される値は、(命令仕様に基づいて)CP
Uのスタックポインタが示すアドレスの位置に存在す
る。
【0017】上記のスタックポインタの内容は、上
記命令を実行する直前でシングルステップの割り込みが
発生した場合、CPUの機能により、スタック内に格納
される。
【0018】従来の手法においては、上記の特定の命
令の実行の直前のシングルステップ割り込みまでは、全
命令トレースが正常に行われる(上記命令の次の命令以
降からシングルステップ割り込みが起こらなくなる)。
【0019】上記の事実にしたがって、全命令トレース
開始時点から全命令トレース仮停止時点の間(以下、全
命令トレース実行中時と略記)において以下を行う。
【0020】(1)命令が実行される直前に発生するシ
ングルステップ割り込みによって制御が渡される「全命
令トレース用シングルステップ割り込み処理プログラ
ム」は、全命令トレース実行中時においては、その時に
実行されようとした命令が、上記POPFDであるかど
うかをチェックし、上記の特定の命令でないなら、従来
と同じ処理を行う。上記の特定の命令であれば、従来の
処理を行う前に、以下を実施する。
【0021】(A) 「”CPUによって退避されたスタッ
クポインタ”の内容が示すアドレスのエリアの内容」
(即ちトレースフラグが格納されているエリアの内容)
をチェックし、 (a) トレースフラグがONであるなら、そのエリアの内
容のトレースフラグをONとする。これによって、全命
令トレース用シングルステップ割り込み処理プログラム
からリターンした時に実行されるPOPFDによってC
PUのトレースフラグがONに設定される。 (b) トレースフラグがOFFであるなら、何もしない。 以上によって、エミュレータを含むすべての全命令トレ
ースが可能となる。
【0022】しかしながら、上記の実現だけでは、次の
問題が発生する。
【0023】上記(A)によってONが設定されたトレ
ースフラグは、エミュレータによってスタックに退避さ
れる場合があるので、全命令トレース停止時に従来の方
法によって、すべてのスレッドのトレースフラグをOF
Fにしても、その後に、上記で退避されていたトレース
フラグが回復された時点で、再び、シングルステップ割
り込みが発生してしまい、何もしないと再び全命令トレ
ースが実施されてしまう。
【0024】それらに対処するために、以下を行う。
【0025】(2)外部変化「トレースON化累積カウ
ンタ」「全命令トレース仮停止」を設け、予め0に初期
設定しておく。
【0026】(3)上記(1)(A)(a)で、「トレ
ースON化累積カウンタ」に1を加算する。
【0027】(4)全命令トレース仮停止時に、「トレ
ースON化累積カウンタ」が0であるかどうかをチェッ
クし、0でないなら、「全命令トレース実行中」に0を
設定して、従来の全命令トレースの停止を行うだけでな
く、「全命令トレース仮停止」に1を設定する。
【0028】0なら、「全命令トレース実行中」に0を
設定して、従来の全命令トレースの停止を行う。
【0029】(5)全命令トレース用シングルステップ
割り込み処理プログラムは、「全命令トレース仮停止」
が1であるかどうかをチェックし、0であるなら、従来
の処理と、上記(1)の処理を行うが、1である場合
は、従来の処理も、上記(1)も行わず(全命令トレー
スデータの収集等は行わず)以下を行う。
【0030】(a) スタックエリアに退避されているエラ
ーフラグの内容をOFFとすることにより、全命令トレ
ース用シングルステップ割り込み処理プログラムからリ
ターンした時に、CPUのトレースフラグをOFFとさ
せる。 (b) 「トレースON化累積カウンタ」より1を減算す
る。 (c) 上記(b)の結果が0であるなら、「全命令トレー
ス仮停止」に0を設定することにより、全命令トレース
が完全に停止する。 (d) 全命令トレース用シングルステップ割り込み処理プ
ログラムよりリターンする。
【0031】以上により、オペレーティングシステム内
に別のオペレーティングシステムのシステムコールの動
作をユーザ空間上でエミュレートするエミュレータが搭
載されていても、エミュレータの動作を含んだ全命令ト
レースを正しく行うことが可能となる。
【0032】本発明においては、上述したように、オペ
レーティングシステム内に別のオペレーティングシステ
ムのシステムコールの動作をユーザ空間上でエミュレー
トするエミュレータが搭載されている場合に、全命令ト
レース実行中時の場合は、エミュレータがトレースフラ
グをOFFにしようとしても、それを実施する命令の実
行の直前で、全命令トレース用シングルステップ割り込
み処理プログラムがそれを阻止し、また全命令トレース
仮停止時の後に、エミュレータがトレースフラグをON
にしても、そのONによる(次の命令が実行される直前
に発生する)シングルステップ割り込みによる全命令ト
レース用シングルステップ割り込み処理プログラムの走
行で、全命令トレースデータを収集せず、且つ、該割り
込み処理プログラムからリターンした時に、トレースフ
ラグがOFFになるように、スタックの内容を変更する
ので、エミュレータの動作を含んだ全命令トレースを正
しく行うことが可能となる。
【0033】次に、図面を用いて、本発明の一実施形態
に係るエミュレータにおける全命令トレースの制御方法
について説明する。図1は、本発明の一実施形態に係る
エミュレータにおける全命令トレースの制御方法を実施
する装置の構成を示すブロック図である。同図に示す実
施形態は、シングルステップ割り込み機能を有するCP
U1(例えば、INTEL Pentium )、割り込み制御チップ
2(例えば、INTEL 8259)、全命令トレースデータ用の
2次記憶装置3(例えば、IDEセカンダリーHD、I
RQ番号15配下)、およびメモリ4を有する。メモリ
4は、オペレーティングシステム用情報10、全命令ト
レース用シングルステップ割り込み処理プログラム1
1、全命令トレース用2次記憶装置のバッファ12、お
よび全命令トレース用のその他の情報13を記憶してい
る。
【0034】まず、シングルステップ割り込み機能を有
するCPU1は、割り込み制御チップ2と信号線によっ
て接続されており、該チップからの割り込みの有無や該
チップの状態の情報等を受け取ることができ、また、該
チップへの割り込み受け取り完了の通知等の情報を出力
できる。また、CPU1は、全命令トレースデータ用の
2次記憶装置3およびメモリ4とバスによって接続され
ており、それらの装置並びにメモリに対する情報のリー
ドおよびライトが可能である。メモリ4内の情報は、オ
ペレーティングシステム用情報10、全命令トレース用
シングルステップ割り込み処理プログラム11、2次記
憶装置のバッファ12、およびその他の情報13より構
成される。
【0035】図2は、オペレーティングシステム用情報
10の中にある全命令トレース用シングルステップ割り
込み処理プログラム11の走行時のスタックの構造であ
り、シングルステップ割り込みによって作成されるスタ
ック50と、その割り込みが発生する直前のユーザの状
態フラグ60、並びに、スタックポインタ70からな
る。また、スタック50は、旧スタックセグメント番号
51、旧スタックポインタ52、旧状態フラグ53、旧
コードセグメント番号54、旧命令アドレス55、レジ
スタ情報群56からなる。
【0036】それらの内、スタックポインタ70は、レ
ジスタ情報群56の最後の4バイトのアドレスをポイン
トしており、旧スタックポインタ52は、ユーザの状態
フラグ60をポイントしている関係を示す。
【0037】図3は、状態フラグ90の構造を示してお
り、該状態フラグは、32ビットの情報からなり、その
内8番目のビットがトレースフラグ91であることを示
す。この状態フラグ90の構造は、ユーザの状態フラグ
60および旧状態フラグ53の中の構造を示す。
【0038】次に、図4および図5に示すフローチャー
トを参照して、上記実施形態の作用について説明する。
なお、この説明では、全命令トレース実行中時において
エミュレータが初めてPOPFD命令を実行しようとし
ている時を例にとって説明する。
【0039】この時、外部変数「全命令トレース実行
中」の値は1、「トレースON化累積カウンタ」および
「全命令トレース仮停止」の値は0である(外部変数と
は、どこからでも見える領域であり、構成上はどこに存
在してもよい。本実施形態においては、図1のブロック
13で示すその他の情報の中にある)。
【0040】全命令トレース実行中時において、エミュ
レータがPOPFD命令を実行しようとすると、その命
令の実行の直前に、シングルステップ割り込みが発生
し、CPU1は、図4の全命令トレース用シングルステ
ップ割り込み処理プログラム11のステップS100に
制御を渡す。その時、スタック50には、図2の51〜
55の情報を、CPU1のスタックポインタには旧命令
アドレス55のエリアのアドレスを、CPU1は、自動
的に設定する。次に、CPU1は図4のレジスタ等の退
避(ステップS100)を実行すると、スタック50の
中のレジスタ情報群56にレジスタ等の内容を退避し、
CPU1のスタックポインタ70の内容は、図2に示す
ように、レジスタ情報群56の最後の4バイトの位置の
アドレスとなる。
【0041】次に、外部変数「全命令トレース仮停止」
の値が0かどうかをチェックし(ステップS101)、
ここではYESであるので、ステップS102へ行き、
外部変数「全命令トレース実行中」が0でないかどうか
をチェックする(ステップS102)。ここでは、全命
令トレース実行中であり、YESであるので、全命令ト
レースデータを収集してバッファに格納し、適宜、2次
記憶装置3に出力する(ステップS104)。それか
ら、シングルステップ割り込みを起こした命令のアドレ
スがユーザ空間であるかどうかを[スタック50内の旧
命令アドレス(この場合、上記POPFD命令のアドレ
ス)がユーザ空間(本実施形態では、ユーザ空間のアド
レスは値がOXC0000000より小)であるか]チェックする
(ステップS105)。該命令はエミュレータの命令で
あるから、ユーザ空間であるので、YESとなり、次
に、該命令がPOPFDの命令であるかどうかを[スタ
ック50内の旧命令アドレス55を当プログラムが動作
しているシステム空間の値に変換して、そのアドレスが
ポイントするエリアの内容が、OX9D(POPFDの命令
コード)であるかを]チェックし(ステップS10
6)、この場合YESであるので、ステップS107
で、旧スタックポインタ52の内容よりユーザの状態フ
ラグ60のアドレスを得、状態フラグ60の内、図3の
トレースフラグ91を得、その値がOFFであるかどう
かをチェックする(ステップS108)。ここでは、全
命令トレース実行中時でエミュレータが初めてPOPF
Dを実行しようとしている時であるので、該ビットはO
FFであり、YESとなり、ステップS109へ行き、
ユーザの状態フラグ60のトレースフラグ91に1(O
N)を設定し、外部変数「トレースON化累積カウン
タ」に1を加算(結果は1となる)した後、ステップS
200へ進む。
【0042】ステップS200では、(一般にオペレー
ティングシステム用情報10内の現スレッドアドレス
と、予めユーザが指定した全命令トレースの終了用スレ
ッドアドレスとが一致し、且つスタック50内の旧命令
アドレス55と、予めユーザが指定した全命令トレース
の終了用命令アドレスとが一致するかどうかをチェック
することにより)全命令トレースの終了が必要かどうか
をチェックし、(エミュレータ内でトレースを終了する
ことは一般にないので)この場合NOであるので、ステ
ップS205に行き、レジスタ等の回復を行い、ステッ
プS206で、IRET命令で割り込み元に戻る。
【0043】割り込み元は、上記POPFDの命令であ
るから、その命令が実行されるが、そのときユーザの状
態フラグ60のトレースフラグ91は、ステップS10
9でONに変更されているので、上記命令の実行によ
り、CPUのトレースフラグはONになり、次の命令の
実行直前以降も、シングルステップ割り込みは継続して
発生することとなる。
【0044】次に、全命令トレースの終了が必要な命令
の実行の直前に発生するシングルステップ割り込みの場
合を考える。上記と同様に全命令トレース用シングルス
テップ割り込み処理プログラムに制御を渡されると、レ
ジスタ等の退避を行い(ステップS100)、全命令ト
レース仮停止=0かどうかをチェックし(ステップS1
01)、全命令トレース実行中が0でないかどうかをチ
ェックし(ステップS102)、全命令トレースデータ
を収集して、適宜2次記憶装置3に出力し(ステップS
104)、シングルステップ割り込みを起こした命令の
アドレスがユーザ空間かどうかをチェックし(ステップ
S105)、(一般に、全命令トレースの停止は、ユー
ザ空間で行うので)シングルステップ割り込みを起こし
た命令はPOPFDかどうかをチェックする(ステップ
S106)が、(エミュレータ内でトレースを止めるこ
とは通常有り得ないので)NOとなり、ステップS20
0で(一般にオペレーティングシステム用情報10内の
現スレッドアドレスと、予めユーザが指定した全命令ト
レースの終了用スレッドアドレスとが一致し、且つスタ
ック50内の旧命令アドレス55と、予めユーザが指定
した全命令トレースの終了用命令アドレスとが一致する
かどうかをチェックすることにより)全命令トレースの
終了が必要かのチェックを行い、ここでYESとなり、
ステップS201へ進む。
【0045】ステップS201では、従来処理のトレー
ス停止処理(一般にCPUが退避したスタック50内の
旧状態フラグ53のトレースフラグ91をOFFとし、
オペレーティングシステム用情報10内にあるすべての
スレッドのカーネルスタック上のトレースフラグ91を
OFFとし、外部変数「全命令トレース実行中」に0を
設定する処理)を行い、ステップS202で、外部変数
「トレースON化累積カウンタ」が0かどうかをチェッ
クする。0である場合は、従来の処理と同様に、ステッ
プS205に行くことにより、全命令トレースを停止す
るが、この場合、外部変数「トレースON化累積カウン
タ」は、1であるので、ステップS204へ行き、外部
変数「全命令トレース仮停止」に1を設定し、ステップ
S205でレジスタ等の回復を行い、ステップS206
でIRET命令を発行し、割り込み元へ戻る。
【0046】割り込み元に戻る時に、CPUは、自動的
にスタック50内の旧状態フラグ53のトレースフラグ
91をCPUのトレースフラグに設定し、その値は、ス
テップS201でOFFに設定されているので、戻った
後、次の命令の実行直前等では、シングルステップ割り
込みは発生しなくなる。しかし、エミュレータが、PO
PFD命令を実行すると、その時のユーザの状態フラグ
60のトレースフラグ91は、上記ステップS109で
ONに設定したままであるので、該命令を実行した後
に、CPUのトレースフラグはONに戻るので、その後
の命令の実行直前にシングルステップ割り込みが発生
し、再び、図4の全命令トレース用シングルステップ割
り込み処理プログラムのステップS100に制御が渡
る。その後、上記と同様に、ステップS100でレジス
タ等の退避を行い、ステップS101で、外部変数「全
命令トレース仮停止」が0であるかどうかをチェックす
るが、該変数には1が設定されているので、ステップS
104の全命令トレースデータの収集等は行われず、ス
テップS110へ進む。
【0047】ステップS110では、(旧状態フラグ5
3の中のトレースフラグ91をOFFに設定することに
より)CPUが退避したスタック50内のトレースフラ
グ91をOFFに設定し、外部変数「トレースON化累
積カウンタ」より1を減算し、この場合結果は0となる
ので、ステップS111においてYESとなり、ステッ
プS203に進み、外部変数「全命令トレース仮停止」
に0を設定し、レジスタ等の回復をステップS205で
行い、ステップS206でIRET命令で割り込み元に
戻る。その時、ステップS205で回復したトレースフ
ラグはOFFに設定されているので、CPUのトレース
フラグは0となり、以降、シングルステップ割り込みは
発生しなくなる。また、外部変数「全命令トレース仮停
止」と「全命令トレース実行中」の内容は、共に0であ
るので、以降例えシングルステップ割り込みが発生して
も、それは全命令トレースとは関係がないのでステップ
S102においてオペレーティングシステムのデバッガ
へ行くことになる。
【0048】
【発明の効果】以上説明したように、本発明によれば、
オペレーティングシステム内に別のオペレーティングシ
ステムのシステムコールの動作をユーザ空間上でエミュ
レートするエミュレータが搭載されている場合に、全命
令トレース実行中時に、エミュレータがCPUのトレー
スフラグをOFFにしようとしても、全命令トレース用
シングルステップ割り込み処理プログラムが、それを阻
止して、且つ全命令トレースデータの収集を行い、ま
た、全命令トレース仮停止中時に、エミュレータがCP
UのトレースフラグをONにしても、全命令トレース用
シングルステップ割り込み処理プログラムが、それをO
FFに戻し、且つ、その時全命令トレースデータの収集
を行わないので、従来処理では実現が不可能であったエ
ミュレータにおける全命令トレースをすべて正しく行う
ことが可能となる。
【図面の簡単な説明】
【図1】本発明の一実施形態に係るエミュレータにおけ
る全命令トレースの制御方法を実施する装置の構成を示
すブロック図である。
【図2】図1に示す実施形態における全命令トレース用
シングルステップ割り込み処理プログラムの走行時のス
タックの構造を示す図である。
【図3】図1に示す実施形態における状態フラグの構造
を示す図である。
【図4】図1に示す実施形態の作用の一部を示すフロー
チャートである。
【図5】図1に示す実施形態の作用の図4に続く一部を
示すフローチャートである。
【符号の説明】
1 シングルステップ割り込み機能を有するCPU 2 割り込み制御チップ 3 全命令トレースデータ用の2次記憶装置 4 メモリ 10 オペレーティングシステム用情報 11 全命令トレース用シングルステップ割り込み処理
プログラム 12 全命令トレース用2次記憶装置のバッファ 13 全命令トレース用のその他の情報 50 全命令トレース用シングルステップ割り込み処理
プログラムの走行時のスタック 51 旧スタックセグメント番号 52 旧スタックポインタ 53 旧状態フラグ 54 旧コードセグメント番号 55 旧命令アドレス 56 レジスタ情報群 60 ユーザの状態フラグ 70 スタックポインタ 90 状態フラグの構造 91 トレースフラグ

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 情報処理装置内の中央演算ユニットが全
    命令トレースを行い、このトレース対象のオペレーティ
    ングシステムが他のシステムのシステムコールのエミュ
    レーションを行い、このエミュレーションを含むすべて
    の命令の実行の全命令トレースを行う場合において、全
    命令トレース用シングルステップ割り込み処理プログラ
    ムの外部変数の計数手段としてカウンタを設け、全命令
    トレースの実行中においては、前記プログラムがエミュ
    レーションにおけるトレースフラグをオフにする命令を
    検出した場合、このオフを阻止し、前記カウンタの値に
    1を加算し、全命令トレースの終了以降においては、前
    記カウンタの値が0でない場合に、前記プログラムがシ
    ングルステップ割り込みの発生を監視し、該割り込みが
    発生した場合は、トレースフラグをオフとし、前記カウ
    ンタから1を減算し、この結果のカウンタの値が0でな
    い場合は、前記監視を継続し、この結果のカウンタの値
    が0である場合は、前記監視を停止して、全命令トレー
    スのすべての動作を終了することを特徴とするエミュレ
    ータにおける全命令トレースの制御方法。
JP23924998A 1998-08-25 1998-08-25 エミュレータにおける全命令トレースの制御方法 Expired - Lifetime JP3480903B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP23924998A JP3480903B2 (ja) 1998-08-25 1998-08-25 エミュレータにおける全命令トレースの制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP23924998A JP3480903B2 (ja) 1998-08-25 1998-08-25 エミュレータにおける全命令トレースの制御方法

Publications (2)

Publication Number Publication Date
JP2000066923A true JP2000066923A (ja) 2000-03-03
JP3480903B2 JP3480903B2 (ja) 2003-12-22

Family

ID=17041963

Family Applications (1)

Application Number Title Priority Date Filing Date
JP23924998A Expired - Lifetime JP3480903B2 (ja) 1998-08-25 1998-08-25 エミュレータにおける全命令トレースの制御方法

Country Status (1)

Country Link
JP (1) JP3480903B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7350110B2 (en) 2002-01-14 2008-03-25 International Business Machines Corporation Method and system using hardware assistance for continuance of trap mode during or after interruption sequences

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7350110B2 (en) 2002-01-14 2008-03-25 International Business Machines Corporation Method and system using hardware assistance for continuance of trap mode during or after interruption sequences
US7506207B2 (en) 2002-01-14 2009-03-17 International Business Machines Corporation Method and system using hardware assistance for continuance of trap mode during or after interruption sequences

Also Published As

Publication number Publication date
JP3480903B2 (ja) 2003-12-22

Similar Documents

Publication Publication Date Title
JP2765411B2 (ja) 仮想計算機方式
US5938778A (en) System and method for tracing instructions in an information handling system without changing the system source code
US20070118725A1 (en) CPU life-extension apparatus and method
US20070038891A1 (en) Hardware checkpointing system
JPH05257712A (ja) マイクロプロセッサ装置及び自動化停止状態再始動を実行させる方法
US5680599A (en) Program counter save on reset system and method
US20050015579A1 (en) Handling exceptions
US6871173B1 (en) Method and apparatus for handling masked exceptions in an instruction interpreter
EP0290942B1 (en) Guest machine execution control system for virtual machine system
JPH03175537A (ja) デバッグ用マイクロプロセッサのエラー制御装置
JP2000066923A (ja) エミュレータにおける全命令トレースの制御方法
JP2000020352A (ja) スタックオーバーフロー検出方法及びスタックアンダーフロー検出方法
KR101785540B1 (ko) 비결정적인 하드웨어 인터럽트에 대한 요청을 처리하는 에뮬레이션 방법 및 장치
JPS6376028A (ja) 仮想計算機システムにおける命令ステツプ実行制御方式
KR100415742B1 (ko) 프로세서에서 소프트웨어의 제어를 받는 예외 처리 흐름용장치 및 그 동작 방법
JP2002251299A (ja) プログラムトレース装置
JPH07210421A (ja) スレッド環境におけるデバッグ方法
JPS6029844A (ja) プログラムモ−ド切り替え方式
JPH05250161A (ja) マイクロコンピュータ装置
JPS59163653A (ja) デバツグ装置
JPH04264625A (ja) レジスタ管理方式
JPS63155330A (ja) マイクロプログラム制御装置
JPH02244345A (ja) 情報処理装置
JPS61267137A (ja) 割込み動作制御方式
JPS644210B2 (ja)

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20071010

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081010

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091010

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101010

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101010

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111010

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111010

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121010

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121010

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131010

Year of fee payment: 10

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

EXPY Cancellation because of completion of term