JPH0695921A - シミュレーション方法、及びプログラムデバッグシステム - Google Patents

シミュレーション方法、及びプログラムデバッグシステム

Info

Publication number
JPH0695921A
JPH0695921A JP4272422A JP27242292A JPH0695921A JP H0695921 A JPH0695921 A JP H0695921A JP 4272422 A JP4272422 A JP 4272422A JP 27242292 A JP27242292 A JP 27242292A JP H0695921 A JPH0695921 A JP H0695921A
Authority
JP
Japan
Prior art keywords
instruction
host computer
instruction sequence
computer
target computer
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.)
Withdrawn
Application number
JP4272422A
Other languages
English (en)
Inventor
Yuugo Kashiwagi
有吾 柏木
Tsutomu Hayashi
努 林
Yoshihiro Shinoda
佳博 篠田
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP4272422A priority Critical patent/JPH0695921A/ja
Publication of JPH0695921A publication Critical patent/JPH0695921A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【目的】 ターゲット計算機のためのプログラムの実行
をホスト計算機でシミュレーション更にはデバッグする
ときの処理の高速化を図ることである。 【構成】 コンパイラ2はターゲット計算機のソースプ
ログラム1からオブジェクト情報プログラム6を生成す
る。オブジェクト情報プログラム6は、逐次的に順次実
行できるターゲット計算機の命令列(途中にジャンプ命
令若しくはブランチ命令更にはサブルーチンからの復帰
命令を含まない)をホスト計算機の命令列に翻訳して得
られたものである。この翻訳された命令列を単位として
シミュレーションを行うことにより、従来の1ステップ
実行におけるようなデータとしての命令解釈のオーバヘ
ッドを削減して、シミュレーションの高速化を図る。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、シミュレーション方
法、更にはプログラムデバッグシステムに係り、例えば
ホスト計算機上でターゲット計算機のプログラムをデバ
ッグするシミュレータデバッガなどに適用して有効な技
術に関する。
【0002】
【従来の技術】従来のシミュレータデバッガ若しくはシ
ミュレータは、ターゲット計算機の命令をデータとして
持ち、それを一命令ごとに解釈実行(1ステップ実行)
することによってシミュレーションの目的を達してい
た。すなわち、ターゲット計算機とホスト計算機の実行
環境はCPU(中央処理装置)を含めて大きく異なるた
め、シミュレータは、ソフトウェアでターゲット計算機
の実行環境を表現し、そのターゲット計算機の機械語を
データとして受け取って命令単位に解釈し、対応する動
作を擬似的に実現する。このような手法を以下インタプ
リタ方式という。また、シミュレータデバッガを用いて
高級言語レベルでデバッグを行うには、高級言語で指定
された変数やソース行番号の情報と、オブジェクトプロ
グラムのアドレス、サイズなどの対応情報とをデータと
して持ち、このデータを解釈すなわち検索して参照する
ことによってデバッグのために必要な操作を行ってい
た。例えばこの操作としては、デバッグ時の参照のため
に必要なソースプログラムの変数アドレスの取得、ソー
スプログラムの行番号からターゲットプログラムのアド
レス取得などの操作である。なお、シミュレーションに
ついて記載された文献の例としては昭和59年11月3
0日にオーム社から発行された「LSIハンドブック」
第561頁がある。
【0003】
【発明が解決しようとする課題】しかしながら、インタ
プリタ方式のシミュレーションでは、ターゲット計算機
の命令コードをデータとして受け取って命令単位に解釈
して対応する動作を模擬するため、命令コードの解釈実
行のオーバヘッドによってターゲット計算機上での実行
に比べて著しく低速になるという問題点がある。また、
高級言語レベルでのデバッグ機能は、各言語ごとにデバ
ッグ情報の規約を設け、該デバッグ情報を解釈実行する
ことによってデバッグを行なっていた。この方式では、
デバッグ情報に関するデータのテーブル検索のような処
理が必要になるため実行速度が低下するだけでなく、タ
ーゲット計算機のソースプログラムを記述するための高
級言語毎にデバッグ情報の規約を設ける必要があり、そ
のための処理を予めシミュレータデバッガに組み込む必
要があった。これはシミュレータデバッガの汎用性を著
しく損なっている。
【0004】本発明の目的はターゲット計算機のための
プログラムの実行をホスト計算機でシミュレーション、
更にはデバッグするときの処理の高速化を図ることにあ
る。本発明の別の目的は、デバッグ対象プログラムを記
述した高級言語の種類に係らず同一のシミュレータデバ
ッガでデバッグできる機能を実現することにある。
【0005】本発明の前記並びにその他の目的と新規な
特徴は本明細書の記述及び添付図面から明らかになるで
あろう。
【0006】
【課題を解決するための手段】本願において開示される
発明のうち代表的なものの概要を簡単に説明すれば下記
の通りである。
【0007】すなわち、従来方式では、ターゲット計算
機の命令をデータとして受け取ってシミュレーション時
に一命令づつ解釈して実行していたが、本発明において
は、逐次的に順次実行できるターゲット計算機の命令列
すなわち途中にジャンプ命令若しくはブランチ命令更に
はサブルーチンからの復帰命令を含まず、また、これら
の命令の分岐先命令も含まない命令列を、シュミレーシ
ョン前に予めホスト計算機の命令列に翻訳し、この翻訳
された命令列を単位としてシミュレーションを行う。こ
れによって、各命令のシミュレートに伴う従来の命令解
釈のオーバヘッドを削減するものである。また、同様の
オーバヘッド削減の手法は、ターゲット計算機用プログ
ラムのデバッグのためのデバッグ情報の解釈にも適用す
る。すなわち、ソースプログラム上の概念に対応する情
報と、ターゲット計算機上のハードウェア資源上の概念
に対応する情報との対応を、ホスト計算機の命令で表現
されたデバッグ用操作手続としてコンパイラにて用意
し、このデバッグ用操作手続を必要に応じて呼び出すこ
とによって高級言語レベルでデバッグを可能にする。こ
のとき、解釈並びに実行のための特殊なインタフェース
を要せず、直接ホスト計算機の機械語で実行すべき操作
を記述することから、特にデバッグのための操作におい
て、ターゲット計算機の高級言語の仕様に依存しないで
高級言語レベルでのデバッグを実現する。ここで、本明
細書で称するターゲット計算機は、いわゆる計算機に限
るものではなく、設定、変更が可能で、その状態をホス
ト計算機のハードウェアで表現可能なハードウェア資源
と、当該資源に対する基本操作を持った装置であればよ
い。
【0008】次に上記手段の詳細を項目毎に個々に説明
する。
【0009】(1) シミュレーションの高速化 シミュレーションの高速化は以下の手段によって実現す
る。 (a)ターゲット計算機のメモリ,レジスタ,フラグ等
のハードウェア資源に対して、ホスト計算機のメモリ,
レジスタ,フラグを対応させ、ターゲット計算機の内部
状態をホスト計算機の内部状態によって忠実に表現でき
るようにする。すなわち、ホスト計算機の資源とソフト
ウェアによってターゲット計算機の実行環境を表現す
る。 (b)ターゲット計算機の各命令に対して、該命令の作
用を、ターゲット計算機のハードウェア資源に対応付け
られたホスト計算機の上でシミュレーションするホスト
計算機の命令列を対応させる。 (c)ターゲット計算機のプログラムのベーシックブロ
ック(必ず逐次実行される命令列、すなわち、途中にジ
ャンプ命令やサブルーチン命令更にはサブルーチンから
の復帰命令を含まず、また、前記命令の分岐先を含まな
い命令列)を切り出し、対応するホスト計算機の命令列
の並びを生成する。これと上記項目(b)により、逐次
的に順次実行可能なターゲット計算機の命令列が翻訳さ
れて成るホスト計算機の命令列を取得する。 (d)生成したホスト計算機の命令列のデータフローを
解析し、最適化を施す。 (e)ターゲット計算機のベーシックブロックの先頭ア
ドレスを、ベーシックブロックに対応するホスト計算機
の命令列に対応付ける表を作成する。 (f)ターゲット計算機の基本ブロックの実行を、対応
するホスト計算機の命令列を実行することによってシミ
ュレートする。 (g)ターゲット計算機のジャンプ命令又はブランチ命
令の実行を、ジャンプ又はブランチ先のアドレスに対応
するホスト計算機の命令列に制御を移行することによっ
てシミュレートする。
【0010】(2) シミュレーション機能の切り替え 上記方式で全てのシミュレーションを行うと、基本的な
シミュレーション機能の一部であるブレークポイント機
能、命令の書き替え機能、デバッグ時にベーシックブロ
ックの途中に飛び込む機能を犠牲にすることになる。こ
れを避けるために、上記方式と従来のインタプリタ方式
若しくは1ステップ実行方式を併用し、シミュレーショ
ン機能を縮小することなく高速化できる切り替え方式を
以下の手段で実現する。 (a)各ベーシックブロックに対して、ブレークポイン
トの指定を示すフラグを設け、そのベーシックブロック
内でブレークポイントが指定されている場合は、対応す
るホスト計算機の命令列に制御を移すことなく、ターゲ
ット計算機を一命令ずつ解釈して実行するように切り替
える。 (b)デバッグ時に命令の書換えが生じた場合は、その
命令を含むベーシックブロックを再び翻訳して、ターゲ
ット計算機とホスト計算機の命令の対応を更新する。ま
た、命令の書換えによってベーシックブロックが分割さ
れる場合(ベーシックブロックに飛び込む命令への変更
等)は、分割された新しいベーシックブロックに対して
もそれぞれ翻訳を行う。 (c)デバッグ時の実行開始アドレス指定により、ベー
シックブロックの先頭以外のアドレスが指定された場合
は、当該ベーシックブロックは命令ごとに従来方式でシ
ミュレーションを行ない、それ以降のベーシックブロッ
クは上記方式でシミュレーションする。
【0011】(3) 高級言語レベルでのデバッグ機能
をホスト計算機の命令で実現 高級言語レベルでのデバッグ機能は、ソースプログラム
上の概念に対応する情報(変数名、行番号等)に、ター
ゲット計算機上のハードウェア資源上の概念に対応する
情報(アドレス値、レジスタ名等)を対応させる。これ
らの対応を、ホスト計算機の命令で表現された手続きと
して実現する。これは以下の手段によって行う。 (a)ソースプログラムのコンパイル時に、ホスト計算
機のデバッグ用手続きを生成する。例えば、変数の名前
から割付けアドレス値を求めるのであれば、変数名と現
在のプログラムカウンタ値を入力とし、プログラムカウ
ンタに対応するプログラム点における変数の割付けアド
レスを結果として返す手続きを、ホスト計算機の命令と
して生成する。 (b)シミュレータデバッガは、上記デバッグ用手続き
を、ターゲット計算機のプログラムをロードするとき
に、ホスト計算機のプログラムとしてロードし、デバッ
グ用手続きを直接呼びだすことによってデバッグ機能を
実現する。
【0012】
【作用】上記した手段によれば、ターゲット計算機のベ
ーシックブロックに対応して予め翻訳したホスト計算機
の命令列を用いてシミュレーションを行い、また、ホス
ト計算機の命令で表現されたデバッグ用操作手続を利用
してデバッグを行うことは、従来のようにデータとして
与えられるオブジェクトコードの解釈や、デバッグ操作
手続のためのデータテーブルの検索参照といったデータ
解釈のためのオーバヘッドをなくし、シミュレーション
並びにデバッグの高速化を実現する。
【0013】また、前記ホスト計算機の命令で表現され
たデバッグ用操作手続を利用してデバッグを行うこと
は、高級言語デバッグ機能を、高級言語に依存すること
なくシミュレータデバッガに容易に組み込むことを可能
にする。
【0014】
【実施例】図1には本発明の一実施例に係るシミュレー
タデバッガのブロック図が示される。同図において1は
ターゲット計算機のための、高級言語で記述されたソー
スプログラムである。このソースプログラム1がシミュ
レーション並びにデバッグの対象とれる。ソースプログ
ラム1はコンパイラ2にてコンパイルされる。このコン
パイラ2は、ソースプログラム1をオブジェクトコード
4に変換する。従来はこのオブジェクトコード4をデー
タとしてホスト計算機3に与えて1命令単位でシミュレ
ーションを行っていた。本実施例において前記コンパイ
ラ2は、デバッグ情報プログラム5とオブジェクト情報
プログラム6を生成する。
【0015】その詳細は後述するが、前記オブジェクト
情報プログラム6は、逐次的に順次実行可能なターゲッ
ト計算機の命令列をホスト計算機3の命令列に翻訳して
成る、ブロック化された命令列の集合である。したがっ
て、サブルーチンへのジャンプ命令(JMP命令)やサ
ブルーチンからの復帰命令(RTS命令)など、命令実
行フロー若しくは実行すべき命令の順序を変化させる命
令は、前記翻訳された命令列の途中には含まれない。前
記デバッグ情報プログラム5は、ソースプログラム1上
の概念に対応する情報と、図示しないターゲット計算機
上のハードウェア資源上の概念に対応する情報との対応
を、ホスト計算機3の命令で表現されたデバッグ用操作
手続としてコンパイルされたものである。デバッグ情報
プログラム5及びオブジェクト情報プログラム6は、ホ
スト計算機3に適合する命令記述によって構成され、シ
ミュレータの核として位置付けられるシミュレータシス
テムプログラム7と必要に応じてリンクされてホスト計
算機3にロードされる。ホスト計算機3は、コマンドに
したがってそのロードされたプログラムを実行すること
によってソースプログラムのシミュレーションを行うと
共にデバッグをサポートする。
【0016】以下、本実施例に係るシミュレータデバッ
ガによる処理手順を項目順に具体例を交えて詳述する。
シミュレータの部分の具体例に関しては、説明を簡単に
するために、ホスト計算機とターゲット計算機が同一の
命令仕様を持つものと仮定して記述するが、実際に有用
なのはホスト計算機とターゲット計算機が異なる場合で
ある。いずれの場合も、動作原理として異なるところは
ない。また、ホスト計算機の命令に直接依存しない処理
の説明においては、高級言語としてC言語を用いて説明
する。
【0017】(1) ハードウェア資源の対応 ホスト計算機3及び図示しないターゲット計算機の夫々
は、8本の汎用レジスタ(R0〜R7)、ステータスレ
ジスタ(SR)、プログラムカウンタ(PC)を持つと
仮定する。また、ワードサイズは4バイト、アドレシン
グはバイト単位に行うものとする。本実施例では、ター
ゲット計算機上の汎用レジスタ、ステータスレジスタ、
プログラムカウンタをホスト計算機3のメモリ上に対応
付けるものとする。ターゲット計算機のハードウェア資
源に対して、ホスト計算機3において以下のメモリ領域
を割り付ける。 unsigned long general_reg[8]; 汎用レジスタの
領域 unsigned long status_reg; ステータスレジ
スタの領域 unsigned long program counter; プログラムカウ
ンタの領域 unsigned long memory[MEMORY_SIZE]; メモリの領域 ここでターゲット計算機のレジスタをホスト計算機3の
メモリに割り付けているのは、以下の説明をより明快に
提示するのが目的であり、もちろんターゲット計算機の
レジスタをホスト計算機のレジスタに割り付けることに
よって、より高速なシミュレーションが可能になる。こ
の場合、シミュレータコマンド受付け時とシミュレーシ
ョン時でレジスタの退避、回復を行う必要がある。
【0018】(2)ターゲット計算機の命令の翻訳 ターゲット計算機の命令を、ホスト計算機3の命令に一
対一に翻訳する例を示す。 例1:命令“MOV R0,R1”の翻訳例を示す。本
命令は、レジスタR0の内容をレジスタR1に転送し、
プログラムカウンタに命令サイズ(本例では4バイトと
する)を加算するものである。したがって、以下のホス
ト計算機の命令が対応する。 MOV @general_reg,@(general_reg+4) ADD #4,@program_counter 例2:命令“ADD R0,R1”の翻訳例を示す。本
命令は、レジスタR0の内容をレジスタR1に転送し、
演算結果をステータスレジスタに反映し、プログラムカ
ウンタに命令サイズ(本例では4バイトとする)を加算
するものである。したがって、以下のホスト計算機の命
令が対応する。 ADD @general_reg,@(general_reg+4) MOV SR,@status_reg ADD #4,@program_counter 例3:命令“BRA 10”の翻訳例を示す。このよう
な分岐命令は、ベーシックブロックの最後の命令にな
る。本命令は、プログラムカウンタの値を10に設定す
るものである。この場合には下に示すホスト計算機3の
命令が対応される。 MOV #10,@program_counter 同様に各命令に対して翻訳する規則を決定し、その規則
に従ってターゲット計算機の各ベーシックブロックに対
してホスト計算機の命令列を生成する。
【0019】(3)ホスト命令列の最適化 ホスト計算機3の上記翻訳された命令列は、制御の移行
がないため(途中にジャンプ命令やブランチ命令のよう
な命令を含まないため)、データの移動を追跡すること
によって最適化できる。これは、コンパイラ技術におい
て複写伝播と呼ばれる一般的な技法を応用したものであ
るが、シミュレーションをするためのホスト計算機の翻
訳された命令列に本最適化の手法を施すことについては
新規である。 例1: ターゲット計算機の命令列: MOV R0,R1 MOV R0,R2 を考える。これは、上記項目(2)の規則にしたがえ
ば、以下の命令列に翻訳される。 MOV @general_reg,@(general_reg+4) ADD #4,@program_counter MOV @general_reg,@(general_reg+8) ADD #4,@program_counter 上記命令列は、最適化によって同じ機能を果たす以下の
命令列に置き換えが可能である。最適化内容としては、
ターゲット計算機のレジスタR0の内容をホスト計算機
3のレジスタR0に割り付けたこと、プログラムカウン
タの2回の更新を1回に纏めたことである。 MOV @general_reg,R0 MOV R0,@(general_reg+4) MOV R0,@(general_reg+8) ADD #8,@program_counter 例2: ターゲット計算機の命令列 ADD R0,R1 ADD R0,R2 を考える。これは前記項目(2)の規則にしたがえば、
以下の命令列に翻訳される。 ADD @general_reg,@(general_reg+4) MOV SR,@status_reg ADD #4,@program_counter ADD @general_reg,@(general_reg+8) MOV SR,@status_reg ADD #4,@program_counter 上記命令列は以下のように最適化できる。ここでは、上
記例1の最適化の内容に加えて、ステータスレジスタの
2回の更新を1回の更新に最適化したものである。 MOV @general_reg,R0 ADD R0,@(general_reg+4) ADD R0,@(general_reg+8) MOV SR,@status_reg ADD #8,@program_counter
【0020】(4)ホスト命令列のシミュレータへのロ
ード 上記項目(3)の最適化で生成した命令列をシミュレー
ション時にロードする。ロードは、ターゲット計算機の
デバッグ対象プログラム(オブジェクトコード4)をデ
ータとしてシミュレータデバッガのホスト計算機3にロ
ードする際に行なう。ロードされた複数のホスト命令列
において最後に実行されるべき命令列の最後には、サブ
ルーチン復帰命令(RTS)を付加することができる。
これにより、ターゲット計算機のプログラムのベーシッ
クブロックをホスト計算機3におけるサブルーチンの起
動によってシミュレーションできるようになる。
【0021】(5)ホスト命令列によるシミュレーショ
ンの実行 ホスト命令列によるシミュレーションの実行は以下の手
続きで行う。 simulate() { for (; ; ) simulate_block(); ベーシックブロックのシミュレーション } simulate_block() { void (*f)(); f=get_host_action(program_counter); ホスト命令列の開始アドレスの取得 (*f)(); ホスト命令列の実行 } 図2にはその実行手順のフローチャートが示される。図
2に従えば、夫々のベーシックブロックに対するシミュ
レーションは、PC値の取得ステップ(S1)、翻訳さ
れたコードの検索ステップ(S2)、及び翻訳されたコ
ードの実行ステップ(S3)に大別される。PC値の取
得ステップにおけるPC値とは、ターゲット計算機のプ
ログラムにおける(ソースプログラム上における)ベー
シックブロックの先頭アドレスであり、例えば、コマン
ドのパラメータ若しくはホスト計算機3のシミュレータ
システムプログラム中におけるジャンプ命令のジャンプ
先アドレスとして与えられる。前記翻訳されたコードの
検索ステップでは、ベーシックブロックの先頭アドレス
とこれに対応する翻訳命令列の先頭アドレスとの対応テ
ーブルを検索して、前記ステップS1で取得されたPC
値に対応するホスト計算機3上の翻訳命令列の先頭アド
レスを取得する。前記ステップS3では、先頭アドレス
が検索された翻訳命令列を順次最後まで実行する。各命
令に対する処理は、命令フェッチ、命令解釈、及び命令
実行とされ、途中でジャンプ命令やブランチ命令が実行
されることはない。尚、図2においてAは、ターゲット
計算機のリソースとしてホスト計算機3が持っているP
C(プログラムカウンタ)の値を示し、Bは、それに対
応する翻訳命令列ブロックの先頭アドレスを意味するも
のである。図3にはJMP命令実行における処理の移行
を摸式的に示してある。同図において61〜67は夫々
ベーシックブロックに対応する翻訳命令列のブロックで
ある。図3に従えば、翻訳命令列のブロック62の最後
にはJMP命令を翻訳した結果として、PCにブランチ
先のアドレス100を設定する命令と、翻訳命令列から
復帰するためのRTS命令が配置されている。シミュレ
ーションにおいてホスト計算機3が翻訳命令列ブロック
62の最後でRTS命令を実行すると、そのジャンプ先
は前記PC値の取得ステップS1によって処理され、次
いで、前記翻訳されたコードの検索ステップS2で対応
する翻訳命令列ブロック例えば66の先頭アドレスが取
得され、これによって、そのJMP命令によって指示さ
れる処理ルーチンは翻訳命令列ブロック66の実行によ
ってシミュレートされる。翻訳される命令列ブロックの
最後にRTS命令が配置されている場合の処理も上記同
様である。
【0022】(6)デバッグ機能の実現 ベーシックブロックに対するホスト計算機3の翻訳命令
列単位でのシミュレーションでは、デバッグ対象プログ
ラムのベーシックブロックの内部に対する操作はできな
い。そこで、従来の命令毎に解釈実行する1ステップ実
行方式を本実施例方式に併用し、きめ細かなデバッグ機
能を以下のように実現する。
【0023】(7)ブレークポイントの実現 ブレークポイントがベーシックブロックの内部に対して
指定された場合、当該ベーシックブロックに対応したフ
ラグを立て、そのフラグが立っているときは当該ベーシ
ックブロックを従来の1ステップ実行方式で命令ごとに
解釈実行する処理を行う。これは以下の手続きによって
実現される。 simulate_block() { void (*f)(); if (get_flag(program_counter)) フラグの判定 simulate_step_by_step(); 従来方式のシミュレーション else{ f=get_host_action(program_counter); 新方式のシミュレーション (*f)(); } 図4にはその実行方式のフローチャートが示される。同
図に従えば、ブレークポイントの有無を判定し、指定さ
れている場合には1ステップ実行でシミュレーションを
行い、指定されていない場合には図2に基づいて説明し
たような翻訳コードによる実行形式でシミュレーション
を行う。
【0024】(8)ベーシックブロックの途中からの実
行 ベーシックブロックの途中からの実行も、上記項目
(7)の場合と同様、当該ベーシックブロックは従来方
式でシミュレーションし、次に実行するベーシックブロ
ックから新方式のシミュレーションに切り替える。
【0025】(9)デバッグ時の命令の変更 デバッグ時に命令を書き替えた場合、当該ベーシックブ
ロックを再びホスト命令列に翻訳し、新たなホスト命令
列をベーシックブロックの先頭アドレスに対して再登録
する。
【0026】(10)デバッグ時のベーシックブロック
構成の変更 デバッグ時に命令を分岐命令に書き替えた場合、新たな
ベーシックブロックが生じる。この場合、書き替えた命
令を含むベーシックブロックだけでなく、書き替えた分
岐命令の飛び先を含むベーシックブロックも必要であれ
ば再翻訳、再登録する。
【0027】(11)高級言語デバッグ機能のホスト計
算機命令語による実現 高級言語レベルでのデバッグ機能をホスト計算機命令語
で実現する例を以下に示す。以下、これら機能を表現す
るためにC言語を用いるが、実際には、C言語で記述さ
れた手続きに対応する機械語のホスト計算機命令列をコ
ンパイラ2で生成して利用する。
【0028】(12)変数のアドレスの取得 高級言語での変数をデバッグ時に設定したり、参照する
ために、変数のアドレスを取得する必要が有る。このア
ドレスは、コンパイル時に決定できるので、コンパイラ
2がデバッグ対象プログラムをコンパイルする時に、同
時に以下の手続きをホスト計算機3の命令として生成
し、デバッグ時に動的にロードする。 void *get_address(char *var) { if (strcmp(var, "a")==0) 変数名のチェック if (program_counter>=100 && program_counter<200) プログラムカウンタの値のチェック return &memory[200]; : : else return NULL; : : else return NULL; } 上に示されるような手続きは、図5に示されるように、
コンパイル時に判明している変数名と、デバッグ時に与
えられる変数名を比較し、変数名が同一であれば、各変
数の割付けが一定であるプログラムカウンタの範囲と、
現在のプログラムカウンタの値を比較し、現在のシミュ
レーションの状況における変数のアドレスを得る手続き
である。この手続において、パラメタとして与えられた
もの以外は全てコンパイル時に決定可能である。したが
って、本手続きをコンパイラ2が生成することは可能で
ある。デバッガは、これらのホスト計算機3用の手続き
をロードし、呼び出すことによってシミュレーション時
の変数の値の設定や参照を、デバッグ情報の特殊な規約
を設けることなく高級言語レベルで行うことができる。
従来のデバッガにおけるデバッグ情報の特殊な規約は、
ターゲット計算機のソースプログラムの言語に依存し
た、データ検索並びに参照のようなデータ解釈のための
規約とされる。同様の手続きを、行番号から当該行に対
応するプログラム点のプログラムカウンタ値の取得等の
高級言語レベルデバッグの基本操作に対して設けること
により、高級言語レベルデバッグ機能を言語と独立に実
現することができる。斯る手続は、その外に、ソースプ
ログラムの行番号からターゲットプログラムのアドレス
を取得したり、その逆を行ったりする手続がある。
【0029】(13)複数モジュ−ルをリンクした場合
の高級言語レベルデバッグ 複数モジュ−ルをリンクした場合、デバッグ用手続きが
複数できる。これは、各モジュ−ルに対して高級言語レ
ベルでバッグの基本操作の手続きのエントリアドレスを
保持するテーブルをそれぞれ設けることによって実現で
きる。斯るリンクの処理により、所望のシミュレーショ
ン更にはデバッグのための特有なホスト計算機命令列と
してのプログラムを得ることができる。
【0030】以上本発明者によってなされた発明を実施
例に基づいて具体的に説明したが、本発明はそれに限定
されるものではなく、その要旨を逸脱しない範囲におい
て種々変更可能であることは言うまでもない。以上の説
明では主として本発明者によってなされた発明をその背
景となった利用分野であるシミュレータデバッガーに適
用した場合について説明したが、シミュレータはもとよ
り、未完成なマイクロコンピュータ応用システムのシス
テムデバッグやそのシステムのためのターゲットプログ
ラムのデバッグをエミュレーションするためのシステム
や手法にも適用することができる。本発明は、少なくと
もターゲット計算機の命令やデバッグのための手続情報
をホスト計算機のネイティブコードにコンパイルして利
用する条件のものに広く適用することができる。
【0031】
【発明の効果】本願において開示される発明のうち代表
的なものによって得られる効果を簡単に説明すれば下記
の通りである。
【0032】(1)ターゲット計算機のベーシックブロ
ックに対応して予め翻訳したホスト計算機の命令列を用
いてシミュレーションを行い、また、ホスト計算機の命
令で表現されたデバッグ用操作手続を利用してデバッグ
を行うことにより、従来のようにデータとして与えられ
るオブジェクトコードの解釈や、デバッグ操作手続のた
めのデータテーブルの検索参照といったデータ解釈のた
めのオーバヘッドをなくし、シミュレーション並びにデ
バッグの高速化を実現することができる。 (2)上記により、デバッグ対象にするプログラムの範
囲を大幅に拡大できる。したがって、従来の方式では難
しかった大規模なシステムのシミュレータによるデバッ
グが可能になる。 (3)上記シミュレーション方式と従来のインタプリタ
方式(1ステップ実行方式)を併用して、シミュレーシ
ョン方式を切り替えることにより、ブレークポイント機
能、命令の書き替え機能、デバッグ時にベーシックブロ
ックの途中に飛び込む機能などを犠牲にすることなく、
換言すれば、シミュレーション機能を縮小することな
く、シミュレーションを高速化することができる。 (4)ホスト計算機の命令で表現されたデバッグ用操作
手続を利用してデバッグを行うことにより、高級言語の
種類に依存しないシミュレータ若しくはシミュレータデ
バッガを実現できる。 (5)上記(4)により、新しい言語が出現してもシミ
ュレータを変更することなくデバッグ機能を実現でき
る。 (6)それらにより、デバッグコマンド実行の高速化
と、高級言語の言語仕様に依存しないプログラムデバッ
グシステムを実現できる。
【図面の簡単な説明】
【図1】本発明の一実施例に係るシミュレータデバッガ
ーのブロック図である。
【図2】高速シミュレーション実行方式のフローチャー
トである。
【図3】JMP命令実行における処理の移行を摸式的に
示す説明図である。
【図4】ブレークポイント実現手法を説明するためのフ
ローチャートである。
【図5】変数アドレス取得を一例としたデバッグ情報プ
ログラムによる処理の一例フローチャートである。
【符号の説明】
1 ソースプログラム 2 コンパイラ 3 ホスト計算機 4 オブジェクトコード 5 デバッグ情報プログラム 6 オブジェクト情報プログラム 61〜67 翻訳命令列ブロック 7 シミュレータシステムプログラム

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 ターゲット計算機の命令をホスト計算機
    の命令に翻訳し、これをホスト計算機にロードして実行
    するシミュレーション方法であって、 逐次的に順次実行可能なターゲット計算機の命令列をホ
    スト計算機の命令列に翻訳する翻訳ステップと、 前記ターゲット計算機の命令列における先頭アドレス
    と、これに対応するホスト計算機の前記翻訳された命令
    列における先頭アドレスとを対応付ける対応付けステッ
    プと、 前記対応付けステップで得られた対応に基づいて、ター
    ゲット計算機の前記命令列の実行を、これに対応するホ
    スト計算機の前記命令列を実行することによってシミュ
    レートするステップと、 を含むことを特徴とするシミュレーション方法。
  2. 【請求項2】 前記シミュレートするステップは、ター
    ゲット計算機の所定の前記命令列の先頭アドレスを取得
    するステップと、これによって取得された先頭アドレス
    に基づいて対応するホスト計算機の命令列における先頭
    アドレスを検索するステップと、検索されたこの先頭ア
    ドレスからホスト計算機の命令列を逐次実行するステッ
    プと、を含むことを特徴とする請求項1記載のシミュレ
    ーション方法。
  3. 【請求項3】 ターゲット計算機の前記命令列の最後に
    含まれるジャンプ又はブランチ命令に対して、前記ジャ
    ンプ又はブランチ先アドレスに対応するホスト計算機の
    前記命令列に実行を移行することによってシミュレート
    することを特徴とする請求項1又は2記載のシミュレー
    ション方法。
  4. 【請求項4】 ブレークポイントの指定の有無を判定す
    るステップを含み、ブレークポイントの指示があるとき
    は前記ホスト計算機の命令列を実行せずに、ターゲット
    計算機の命令をデータとして逐次解釈しながら1ステッ
    プ実行でシミュレーションを行い、ブレークポイントの
    指示が無いときは前記ホスト計算機の命令列を実行して
    シミュレーションを行うことを特徴とする請求項1乃至
    3の何れか1項記載のシミュレーション方法。
  5. 【請求項5】 ソースプログラム上の概念に対応する情
    報と、ターゲット計算機上のハードウェア資源上の概念
    に対応する情報との対応を、ホスト計算機の命令で表現
    されたデバッグ用操作手続として生成するコンパイラ
    と、 前記デバッグ用操作手続きがロードされ、ロードされた
    デバッグ用操作手続を必要に応じて呼び出すことによっ
    て高級言語レベルでデバッグを可能とするシミュレータ
    デバッガと、 を備えて成るものであることを特徴とするプログラムデ
    バッグシステム。
  6. 【請求項6】 前記シミュレータデバッガは、逐次的に
    順次実行可能なターゲット計算機の命令列をホスト計算
    機の命令列に翻訳された結果、及び前記ターゲット計算
    機の命令列における先頭アドレスと、これに対応するホ
    スト計算機の前記翻訳された命令列における先頭アドレ
    スとを対応付けに基づいて、前記ターゲット計算機の前
    記命令列の実行を、これに対応するホスト計算機の前記
    命令列を実行することによってシミュレーションを行う
    ものであることを特徴とする請求項5記載のプログラム
    デバッグシステム。
JP4272422A 1992-09-16 1992-09-16 シミュレーション方法、及びプログラムデバッグシステム Withdrawn JPH0695921A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4272422A JPH0695921A (ja) 1992-09-16 1992-09-16 シミュレーション方法、及びプログラムデバッグシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4272422A JPH0695921A (ja) 1992-09-16 1992-09-16 シミュレーション方法、及びプログラムデバッグシステム

Publications (1)

Publication Number Publication Date
JPH0695921A true JPH0695921A (ja) 1994-04-08

Family

ID=17513694

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4272422A Withdrawn JPH0695921A (ja) 1992-09-16 1992-09-16 シミュレーション方法、及びプログラムデバッグシステム

Country Status (1)

Country Link
JP (1) JPH0695921A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10177487A (ja) * 1996-12-16 1998-06-30 Fujitsu Ltd プロセッサの命令シミュレーション方法および命令シミュレーション・システム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10177487A (ja) * 1996-12-16 1998-06-30 Fujitsu Ltd プロセッサの命令シミュレーション方法および命令シミュレーション・システム

Similar Documents

Publication Publication Date Title
US7568189B2 (en) Code translation and pipeline optimization
EP0327195B1 (en) Processor simulation
EP0327196B1 (en) Processor simulation
EP0926592B1 (en) Software emulation system
JP4766540B2 (ja) プログラムコード変換の検証を実行するための方法および装置
US6467082B1 (en) Methods and apparatus for simulating external linkage points and control transfers in source translation systems
JPH01166141A (ja) デバッグ情報提供方法
JP5050019B2 (ja) ソースコード解析システム
US20080263528A1 (en) High-level language, architecture-independent probe program compiler
US20060026584A1 (en) Explicit linking of dynamic link libraries
JP2001216169A (ja) 第1ビット・アーキテクチャの命令を第2ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造
JPH09237202A (ja) デバッグ処理実行方法
Smith et al. POPLOG's Two-level virtual machine support for interactive languages
EP0327198B1 (en) Processor simulation
Pétrot et al. On mpsoc software execution at the transaction level
JPH096646A (ja) プログラムシミュレーション装置
JPH08286896A (ja) ソフトウェア開発方法及びソフトウェア開発システム
KR20100031808A (ko) 가상 플랫폼을 이용한 프로그램 작성과 디버깅 방법 및 장치
JPH02176938A (ja) 機械語命令最適化方式
WO2007131089A2 (en) Code translation and pipeline optimization
Battle Analysis separation without visitors
JP3137094B2 (ja) シミュレーション方法、シミュレーション装置及びその記録媒体
Mitchell Porting the UNIX Implementation of Icon
EP1943589A2 (en) Method for generating a simulation program which can be executed on a host computer
JP2001290857A (ja) タイミングシミュレータ

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 19991130