JP2010102496A - システムシミュレーション装置 - Google Patents

システムシミュレーション装置 Download PDF

Info

Publication number
JP2010102496A
JP2010102496A JP2008273139A JP2008273139A JP2010102496A JP 2010102496 A JP2010102496 A JP 2010102496A JP 2008273139 A JP2008273139 A JP 2008273139A JP 2008273139 A JP2008273139 A JP 2008273139A JP 2010102496 A JP2010102496 A JP 2010102496A
Authority
JP
Japan
Prior art keywords
address
target
conversion table
simulator
host 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.)
Granted
Application number
JP2008273139A
Other languages
English (en)
Other versions
JP5100604B2 (ja
Inventor
Katsumi Okuda
勝己 奥田
Hirotaka Machida
宏隆 町田
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2008273139A priority Critical patent/JP5100604B2/ja
Publication of JP2010102496A publication Critical patent/JP2010102496A/ja
Application granted granted Critical
Publication of JP5100604B2 publication Critical patent/JP5100604B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】ホストネイティブとISSでプログラムをハイブリッド実行するとき、ターゲットシステム上で実行可能な機械語プログラムのISS上での実行を実現することのできるシステムシミュレーション装置を得る。
【解決手段】ISS5は、ターゲットプログラム10のターゲットISA部分4を実行する。バスシミュレータ6はアドレス変換テーブル7を備える。ISS5はバスシミュレータ6を介して、ISS5上で動作するターゲットプログラム10による大域データへのメモリアクセス時に、アドレス変換テーブル7を用いてホスト計算機2上のアドレス空間に存在する大域データのアドレスを取得し、ホスト計算機2上の大域データに対してメモリアクセスする。
【選択図】図1

Description

この発明は、ソフトウェアとハードウェアから構成されるターゲットシステムを別の計算機上でシミュレーション実行するためのシステムシミュレーション装置に関し、特に、ソフトウェアの実行に、ISS(インストラクションセットシミュレータ:Instruction Set Simulator)を利用するシミュレータに関する。
この種のシミュレータは、システム開発時におけるシステムアーキテクチャの妥当性確認、実行速度の見積り、ソフトウェアの検証・デバッグなどをはじめ、システム開発完了後におけるシステム利用者のための操作・運用訓練など様々な用途に用いられる。このようなシミュレータは、ターゲットプログラムをホスト計算機に移植してネイティブ実行する方法、あるいはホスト計算機上で動作し、ターゲットCPU(Central Processing Unit)の命令を解釈実行可能なISSを介してターゲットプログラムを実行する方法で構築される。特に、ターゲットプログラムをターゲットCPUのISA(インストラクションセットアーキテクチャ:Instruction Set Architecture)レベルでシミュレーションする必要がある場合、シミュレータは、構成要素としてISSを持つことが一般的である。しかしながら、ISSでターゲットプログラムを実行するシミュレータでは、ターゲットプログラムの1命令をホスト計算機の複数命令で実行することによるシミュレーション速度の低下が問題となる。
そこで、シミュレーション速度を向上させる方法として、従来、ターゲットプログラムの全体をISS上で実行するのではなく、ターゲットCPUのISAで動作させる必要がある部分のみをISSで実行し、それ以外の部分をホストネイティブで実行する方法があった(例えば、特許文献1参照)。
特開2000−259445号公報
上記従来のシミュレータでは、ターゲットCPUのオブジェクトコードとホストCPUのオブジェクトコードをリンクするときに、ISSで走らせるコードのアドレスを出力させ、ISSは、オブジェクトを実行するときに、コードのアドレスによって、実行環境をISSとホストCPUとに区別する。また、CPUのみアクセスするメモリは、CPUシミュレータ側にローカルに持つ。
このようなシミュレータでは、ターゲットCPUのオブジェクトコードとホストCPUのオブジェクトコードをリンクする必要がある。従って、リンク結果の機械語プログラムは、ホスト計算機の命令コードとターゲットCPUの命令コードから構成されるため、実ターゲットのメモリにロードして実行することは不可能である。逆に、シミュレータは、実ターゲットのメモリにロード可能なロードモジュールを用いてその一部のみをISS上で実行し、残りをホストネイティブで実行することも不可能である。
ISSで動作する部分の機械語コードを実機上の対応する機械語コードとバイナリレベルで一致させるためには、機械語コードがPIC(Position Independent Code)の場合を除いて、コードと使用するデータが実機の場合と同じアドレスに配置される必要がある。しかしながら、従来のシミュレータの場合、ISS実行部分とホストネイティブ実行部分が大域変数などのデータを共有する場合、それぞれがホストネイティブの同一アドレス空間に存在する必要があるため、コードとデータのレイアウトを実機のアドレス空間と一致させることは困難であった。ここで、機械語プログラムをPICとすることによって、データの並び順と間隔を実機と一致させれば十分となるが、依然としてデータの並び順と間隔を実機と一致させるための特殊なリンカ制御が必要であることや機械語コードをPICにすることによる実行効率の悪さが問題となる。
即ち、上記従来のシミュレータでは、ISS実行部分とホストネイティブ実行部分がデータを共有する場合において、実際にターゲットシステムで動作する機械語プログラムを用いてのシミュレーションが困難であるという問題があった。
この発明は、上記のような問題点を解決するためになされたものであり、ホストネイティブとISSでプログラムをハイブリッド実行するとき、ターゲットシステム上で実行可能な機械語プログラムのISS上での実行を実現することのできるシステムシミュレーション装置を得ることを目的としている。
この発明に係るシステムシミュレーション装置は、ターゲットプログラムをターゲットCPUのインストラクションセットアーキテクチャで実行するインストラクションセットシミュレータと、ターゲットCPU外部のハードウェアを模擬するバスシミュレータと、ターゲットプログラムをネイティブ実行するホスト計算機とを備えたシステムシミュレーション装置であって、バスシミュレータは、ターゲット計算機のアドレス空間のアドレスをホスト計算機のアドレス空間のアドレスに変換するアドレス変換テーブルを有するものである。
この発明のシステムシミュレーション装置は、ターゲット計算機のアドレス空間のアドレスをホスト計算機のアドレス空間のアドレスに変換するアドレス変換テーブルを備えたので、ターゲットシステム上で実行可能な機械語プログラムのISS上での実行を実現することができる。
実施の形態1.
図1は、この発明の実施の形態1によるシステムシミュレーション装置を示す構成図である。
図1に示すシステムシミュレーション装置1は、ホスト計算機2によって、ホストネイティブ部分3の機械語プログラムと、ターゲットISA部分4の機械語プログラムを実行することで実現される。ホスト計算機2は、ターゲットシステムと同一エンディアンの計算機である。ホストネイティブ部分3には、インストラクションセットシミュレータ(以下、ISSという)5とバスシミュレータ6を含んでいる。また、バスシミュレータ6は、アドレス変換テーブル7を備えている。
ホストネイティブ部分3は、ISS5およびアドレス変換テーブル7を含むバスシミュレータ6から構成されるホストネイティブのコードおよびデータであり、ホスト計算機2上のメモリに格納される。ターゲットISA部分4は、ターゲットシステムで実行可能な形式のコードとデータであり、システム初期化時あるいは実行時に動的にバスシミュレータ6に含まれるメモリモデルに格納される。
ISS5は、ターゲットISAを解釈実行することができるCPUエミュレータである。一般に、ISSは、サイクル精度シミュレータ、バストランザクションレベルシミュレータ、機能レベルシミュレータなど複数の種類に分類されるが、本発明では、ISSの精度に依らず実施可能である。バスシミュレータ6は、ターゲットシステムのCPUの外部を模擬し、バス以降に存在するメモリやペリフェラルをシミュレーションするソフトウェアモジュールである。アドレス変換テーブル7は、大域変数のターゲットCPUアドレス空間におけるアドレスをホストCPUのアドレス空間におけるアドレスに変換するためのテーブルである。システムシミュレーション装置1は、初期化時あるいは実行時に動的に変数情報8、9からアドレス変換テーブル7を初期化する。
ターゲットプログラム10は、C言語などの高級言語で記述されたソースプログラムである。また、シミュレーション環境用プログラム11は、ISS5とバスシミュレータ6のソースとISS5で実行対象となる関数の中身をISS呼出しに置換したソースコードを含む。更に、ターゲット用ライブラリ12は、ターゲットシステムのライブラリである。
ホスト計算機用言語処理系13とターゲット用言語処理系14は、ターゲットプログラム10の記述プログラミング言語のコンパイラとリンカであり、それぞれホストネイティブのコードとターゲットシステム用のコードを生成する。ホスト計算機用言語処理系13は、ターゲットプログラム10とシミュレーション環境用プログラム11とを入力とし、ホストネイティブ部分3と変数情報8を出力とする。ターゲット用言語処理系14は、ターゲットプログラム10とターゲット用ライブラリ12とを入力とし、ターゲットISA部分4と変数情報9を出力とする。
変数情報8、9は、言語処理系の出力であるELF形式の実行ファイルに含まれるシンボルテーブルである。変数情報8、9は、ターゲットプログラムに存在する大域変数の名前、アドレス、サイズを情報として含めば十分であり、言語処理系が生成するMAPファイルなどで代替可能である。
上記の構成によって、システムシミュレーション装置1は、ホストネイティブ部分3をホストネイティブで実行し、ターゲットISA部分4をISS5上で実行することによって、ターゲットシステムのシミュレーションを行う。ターゲットプログラム10中に含まれる大域変数は、ホストネイティブ部分3のアドレス空間とターゲットISA部分4のアドレス空間に重複して存在するため、一貫性制御を必要とする。バスシミュレータ6は、ISS5のメモリアクセス時、アドレス変換テーブル7を用いて大域変数のアクセスの検出とアドレス変換を行い、ホストネイティブの空間側の大域変数にアクセスすることによって一貫性制御を行う。
図2は、ISSがターゲットプログラムを実行する際に発生するメモリアクセスの模式図である。
ホスト計算機アドレス空間22は、ホスト計算機2がプログラムをネイティブ実行する際にアクセスするアドレス空間である。ターゲットCPUアドレス空間21は、メモリ領域23とI/O領域24から構成される。メモリ領域23は、バスシミュレータ6の構成要素であるメモリモデルが模擬する領域であり、I/O領域24は、ペリフェラルモデルが模擬する領域である。ターゲットCPUアドレス空間21は、実機用の機械語プログラムがロードされるため、ターゲットシステムと等しいデータのレイアウトを持つ。例えば、ターゲットシステムで有効なアドレス0x1234に存在する命令あるいはデータは、ターゲットCPUアドレス空間でもアドレス0x1234に割り当てられる。
ISS5は、ターゲットプログラム10中のプログラムの実行にバスアクセスが必要な場合、バスシミュレータ6を介してバスアクセスを行う。メモリアクセスの要求アドレスが大域変数の領域を対象とする場合、バスシミュレータ6は、要求アドレスをターゲットCPUアドレスからホストネイティブアドレスに変換してホストネイティブ空間に対してアクセスをする。また、メモリアクセスの要求アドレスが大域変数以外の領域にある場合、バスシミュレータ6は、メモリモデルあるいはI/Oモデルにアクセスする。この結果、大域変数へのアクセスは、常にホストネイティブ側の大域変数の領域に対して行われるため、ターゲットプログラムのうちホストネイティブで実行される部分とISS5上で実行される部分が大域変数を共有している場合でも、大域変数の一貫性を保つことができる。
図3は、バスシミュレータ6における要求アドレスによるアクセス切替え処理のフローチャートである。
バスシミュレータ6は、多バイト長のバスアクセスを複数の単一バイトアクセスに分解し、図3の処理を適用する。即ち、バスシミュレータ6は、要求アドレスはメモリ領域か否かを判定し(ステップST301)、そうであった場合は、アドレス変換テーブル7を用いて、要求アドレスは大域変数領域かを判定する(ステップST302)。次に、これらステップST301,ST302の判断に基づいてバスアクセスの模擬処理であるステップST303,ST304,ST305の処理を選択する。即ち、ステップST302において、大域変数領域であった場合は、ホスト計算機のアドレス空間へのアクセスであり(ステップST303)、そうでなかった場合はメモリモデルへのアクセスと判断する(ステップST304)。ここで、ステップST303のホスト計算機アドレス空間へのアクセス処理は、アドレス変換テーブル7を用いて行う。また、ステップST301において、要求アドレスがメモリ領域ではなかった場合は、I/Oモデルへのアクセスと判定する(ステップST305)。図3では、すべてのバスアクセスを単一バイトのアクセスに分解することを前提としているが、特に大域変数へのアクセスがバイトアクセスに分解されていれば十分であり、他のアクセスは、多バイト長のままとする代替手段も可能である。また、大域変数へのアクセス先をメモリモデルとホスト計算機のアドレス空間に切り換えるのではなく、両方にアクセスする方式も可能である。この場合、ホスト計算機のアドレス空間へのアクセスのみバイトアクセスに分解し、データ読出しの場合、ホスト計算機から読み出したデータを優先すればよい。
図4は、論理的なアドレス変換テーブル7の構成例である。
アドレス変換テーブル7は、ターゲットCPUアドレス空間の変数情報9とホスト計算機アドレス空間の変数情報8に含まれる大域変数のアドレス変換の情報を持つ。図4中のFoo、Bar、Bazは、ターゲットプログラムに含まれる大域変数であるとする。各々の大域変数は、ホスト計算機上とISS上で同じサイズであるが、異なる割り当てアドレスを持つ。アドレス変換テーブル7は、大域変数Bazに関して、ISS上ではアドレス区間0x123C〜0x123Fとホスト計算機上ではアドレス区間0x30000〜0x30003のバイト毎の対応を持つ。一般に、アドレス変換テーブル7は、サイズNのグローバル変数に関して、ISS上でアドレスX、ホスト計算機上でアドレスYに割り当てられている場合、ISS上のアドレス区間XからX+N−1とホスト計算機上のアドレス区間YからY+N−1のバイト毎の対応を持つ。
次に、アドレス変換テーブル7の物理的なメモリ格納方法について説明する。図5は、アドレス変換テーブルとターゲットCPUアドレス空間とホスト計算機アドレス空間の相関関係を示す説明図である。
ターゲットCPUアドレス空間51およびホスト計算機アドレス空間52の1つのエントリは、1バイトのサイズを持つ。ターゲットCPUアドレス空間51の領域53は、ターゲットプログラムの大域変数を含む領域であり、一般にオブジェクトファイル中の.dataセクションと.bssセクションに対応する領域である。アドレス変換テーブル7は、領域53に存在するすべてのエントリと同じ数のエントリを持つ。各エントリは、先頭から順に領域53のエントリと一対一に対応する。即ち、領域53の先頭からN番目に存在するエントリは、アドレス変換テーブル7の先頭からN番目のエントリに対応する。また、各エントリのサイズは、ホスト計算機のアドレスサイズであり、各エントリの値は、ターゲットCPUアドレス空間51のエントリに対応するホスト計算機アドレス空間52のエントリのアドレスもしくは0である。エントリの値が0の場合、対応するホスト計算機アドレス空間52のエントリが存在しない状態、即ち、エントリが表すターゲットCPUアドレス空間51のエントリが大域変数を保持していない状態である。この状態を示すエントリの値は、必ずしも0である必要はなく、大域変数が割り当てられることがない他の値でも代替可能である。上記の構成によって、ターゲットCPUアドレスXに対応するホスト計算機アドレスを保持するアドレス変換テーブルエントリのインデックスは下式で得られる。
(テーブルインデックス)=X−(領域53の先頭のアドレス)
このように大域変数のためのアドレス変換は定数オーダの計算量で完了することが可能である。また、アドレス変換テーブルのサイズは、(領域53のサイズ)×(ホスト計算機のアドレスサイズ)である。仮に領域53のサイズが人工衛星のような組込みシステムで十分な1MBでホスト計算機のアドレスサイズが4バイトの場合、アドレス変換テーブル7のサイズは4MBであり、近年の高性能計算機のキャッシュに載る程度に十分小さい。
図5に示したアドレス変換テーブル7は、ホストネイティブの大域変数のアドレスを保持するが、これらの変数のアドレスは、ホストネイティブプログラムのリンク時まで未解決である。従って、ホストネイティブプログラムの一部であるアドレス変換テーブル7は、ホストネイティブプログラムの初期化時あるいは実行時に動的に構築される。
図6は、システムシミュレータの初期化時に行うアドレス変換テーブル構築処理のフローチャートである。図6の処理を行う前のアドレス変換テーブル7の全エントリの値は、0とする。ステップST601は、ISS向けELFファイルのシンボルテーブルの全エントリを順に処理するループの開始であり、ステップST608は、当該ループの終了である。ステップST601で始まるループは、1回の繰り返しで1つの大域変数のアドレス変換情報をアドレス変換テーブル7に登録する。ステップST602は、シンボルテーブルエントリのタイプを確認し、大域データのエントリでなければループをスキップする。ステップST603、ST604、ST605は、それぞれ変数名、変数サイズ、ターゲットCPUアドレスをシンボルテーブルエントリのフィールドから取得する。ステップST606は、ステップST603で取得した変数名をキーとしてホスト計算機向けELFファイルのシンボルテーブルからのアドレスを検索する処理である。ステップST607は、ステップST605で取得したターゲットCPUアドレスからステップST606で取得したホスト計算機アドレスへの対応をステップST604で取得した変数サイズ分だけ行う処理である。上記の処理によって、大域変数が存在するデータ領域のアドレス変換情報のアドレス変換テーブル7への登録が完了する。
図7は、図6に示したステップST607のデータ領域登録処理の詳細を示すフローチャートである。
データ領域登録処理は、アドレス変換の対象となる連続した領域の開始ターゲットCPUアドレスと開始ホスト計算機アドレスとバイトを単位とする領域サイズを入力とする。図7中のXは、変換対象となるターゲットCPUアドレスであり、Yは、Xを変換して得られるホスト計算機アドレスである。ステップST701は、Xに開始ターゲットCPUアドレスを代入する処理である。ステップST702は、Yに開始ホスト計算機アドレスを代入する処理である。ステップST703は、領域サイズのバイト数分だけ繰り返すループの開始であり、ステップST708は、当該ループの終了である。ステップST703で始まるループは、1回の繰り返しで1バイトの領域に対応するターゲットCPUアドレスとホスト計算機アドレスのペアをアドレス変換テーブル7に登録する。ステップST704は、ターゲットCPUアドレスXに対応するアドレス変換テーブル7のインデックスを計算する処理である。ステップST705は、ステップST704で算出したインデックスに存在するアドレス変換テーブル7のエントリにホスト計算機アドレスYを代入する。ステップST706とステップST707は、それぞれXとYに1を加算する処理である。上記の処理によって、指定された連続領域のデータに存在するバイト毎のターゲットCPUアドレスとホスト計算機アドレスの対応がアドレス変換テーブル7に設定される。
図8は、ISS呼出し処理のフローチャートである。
図8の処理は、ターゲットプログラム10中のISS5で実行する必要がある部分を含む関数をISS5を介して呼び出す処理である。シミュレーション環境用プログラム11は、ターゲットプログラム10中のISS5で実行する必要がある関数の呼出しを図8の処理で置換している。ステップST801は、ISS5のプログラムカウンタに関数の開始アドレスを設定する処理である。ステップST802は、スタックポインタを設定する処理である。ステップST803は、関数の引数を設定する処理である。具体的には、引数をレジスタやスタック中に設定し、引数がポインタであれば適切にポインタが指すデータをISS5のアドレス空間にコピーする処理である。ステップST803の処理は、関数が引数を持たない場合は不要である。ステップST804は、関数のリターンアドレスを設定する処理である。具体的には、リターンアドレスレジスタあるいはスタックに適当なリターンアドレスを設定する。リターンアドレスは、関数が実行し得る命令のアドレス以外の任意の値である。ステップST805は、プログラムを1命令実行する処理であり、関数の処理が完了するまで繰り返し実行される。ステップST806は、プログラムカウンタの値がステップST804で設定したリターンアドレスになっているかを確認することによって、関数呼出しの完了を検出する処理である。ステップST807は、関数呼出しの結果を取得する処理である。これは、関数の戻り値を戻り値レジスタあるいはスタックから取得と引数のポインタを介して得られる結果をISS5のアドレス空間からホスト計算機アドレス空間へコピーする処理を含む。ステップST807の処理は、関数が結果を出力しない場合不要である。
以上のように、実施の形態1のシステムシミュレーション装置によれば、ターゲットプログラムをターゲットCPUのインストラクションセットアーキテクチャで実行するインストラクションセットシミュレータと、ターゲットCPU外部のハードウェアを模擬するバスシミュレータと、ターゲットプログラムをネイティブ実行するホスト計算機とを備えたシステムシミュレーション装置であって、バスシミュレータは、ターゲット計算機のアドレス空間のアドレスをホスト計算機のアドレス空間のアドレスに変換するアドレス変換テーブルを有するよう構成したので、ターゲットプログラムの一部をホスト計算機向けにコンパイルして実行し、別の一部をターゲットシステム向けの機械語プログラムに変更を加えることなく実行してシミュレーションすることができる。
また、実施の形態1のシステムシミュレーション装置によれば、インストラクションセットシミュレータ上で動作するターゲットプログラムによる大域データへのメモリアクセス時に、アドレス変換テーブルを用いてホスト計算機上のアドレス空間に存在する大域データのアドレスを取得し、ホスト計算機上の大域データに対してメモリアクセスするようにしたので、ISS実行部分とホストネイティブ実行部分が大域変数を共有することができる。
また、実施の形態1のシステムシミュレーション装置によれば、インストラクションセットシミュレータ上で動作するターゲットプログラムによる大域変数へのアクセス判定をアドレス変換テーブルを用いて行うようにしたので、メモリアクセスが大域変数かどうかを容易に判別することができる。
また、実施の形態1のシステムシミュレーション装置によれば、アドレス変換テーブルは、ターゲットCPUアドレス空間上に存在する大域変数を含む領域の先頭から末尾までのバイトアドレスと順に一対一に対応するエントリを持ち、各エントリがホストCPUアドレス空間上のアドレスを保持するようにしたので、高速なアドレス変換を行うことが可能となる。
また、実施の形態1のシステムシミュレーション装置によれば、アドレス変換テーブルは、言語処理系が生成する変数情報に含まれる変数のサイズとアドレスを用いて構築されるようにしたので、ホストCPUとターゲットCPUが同じエンディアンを持つ場合、言語処理系が出力するシンボルテーブルを用いてアドレス変換テーブルの構築を行うことができる。
また、実施の形態1のシステムシミュレーション装置によれば、ホストネイティブ実行からのインストラクションセットシミュレータ実行への切替え時、実行対象となる関数のエントリアドレスをインストラクションセットシミュレータのプログラムカウンタに設定し、かつ、関数が使用するインストラクションセットシミュレータのレジスタとスタックを設定すると共に、リターンアドレスとして関数実行時にプログラムカウンタの値として適切でない任意の値を設定し、この状態で、プログラムカウンタが設定したリターンアドレスの値になるまでインストラクションセットシミュレータの実行を続け、リターンアドレスが設定した値になると再びホストネイティブ実行を行うようにしたので、ホストネイティブ実行とISS実行とを容易に切り替えることができる。
実施の形態2.
実施の形態1では、ホスト計算機がターゲットシステムと同一のエンディアンを持つことを前提とした。また、実施の形態1において、ホスト計算機用言語処理系13とターゲット用言語処理系14で同一構造体に対するメモリレイアウトが異なる場合、即ち、構造体メンバの構造体先頭からのオフセットが一致しない場合、アドレス変換テーブルを正しく構築できないため、構造体変数をISSとホストネイティブで共有する大域変数にすることができない。従って、ホスト計算機とコンパイラの選択に制約が生じることが問題となる。
実施の形態2は、実施の形態1のホスト計算機をISSと異なるエンディアンの計算機にし、同一の構造体が異なるメモリレイアウトを持つようなホスト計算機用言語処理系13とターゲット用言語処理系14からシステムシミュレータを構築するケースを想定している。更に、実施の形態2では、変数情報8、9は、一般的なデバッガが使用するDWARF形式のデバッグ情報とする。但し、デバッグ情報は、大域変数の名前、アドレス、サイズ、型の情報を含んでいれば良く、DWARFと異なるデバッグ形式でも代替可能である。
実施の形態1において、単純にホスト計算機を異なるエンディアンの計算機に置換した場合の不具合を図4の論理的なアドレス変換テーブル7を例として説明する。尚、実施の形態2のシステムシミュレーション装置における図面上の構成は、アドレス変換テーブル7a以外、図1と同様であるため、以下、図1を援用して説明する。
ここで、ISS5はビッグエンディアンであり、ホスト計算機2がリトルエンディアンであると仮定する。ISS5の変数Bazの領域である0x123Cは、変数BazのMSB(Most Significant Byte)である。しかし、アドレス変換後の0x3000は、ホストネイティブ空間では、変数BazのLSB(Least Significant Byte)となり正しくない。
実施の形態2では、ホスト計算機2がISS5と異なるエンディアンを持つ場合、図9のようなアドレス変換テーブル7aを使用する。アドレス変換テーブル7aは、アドレス変換テーブル7と異なり、変数毎にアドレスを逆からマップしている。例えば、アドレス変換テーブル7aは、変数Bazの領域0x123C、0x123D、0x123E、0x123Fを順に0x30003、0x30002、0x30001、0x30000にマップする。アドレス0x123Cは、ビッグエンディアンのISS5にとってBazのMSBであり、対応するアドレス0x30003は、リトルエンディアンのホスト計算機2によって同様にBazのMSBとなり正しい。
図10は、アドレス変換テーブル初期化処理のフローチャートである。以下では、ターゲットプログラム10がC言語記述の場合について記述する。但し、本実施の形態はC言語以外の高級言語で記述されたターゲットプログラムでも実施可能である。
図10の処理は、ホストネイティブのデバッグ情報とターゲットシステム向けのデバッグ情報を入力とする。デバッグ情報は、一般的なC言語コンパイラが生成するデバッグ情報である。以降では、デバッグ情報としてDWARF形式を想定するが、大域変数の型情報とアドレス情報を取得できるデバッグ情報フォーマットであればDWARF形式に限らない。ステップST1001は、ターゲットプログラム10に含まれる全大域変数を順に処理するためのループの開始であり、ステップST1007は、当該ループの終了である。
ステップST1001で始まるループは、繰り返し毎に大域変数のアドレス変換情報をアドレス変換テーブル7aに登録する処理であり、.debug_pubnamesセクションに含まれるエントリを順に処理する。ステップST1002は、.debug_pubnamesセクションの巡回中エントリが大域変数かどうかを確認する処理であり、関数名などの大域変数以外のシンボルをスキップする。ステップST1003は、大域変数の開始アドレスを取得する処理であり、.debug_pubnamesセクションの巡回中エントリのエントリが示す位置にあるDIE(Debug Information Entry)のDW_AT_location属性からアドレスを取得する。ステップST1004は、処理中の変数名を変数名スタックにプッシュする処理である。変数名スタックは、後の処理でホスト計算機アドレスを検索するときに用いるキーを生成するためのスタックであり、下位のサブルーチンからもアクセス可能である。変数名スタックの要素は、変数名、配列インデックス、構造体メンバ名のいずれかである。ステップST1005は、変数を構成する基本データ毎にアドレス変換情報をアドレス変換テーブル7aに登録するための再帰処理であり、ステップST1003で取得した先頭アドレスと型情報を入力とする。ここで、型情報は、現在処理中の変数に対応するDIEのDW_AT_type属性が指す別のDIEである。ステップST1006はステップST1004でプッシュした変数名を変数名スタックからポップする処理である。図10の処理では、.debug_pubnamesセクションを用いて大域変数のDIEを巡回したが、.debug_infoに含まれるすべてのDIEを巡回し、大域変数のDIEだけにST1003からST1006の処理を適用してもよい。
図11は、図10のステップST1005の詳細であり、基本型あるいは複合型のデータを基本型毎にアドレス変換テーブル7aに登録する処理を示すフローチャートである。
図11の処理は、再帰処理であり、再帰の底で基本型データ毎のアドレス変換に必要なターゲットCPUアドレスとホスト計算機アドレスをアドレス変換テーブル7aに登録する。図11の処理の入力は、登録対象となるデータの開始アドレスと配列、構造体、基本型のいずれかの型情報である。具体的に型情報は、DW_TAG_array_type、DW_TAG_structure_type、DW_TAG_base_typeのいずれかをタグとするDIEである。ステップST1101は、データ型の判定処理であり、DIEのタグによってデータ型を判別し、配列の場合はステップST1102、構造体の場合はステップST1110、基本型の場合はステップST1117の処理を行う。
ステップST1102は、配列の要素数を取得する処理である。配列の要素数は、入力となるDIEのDW_TAG_array_typeのDIEの後続エントリであるDW_TAG_subrange_typeのタグのDIEのDW_AT_upper_bound属性の値である。ステップST1103は、配列要素のサイズを取得する処理である。配列要素サイズの取得方法は、一般的なデバッガが行う処理と同じであるため、詳細は省略する。ステップST1104は、現在処理中の配列要素数回のループの開始であり、ステップST1109は、当該ループの終了である。ステップST1104で始まるループは、配列インデックスを0から配列要素数−1までの配列全要素に関するアドレス変換情報をアドレス変換テーブル7aに登録する。ステップST1105は、現在処理中の配列インデックスに要素サイズを乗じて更に入力開始アドレスを加えて配列要素の開始アドレスを取得する処理である。ステップST1106は、現在処理中の配列要素のインデックスを変数名スタックにプッシュする処理である。ステップST1107は、配列要素の型情報と開始アドレスを入力とした自己再帰処理である。ステップST1108は、ステップST1106でプッシュした配列インデックスをポップする処理である。
ステップST1110は、構造体メンバを巡回するループの開始であり、ステップST1116は、当該ループの終了である。ステップST1110で始まるループは、入力DIEの後続エントリとして順に存在するDW_TAG_memberタグのメンバDIEの巡回処理である。ステップST1111は、巡回中の構造体メンバのオフセットを取得する処理である。構造体メンバのオフセットは、巡回中メンバDIEのDW_AT_data_member_location属性の値である。ステップST1112は、入力開始アドレスにステップST1111で取得したメンバオフセットを加えて構造体メンバの開始アドレスを取得する処理である。ステップST1113は、構造体メンバ名を変数名スタックにプッシュする処理である。構造体メンバ名は、巡回中メンバDIEのDW_AT_name属性の値である。ステップST1114は、ステップST1112で取得した構造体メンバ開始アドレスと構造体メンバの型情報を入力とした自己再帰処理である。構造体メンバの型情報は、巡回中メンバDIEのDW_AT_type属性の値が示すDIEである。ステップST1115は、ステップST1113でプッシュした構造体メンバ名を変数名スタックからポップする処理である。
ステップST1117は、型のサイズを取得する処理である。型のサイズは、入力DIEのDW_AT_byte_size属性の値である。ステップST1118は、ホスト計算機アドレスは、変数名スタックに存在する変数名、構造体メンバ名、配列名を順につなげたシーケンスをキーとして、ホスト計算機向けDWARF情報から基本型のホスト計算機アドレスを取得する処理である。一般的なデバッガによるアドレス取得処理と同じであるステップST1118の処理の詳細は省略する。ステップST1119は、入力開始アドレスに存在する基本型データの領域をアドレス変換テーブル7aに登録する処理である。
図12は、図11のステップST1119の詳細であり、ISS5のエンディアンとホスト計算機のエンディアンが異なる場合において、基本型データ領域をアドレス変換テーブル7aに登録する処理のフローチャートである。ホスト計算機とISS5のエンディアンが等しい場合は、図7の処理で代替すればよい。
図12のステップST1201〜ST1208の処理は、ステップST1202とステップST1207を除いて図7のステップST701〜ST708の処理と同じである。図12の処理では、ステップST1202とステップST1207に示すように、図7の処理と逆順でターゲットCPUアドレスとホスト計算機アドレスのペアをアドレス変換テーブル7aに登録する。即ち、図12の処理は、開始ターゲットCPUアドレスが末尾ホスト計算機アドレスに変換されるようにし、末尾ターゲットCPUアドレスが開始ホスト計算機アドレスに変換されるようにアドレス変換テーブルを構築する。
上記の処理では、構造体などの複合型を基本型に分解してアドレス変換テーブル7aを構築するため、ターゲット向けのコンパイラとホスト計算機向けのコンパイラが同一構造体に対して異なるデータレイアウトを持つ場合にも、有効なアドレス変換テーブル7aを構築することが可能である。構築されたアドレス変換テーブル7aは、大域変数を構成する基本型毎にバイト単位でターゲットCPUアドレス空間とホスト計算機アドレス空間のマッピングを保持する。従って、ISS5とホスト計算機2が異なるエンディアンの場合にも、ISS5のデータアクセスとホスト計算機2のデータアクセスのバイトオーダに関して整合性を保つことが可能である。
以上のように、実施の形態2のシステムシミュレーション装置によれば、アドレス変換テーブルは、言語処理系が生成する変数情報に含まれる変数のサイズとアドレスと型情報を用いて構築されるようにしたので、ホスト計算機のエンディアンに依らずハイブリッドシミュレーションを行うことができる。
実施の形態3.
ISSがCPUのMMU(Memory Management Unit)を模擬している場合、MMUを通過する前の論理アドレスを用いて大域変数のアドレスをホストアドレスに変換する必要がある。そこで、実施の形態3として、実施の形態1および2において、アドレス変換テーブル7(または7a)をバスシミュレータ6内部からISS5内部に移し、メモリアクセスに関するホストCPU空間とターゲットCPUアドレス空間の切替えをバスシミュレータ6ではなく、ISS5が行う。これにより、ISS5がCPUのMMUを模擬する場合に対応することができる。
実施の形態4.
実施の形態1、2、3において、アドレス変換テーブル7(または7a)の構築を、言語処理系が生成した変数情報からシステムシミュレーション装置1がアドレス変換テーブル7(または7a)を構築するのではなく、言語処理系内部でアドレス変換テーブルを作成し、システムシミュレーション装置1がアドレス変換テーブルをインポートするようにしてもよい。
この発明の実施の形態1によるシステムシミュレーション装置を示す構成図である。 この発明の実施の形態1によるシステムシミュレーション装置のISSがターゲットプログラムを実行する際に発生するメモリアクセスの模式図である。 この発明の実施の形態1によるシステムシミュレーション装置のバスシミュレータにおける要求アドレスによるアクセス切替え処理のフローチャートである。 この発明の実施の形態1によるシステムシミュレーション装置の論理的なアドレス変換テーブルの構成例を示す説明図である。 この発明の実施の形態1によるシステムシミュレーション装置のアドレス変換テーブルとアドレス空間の相関関係を示す説明図である。 この発明の実施の形態1によるシステムシミュレーション装置のアドレス変換テーブル構築処理のフローチャートである。 この発明の実施の形態1によるシステムシミュレーション装置のデータ領域登録処理のフローチャートである。 この発明の実施の形態1によるシステムシミュレーション装置のISS呼出し処理のフローチャートである。 この発明の実施の形態2によるシステムシミュレーション装置の論理的なアドレス変換テーブルの構成例を示す説明図である。 この発明の実施の形態2によるシステムシミュレーション装置のアドレス変換テーブル構築処理のフローチャートである。 この発明の実施の形態2によるシステムシミュレーション装置のデータ領域登録処理のフローチャートである。 この発明の実施の形態2によるシステムシミュレーション装置の基本型データ領域登録処理のフローチャートである。
符号の説明
1 システムシミュレーション装置、2 ホスト計算機、3 ホストネイティブ部分、4 ターゲットISA部分、5 インストラクションセットシミュレータ(ISS)、6 バスシミュレータ、7,7a アドレス変換テーブル、8,9 変数情報、10 ターゲットプログラム、11 シミュレーション環境用プログラム、12 ターゲット用ライブラリ、13 ホスト計算機用言語処理系、14 ターゲット用言語処理系、21,51 ターゲットCPUアドレス空間、22,52 ホスト計算機アドレス空間。

Claims (7)

  1. ターゲットプログラムをターゲットCPUのインストラクションセットアーキテクチャで実行するインストラクションセットシミュレータと、
    前記ターゲットCPU外部のハードウェアを模擬するバスシミュレータと、
    前記ターゲットプログラムをネイティブ実行するホスト計算機とを備えたシステムシミュレーション装置であって、
    前記バスシミュレータは、前記ターゲット計算機のアドレス空間のアドレスを前記ホスト計算機のアドレス空間のアドレスに変換するアドレス変換テーブルを有することを特徴とするシステムシミュレーション装置。
  2. インストラクションセットシミュレータ上で動作するターゲットプログラムによる大域データへのメモリアクセス時に、アドレス変換テーブルを用いてホスト計算機上のアドレス空間に存在する大域データのアドレスを取得し、当該ホスト計算機上の大域データに対してメモリアクセスすることを特徴とする請求項1記載のシステムシミュレーション装置。
  3. インストラクションセットシミュレータ上で動作するターゲットプログラムによる大域変数へのアクセス判定をアドレス変換テーブルを用いて行うことを特徴とする請求項1または請求項2記載のシステムシミュレーション装置。
  4. アドレス変換テーブルは、ターゲットCPUアドレス空間上に存在する大域変数を含む領域の先頭から末尾までのバイトアドレスと順に一対一に対応するエントリを持ち、各エントリがホストCPUアドレス空間上のアドレスを保持することを特徴とする請求項1から請求項3のうちのいずれか1項記載のシステムシミュレーション装置。
  5. アドレス変換テーブルは、言語処理系が生成する変数情報に含まれる変数のサイズとアドレスを用いて構築されることを特徴とする請求項1から請求項4のうちのいずれか1項記載のシステムシミュレーション装置。
  6. アドレス変換テーブルは、言語処理系が生成する変数情報に含まれる変数のサイズとアドレスと型情報を用いて構築されることを特徴とする請求項1から請求項4のうちのいずれか1項記載のシステムシミュレーション装置。
  7. ホストネイティブ実行からのインストラクションセットシミュレータ実行への切替え時、実行対象となる関数のエントリアドレスを前記インストラクションセットシミュレータのプログラムカウンタに設定し、かつ、関数が使用する前記インストラクションセットシミュレータのレジスタとスタックを設定すると共に、リターンアドレスとして関数実行時に前記プログラムカウンタの値として適切でない任意の値を設定し、この状態で、前記プログラムカウンタが設定したリターンアドレスの値になるまで前記インストラクションセットシミュレータの実行を続け、前記リターンアドレスが設定した値になると再び前記ホストネイティブ実行を行うことを特徴とする請求項1から請求項6のうちのいずれか1項記載のシステムシミュレーション装置。
JP2008273139A 2008-10-23 2008-10-23 システムシミュレーション装置 Active JP5100604B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008273139A JP5100604B2 (ja) 2008-10-23 2008-10-23 システムシミュレーション装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008273139A JP5100604B2 (ja) 2008-10-23 2008-10-23 システムシミュレーション装置

Publications (2)

Publication Number Publication Date
JP2010102496A true JP2010102496A (ja) 2010-05-06
JP5100604B2 JP5100604B2 (ja) 2012-12-19

Family

ID=42293094

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008273139A Active JP5100604B2 (ja) 2008-10-23 2008-10-23 システムシミュレーション装置

Country Status (1)

Country Link
JP (1) JP5100604B2 (ja)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06348543A (ja) * 1993-06-02 1994-12-22 Matsushita Electric Ind Co Ltd 入出力シミュレータとの接続方法
JPH11282693A (ja) * 1998-03-30 1999-10-15 Toshiba Corp Mcuシミュレーション装置、そのシミュレーション方法及びそのシミュレーションプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2000259445A (ja) * 1999-03-05 2000-09-22 Nec Corp ソフトウェア/ハードウェア協調シミュレーション方法
JP2002278775A (ja) * 2001-03-15 2002-09-27 Nec Corp シミュレーション装置、シミュレーション方法およびプログラム
JP2006107370A (ja) * 2004-10-08 2006-04-20 Canon Inc 情報処理装置及びその制御方法
JP2006350686A (ja) * 2005-06-16 2006-12-28 Seiko Epson Corp 命令セット・シミュレータ生成装置及びシミュレータ生成方法
JP2007011720A (ja) * 2005-06-30 2007-01-18 Sharp Corp システムシミュレータ、システムシミュレート方法、制御プログラムおよび可読記録媒体

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06348543A (ja) * 1993-06-02 1994-12-22 Matsushita Electric Ind Co Ltd 入出力シミュレータとの接続方法
JPH11282693A (ja) * 1998-03-30 1999-10-15 Toshiba Corp Mcuシミュレーション装置、そのシミュレーション方法及びそのシミュレーションプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2000259445A (ja) * 1999-03-05 2000-09-22 Nec Corp ソフトウェア/ハードウェア協調シミュレーション方法
JP2002278775A (ja) * 2001-03-15 2002-09-27 Nec Corp シミュレーション装置、シミュレーション方法およびプログラム
JP2006107370A (ja) * 2004-10-08 2006-04-20 Canon Inc 情報処理装置及びその制御方法
JP2006350686A (ja) * 2005-06-16 2006-12-28 Seiko Epson Corp 命令セット・シミュレータ生成装置及びシミュレータ生成方法
JP2007011720A (ja) * 2005-06-30 2007-01-18 Sharp Corp システムシミュレータ、システムシミュレート方法、制御プログラムおよび可読記録媒体

Also Published As

Publication number Publication date
JP5100604B2 (ja) 2012-12-19

Similar Documents

Publication Publication Date Title
US5339422A (en) System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment
US7533246B2 (en) Application program execution enhancing instruction set generation for coprocessor and code conversion with marking for function call translation
US8554535B2 (en) Instruction-set architecture simulation techniques using just in time compilation
US7877741B2 (en) Method and corresponding apparatus for compiling high-level languages into specific processor architectures
US20080127113A1 (en) Method and system for implementing watchpoints
CN110245467B (zh) 基于Dex2C与LLVM的Android应用程序保护方法
US8886512B2 (en) Simulation apparatus, computer-readable recording medium, and method
CN115858092A (zh) 时序仿真方法、装置及系统
CN114428642B (zh) 一种基于新型处理器架构的随机指令生成环境
JP5100604B2 (ja) システムシミュレーション装置
Blanqui et al. Designing a CPU model: from a pseudo-formal document to fast code
KR0125605B1 (ko) 프로그램의 아키덱쳐 변환방법 및 장치와 그 방법 및 장치를 사용하여 프로그램의 동작을 검증하는 방법 및 장치
JPH025138A (ja) シミユレーシヨン方法
Kim et al. Output-based intermediate representation for translation of test-pattern program
Wang et al. Hycos: hybrid compiled simulation of embedded software with target dependent code
CN115374017A (zh) 一种仿真运行可执行文件时抓取现场的方法及计算设备
JP7295469B2 (ja) 関数生成プログラム、関数生成方法、及び情報処理装置
JP5118562B2 (ja) デバッグ支援装置
JP2788839B2 (ja) Cpuシミュレータ
Brent Using program structure to achieve prefetching for cache memories
Kirchhof et al. Simulation of model execution for embedded systems
CN114385524B (zh) 嵌入式固件仿真系统及其方法、装置和电子设备
CN108604205B (zh) 测试点的创建方法,装置和系统
JP3324542B2 (ja) 仮想マシン
Van Dung et al. Function profiling for embedded software by utilizing QEMU and analyzer tool

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101013

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111110

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111129

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120125

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120828

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120925

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

Free format text: PAYMENT UNTIL: 20151005

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5100604

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250