(57)【要約】【課題】ホストネイティブとＩＳＳでプログラムをハイブリッド実行するとき、ターゲットシステム上で実行可能な機械語プログラムのＩＳＳ上での実行を実現することのできるシステムシミュレーション装置を得る。【解決手段】ＩＳＳ５は、ターゲットプログラム１０のターゲットＩＳＡ部分４を実行する。バスシミュレータ６はアドレス変換テーブル７を備える。ＩＳＳ５はバスシミュレータ６を介して、ＩＳＳ５上で動作するターゲットプログラム１０による大域データへのメモリアクセス時に、アドレス変換テーブル７を用いてホスト計算機２上のアドレス空間に存在する大域データのアドレスを取得し、ホスト計算機２上の大域データに対してメモリアクセスする。【選択図】図１
2010102496.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットプログラムをターゲットＣＰＵのインストラクションセットアーキテクチャで実行するインストラクションセットシミュレータと、
前記ターゲットＣＰＵ外部のハードウェアを模擬するバスシミュレータと、
前記ターゲットプログラムをネイティブ実行するホスト計算機とを備えたシステムシミュレーション装置であって、
前記バスシミュレータは、前記ターゲット計算機のアドレス空間のアドレスを前記ホスト計算機のアドレス空間のアドレスに変換するアドレス変換テーブルを有することを特徴とするシステムシミュレーション装置。
【請求項２】
インストラクションセットシミュレータ上で動作するターゲットプログラムによる大域データへのメモリアクセス時に、アドレス変換テーブルを用いてホスト計算機上のアドレス空間に存在する大域データのアドレスを取得し、当該ホスト計算機上の大域データに対してメモリアクセスすることを特徴とする請求項１記載のシステムシミュレーション装置。
【請求項３】
インストラクションセットシミュレータ上で動作するターゲットプログラムによる大域変数へのアクセス判定をアドレス変換テーブルを用いて行うことを特徴とする請求項１または請求項２記載のシステムシミュレーション装置。
【請求項４】
アドレス変換テーブルは、ターゲットＣＰＵアドレス空間上に存在する大域変数を含む領域の先頭から末尾までのバイトアドレスと順に一対一に対応するエントリを持ち、各エントリがホストＣＰＵアドレス空間上のアドレスを保持することを特徴とする請求項１から請求項３のうちのいずれか１項記載のシステムシミュレーション装置。
【請求項５】
アドレス変換テーブルは、言語処理系が生成する変数情報に含まれる変数のサイズとアドレスを用いて構築されることを特徴とする請求項１から請求項４のうちのいずれか１項記載のシステムシミュレーション装置。
【請求項６】
アドレス変換テーブルは、言語処理系が生成する変数情報に含まれる変数のサイズとアドレスと型情報を用いて構築されることを特徴とする請求項１から請求項４のうちのいずれか１項記載のシステムシミュレーション装置。
【請求項７】
ホストネイティブ実行からのインストラクションセットシミュレータ実行への切替え時、実行対象となる関数のエントリアドレスを前記インストラクションセットシミュレータのプログラムカウンタに設定し、かつ、関数が使用する前記インストラクションセットシミュレータのレジスタとスタックを設定すると共に、リターンアドレスとして関数実行時に前記プログラムカウンタの値として適切でない任意の値を設定し、この状態で、前記プログラムカウンタが設定したリターンアドレスの値になるまで前記インストラクションセットシミュレータの実行を続け、前記リターンアドレスが設定した値になると再び前記ホストネイティブ実行を行うことを特徴とする請求項１から請求項６のうちのいずれか１項記載のシステムシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ソフトウェアとハードウェアから構成されるターゲットシステムを別の計算機上でシミュレーション実行するためのシステムシミュレーション装置に関し、特に、ソフトウェアの実行に、ＩＳＳ（インストラクションセットシミュレータ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｓｉｍｕｌａｔｏｒ）を利用するシミュレータに関する。
【背景技術】
【０００２】
この種のシミュレータは、システム開発時におけるシステムアーキテクチャの妥当性確認、実行速度の見積り、ソフトウェアの検証・デバッグなどをはじめ、システム開発完了後におけるシステム利用者のための操作・運用訓練など様々な用途に用いられる。このようなシミュレータは、ターゲットプログラムをホスト計算機に移植してネイティブ実行する方法、あるいはホスト計算機上で動作し、ターゲットＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の命令を解釈実行可能なＩＳＳを介してターゲットプログラムを実行する方法で構築される。特に、ターゲットプログラムをターゲットＣＰＵのＩＳＡ（インストラクションセットアーキテクチャ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ）レベルでシミュレーションする必要がある場合、シミュレータは、構成要素としてＩＳＳを持つことが一般的である。しかしながら、ＩＳＳでターゲットプログラムを実行するシミュレータでは、ターゲットプログラムの１命令をホスト計算機の複数命令で実行することによるシミュレーション速度の低下が問題となる。
【０００３】
そこで、シミュレーション速度を向上させる方法として、従来、ターゲットプログラムの全体をＩＳＳ上で実行するのではなく、ターゲットＣＰＵのＩＳＡで動作させる必要がある部分のみをＩＳＳで実行し、それ以外の部分をホストネイティブで実行する方法があった（例えば、特許文献１参照）。
【０００４】
【特許文献１】特開２０００−２５９４４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記従来のシミュレータでは、ターゲットＣＰＵのオブジェクトコードとホストＣＰＵのオブジェクトコードをリンクするときに、ＩＳＳで走らせるコードのアドレスを出力させ、ＩＳＳは、オブジェクトを実行するときに、コードのアドレスによって、実行環境をＩＳＳとホストＣＰＵとに区別する。また、ＣＰＵのみアクセスするメモリは、ＣＰＵシミュレータ側にローカルに持つ。
このようなシミュレータでは、ターゲットＣＰＵのオブジェクトコードとホストＣＰＵのオブジェクトコードをリンクする必要がある。従って、リンク結果の機械語プログラムは、ホスト計算機の命令コードとターゲットＣＰＵの命令コードから構成されるため、実ターゲットのメモリにロードして実行することは不可能である。逆に、シミュレータは、実ターゲットのメモリにロード可能なロードモジュールを用いてその一部のみをＩＳＳ上で実行し、残りをホストネイティブで実行することも不可能である。
【０００６】
ＩＳＳで動作する部分の機械語コードを実機上の対応する機械語コードとバイナリレベルで一致させるためには、機械語コードがＰＩＣ（Ｐｏｓｉｔｉｏｎ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｃｏｄｅ）の場合を除いて、コードと使用するデータが実機の場合と同じアドレスに配置される必要がある。しかしながら、従来のシミュレータの場合、ＩＳＳ実行部分とホストネイティブ実行部分が大域変数などのデータを共有する場合、それぞれがホストネイティブの同一アドレス空間に存在する必要があるため、コードとデータのレイアウトを実機のアドレス空間と一致させることは困難であった。ここで、機械語プログラムをＰＩＣとすることによって、データの並び順と間隔を実機と一致させれば十分となるが、依然としてデータの並び順と間隔を実機と一致させるための特殊なリンカ制御が必要であることや機械語コードをＰＩＣにすることによる実行効率の悪さが問題となる。
即ち、上記従来のシミュレータでは、ＩＳＳ実行部分とホストネイティブ実行部分がデータを共有する場合において、実際にターゲットシステムで動作する機械語プログラムを用いてのシミュレーションが困難であるという問題があった。
【０００７】
この発明は、上記のような問題点を解決するためになされたものであり、ホストネイティブとＩＳＳでプログラムをハイブリッド実行するとき、ターゲットシステム上で実行可能な機械語プログラムのＩＳＳ上での実行を実現することのできるシステムシミュレーション装置を得ることを目的としている。
【課題を解決するための手段】
【０００８】
この発明に係るシステムシミュレーション装置は、ターゲットプログラムをターゲットＣＰＵのインストラクションセットアーキテクチャで実行するインストラクションセットシミュレータと、ターゲットＣＰＵ外部のハードウェアを模擬するバスシミュレータと、ターゲットプログラムをネイティブ実行するホスト計算機とを備えたシステムシミュレーション装置であって、バスシミュレータは、ターゲット計算機のアドレス空間のアドレスをホスト計算機のアドレス空間のアドレスに変換するアドレス変換テーブルを有するものである。
【発明の効果】
【０００９】
この発明のシステムシミュレーション装置は、ターゲット計算機のアドレス空間のアドレスをホスト計算機のアドレス空間のアドレスに変換するアドレス変換テーブルを備えたので、ターゲットシステム上で実行可能な機械語プログラムのＩＳＳ上での実行を実現することができる。
【発明を実施するための最良の形態】
【００１０】
実施の形態１．
図１は、この発明の実施の形態１によるシステムシミュレーション装置を示す構成図である。
図１に示すシステムシミュレーション装置１は、ホスト計算機２によって、ホストネイティブ部分３の機械語プログラムと、ターゲットＩＳＡ部分４の機械語プログラムを実行することで実現される。ホスト計算機２は、ターゲットシステムと同一エンディアンの計算機である。ホストネイティブ部分３には、インストラクションセットシミュレータ（以下、ＩＳＳという）５とバスシミュレータ６を含んでいる。また、バスシミュレータ６は、アドレス変換テーブル７を備えている。
【００１１】
ホストネイティブ部分３は、ＩＳＳ５およびアドレス変換テーブル７を含むバスシミュレータ６から構成されるホストネイティブのコードおよびデータであり、ホスト計算機２上のメモリに格納される。ターゲットＩＳＡ部分４は、ターゲットシステムで実行可能な形式のコードとデータであり、システム初期化時あるいは実行時に動的にバスシミュレータ６に含まれるメモリモデルに格納される。
【００１２】
ＩＳＳ５は、ターゲットＩＳＡを解釈実行することができるＣＰＵエミュレータである。一般に、ＩＳＳは、サイクル精度シミュレータ、バストランザクションレベルシミュレータ、機能レベルシミュレータなど複数の種類に分類されるが、本発明では、ＩＳＳの精度に依らず実施可能である。バスシミュレータ６は、ターゲットシステムのＣＰＵの外部を模擬し、バス以降に存在するメモリやペリフェラルをシミュレーションするソフトウェアモジュールである。アドレス変換テーブル７は、大域変数のターゲットＣＰＵアドレス空間におけるアドレスをホストＣＰＵのアドレス空間におけるアドレスに変換するためのテーブルである。システムシミュレーション装置１は、初期化時あるいは実行時に動的に変数情報８、９からアドレス変換テーブル７を初期化する。
【００１３】
ターゲットプログラム１０は、Ｃ言語などの高級言語で記述されたソースプログラムである。また、シミュレーション環境用プログラム１１は、ＩＳＳ５とバスシミュレータ６のソースとＩＳＳ５で実行対象となる関数の中身をＩＳＳ呼出しに置換したソースコードを含む。更に、ターゲット用ライブラリ１２は、ターゲットシステムのライブラリである。
【００１４】
ホスト計算機用言語処理系１３とターゲット用言語処理系１４は、ターゲットプログラム１０の記述プログラミング言語のコンパイラとリンカであり、それぞれホストネイティブのコードとターゲットシステム用のコードを生成する。ホスト計算機用言語処理系１３は、ターゲットプログラム１０とシミュレーション環境用プログラム１１とを入力とし、ホストネイティブ部分３と変数情報８を出力とする。ターゲット用言語処理系１４は、ターゲットプログラム１０とターゲット用ライブラリ１２とを入力とし、ターゲットＩＳＡ部分４と変数情報９を出力とする。
【００１５】
変数情報８、９は、言語処理系の出力であるＥＬＦ形式の実行ファイルに含まれるシンボルテーブルである。変数情報８、９は、ターゲットプログラムに存在する大域変数の名前、アドレス、サイズを情報として含めば十分であり、言語処理系が生成するＭＡＰファイルなどで代替可能である。
【００１６】
上記の構成によって、システムシミュレーション装置１は、ホストネイティブ部分３をホストネイティブで実行し、ターゲットＩＳＡ部分４をＩＳＳ５上で実行することによって、ターゲットシステムのシミュレーションを行う。ターゲットプログラム１０中に含まれる大域変数は、ホストネイティブ部分３のアドレス空間とターゲットＩＳＡ部分４のアドレス空間に重複して存在するため、一貫性制御を必要とする。バスシミュレータ６は、ＩＳＳ５のメモリアクセス時、アドレス変換テーブル７を用いて大域変数のアクセスの検出とアドレス変換を行い、ホストネイティブの空間側の大域変数にアクセスすることによって一貫性制御を行う。
【００１７】
図２は、ＩＳＳがターゲットプログラムを実行する際に発生するメモリアクセスの模式図である。
ホスト計算機アドレス空間２２は、ホスト計算機２がプログラムをネイティブ実行する際にアクセスするアドレス空間である。ターゲットＣＰＵアドレス空間２１は、メモリ領域２３とＩ／Ｏ領域２４から構成される。メモリ領域２３は、バスシミュレータ６の構成要素であるメモリモデルが模擬する領域であり、Ｉ／Ｏ領域２４は、ペリフェラルモデルが模擬する領域である。ターゲットＣＰＵアドレス空間２１は、実機用の機械語プログラムがロードされるため、ターゲットシステムと等しいデータのレイアウトを持つ。例えば、ターゲットシステムで有効なアドレス０ｘ１２３４に存在する命令あるいはデータは、ターゲットＣＰＵアドレス空間でもアドレス０ｘ１２３４に割り当てられる。
【００１８】
ＩＳＳ５は、ターゲットプログラム１０中のプログラムの実行にバスアクセスが必要な場合、バスシミュレータ６を介してバスアクセスを行う。メモリアクセスの要求アドレスが大域変数の領域を対象とする場合、バスシミュレータ６は、要求アドレスをターゲットＣＰＵアドレスからホストネイティブアドレスに変換してホストネイティブ空間に対してアクセスをする。また、メモリアクセスの要求アドレスが大域変数以外の領域にある場合、バスシミュレータ６は、メモリモデルあるいはＩ／Ｏモデルにアクセスする。この結果、大域変数へのアクセスは、常にホストネイティブ側の大域変数の領域に対して行われるため、ターゲットプログラムのうちホストネイティブで実行される部分とＩＳＳ５上で実行される部分が大域変数を共有している場合でも、大域変数の一貫性を保つことができる。
【００１９】
図３は、バスシミュレータ６における要求アドレスによるアクセス切替え処理のフローチャートである。
バスシミュレータ６は、多バイト長のバスアクセスを複数の単一バイトアクセスに分解し、図３の処理を適用する。即ち、バスシミュレータ６は、要求アドレスはメモリ領域か否かを判定し（ステップＳＴ３０１）、そうであった場合は、アドレス変換テーブル７を用いて、要求アドレスは大域変数領域かを判定する（ステップＳＴ３０２）。次に、これらステップＳＴ３０１，ＳＴ３０２の判断に基づいてバスアクセスの模擬処理であるステップＳＴ３０３，ＳＴ３０４，ＳＴ３０５の処理を選択する。即ち、ステップＳＴ３０２において、大域変数領域であった場合は、ホスト計算機のアドレス空間へのアクセスであり（ステップＳＴ３０３）、そうでなかった場合はメモリモデルへのアクセスと判断する（ステップＳＴ３０４）。ここで、ステップＳＴ３０３のホスト計算機アドレス空間へのアクセス処理は、アドレス変換テーブル７を用いて行う。また、ステップＳＴ３０１において、要求アドレスがメモリ領域ではなかった場合は、Ｉ／Ｏモデルへのアクセスと判定する（ステップＳＴ３０５）。図３では、すべてのバスアクセスを単一バイトのアクセスに分解することを前提としているが、特に大域変数へのアクセスがバイトアクセスに分解されていれば十分であり、他のアクセスは、多バイト長のままとする代替手段も可能である。また、大域変数へのアクセス先をメモリモデルとホスト計算機のアドレス空間に切り換えるのではなく、両方にアクセスする方式も可能である。この場合、ホスト計算機のアドレス空間へのアクセスのみバイトアクセスに分解し、データ読出しの場合、ホスト計算機から読み出したデータを優先すればよい。
【００２０】
図４は、論理的なアドレス変換テーブル７の構成例である。
アドレス変換テーブル７は、ターゲットＣＰＵアドレス空間の変数情報９とホスト計算機アドレス空間の変数情報８に含まれる大域変数のアドレス変換の情報を持つ。図４中のＦｏｏ、Ｂａｒ、Ｂａｚは、ターゲットプログラムに含まれる大域変数であるとする。各々の大域変数は、ホスト計算機上とＩＳＳ上で同じサイズであるが、異なる割り当てアドレスを持つ。アドレス変換テーブル７は、大域変数Ｂａｚに関して、ＩＳＳ上ではアドレス区間０ｘ１２３Ｃ〜０ｘ１２３Ｆとホスト計算機上ではアドレス区間０ｘ３００００〜０ｘ３０００３のバイト毎の対応を持つ。一般に、アドレス変換テーブル７は、サイズＮのグローバル変数に関して、ＩＳＳ上でアドレスＸ、ホスト計算機上でアドレスＹに割り当てられている場合、ＩＳＳ上のアドレス区間ＸからＸ＋Ｎ−１とホスト計算機上のアドレス区間ＹからＹ＋Ｎ−１のバイト毎の対応を持つ。
【００２１】
次に、アドレス変換テーブル７の物理的なメモリ格納方法について説明する。図５は、アドレス変換テーブルとターゲットＣＰＵアドレス空間とホスト計算機アドレス空間の相関関係を示す説明図である。
ターゲットＣＰＵアドレス空間５１およびホスト計算機アドレス空間５２の１つのエントリは、１バイトのサイズを持つ。ターゲットＣＰＵアドレス空間５１の領域５３は、ターゲットプログラムの大域変数を含む領域であり、一般にオブジェクトファイル中の.dataセクションと.bssセクションに対応する領域である。アドレス変換テーブル７は、領域５３に存在するすべてのエントリと同じ数のエントリを持つ。各エントリは、先頭から順に領域５３のエントリと一対一に対応する。即ち、領域５３の先頭からＮ番目に存在するエントリは、アドレス変換テーブル７の先頭からＮ番目のエントリに対応する。また、各エントリのサイズは、ホスト計算機のアドレスサイズであり、各エントリの値は、ターゲットＣＰＵアドレス空間５１のエントリに対応するホスト計算機アドレス空間５２のエントリのアドレスもしくは０である。エントリの値が０の場合、対応するホスト計算機アドレス空間５２のエントリが存在しない状態、即ち、エントリが表すターゲットＣＰＵアドレス空間５１のエントリが大域変数を保持していない状態である。この状態を示すエントリの値は、必ずしも０である必要はなく、大域変数が割り当てられることがない他の値でも代替可能である。上記の構成によって、ターゲットＣＰＵアドレスＸに対応するホスト計算機アドレスを保持するアドレス変換テーブルエントリのインデックスは下式で得られる。
（テーブルインデックス）＝Ｘ−（領域５３の先頭のアドレス）
【００２２】
このように大域変数のためのアドレス変換は定数オーダの計算量で完了することが可能である。また、アドレス変換テーブルのサイズは、（領域５３のサイズ）×（ホスト計算機のアドレスサイズ）である。仮に領域５３のサイズが人工衛星のような組込みシステムで十分な１ＭＢでホスト計算機のアドレスサイズが４バイトの場合、アドレス変換テーブル７のサイズは４ＭＢであり、近年の高性能計算機のキャッシュに載る程度に十分小さい。
【００２３】
図５に示したアドレス変換テーブル７は、ホストネイティブの大域変数のアドレスを保持するが、これらの変数のアドレスは、ホストネイティブプログラムのリンク時まで未解決である。従って、ホストネイティブプログラムの一部であるアドレス変換テーブル７は、ホストネイティブプログラムの初期化時あるいは実行時に動的に構築される。
【００２４】
図６は、システムシミュレータの初期化時に行うアドレス変換テーブル構築処理のフローチャートである。図６の処理を行う前のアドレス変換テーブル７の全エントリの値は、０とする。ステップＳＴ６０１は、ＩＳＳ向けＥＬＦファイルのシンボルテーブルの全エントリを順に処理するループの開始であり、ステップＳＴ６０８は、当該ループの終了である。ステップＳＴ６０１で始まるループは、１回の繰り返しで１つの大域変数のアドレス変換情報をアドレス変換テーブル７に登録する。ステップＳＴ６０２は、シンボルテーブルエントリのタイプを確認し、大域データのエントリでなければループをスキップする。ステップＳＴ６０３、ＳＴ６０４、ＳＴ６０５は、それぞれ変数名、変数サイズ、ターゲットＣＰＵアドレスをシンボルテーブルエントリのフィールドから取得する。ステップＳＴ６０６は、ステップＳＴ６０３で取得した変数名をキーとしてホスト計算機向けＥＬＦファイルのシンボルテーブルからのアドレスを検索する処理である。ステップＳＴ６０７は、ステップＳＴ６０５で取得したターゲットＣＰＵアドレスからステップＳＴ６０６で取得したホスト計算機アドレスへの対応をステップＳＴ６０４で取得した変数サイズ分だけ行う処理である。上記の処理によって、大域変数が存在するデータ領域のアドレス変換情報のアドレス変換テーブル７への登録が完了する。
【００２５】
図７は、図６に示したステップＳＴ６０７のデータ領域登録処理の詳細を示すフローチャートである。
データ領域登録処理は、アドレス変換の対象となる連続した領域の開始ターゲットＣＰＵアドレスと開始ホスト計算機アドレスとバイトを単位とする領域サイズを入力とする。図７中のＸは、変換対象となるターゲットＣＰＵアドレスであり、Ｙは、Ｘを変換して得られるホスト計算機アドレスである。ステップＳＴ７０１は、Ｘに開始ターゲットＣＰＵアドレスを代入する処理である。ステップＳＴ７０２は、Ｙに開始ホスト計算機アドレスを代入する処理である。ステップＳＴ７０３は、領域サイズのバイト数分だけ繰り返すループの開始であり、ステップＳＴ７０８は、当該ループの終了である。ステップＳＴ７０３で始まるループは、１回の繰り返しで１バイトの領域に対応するターゲットＣＰＵアドレスとホスト計算機アドレスのペアをアドレス変換テーブル７に登録する。ステップＳＴ７０４は、ターゲットＣＰＵアドレスＸに対応するアドレス変換テーブル７のインデックスを計算する処理である。ステップＳＴ７０５は、ステップＳＴ７０４で算出したインデックスに存在するアドレス変換テーブル７のエントリにホスト計算機アドレスＹを代入する。ステップＳＴ７０６とステップＳＴ７０７は、それぞれＸとＹに１を加算する処理である。上記の処理によって、指定された連続領域のデータに存在するバイト毎のターゲットＣＰＵアドレスとホスト計算機アドレスの対応がアドレス変換テーブル７に設定される。
【００２６】
図８は、ＩＳＳ呼出し処理のフローチャートである。
図８の処理は、ターゲットプログラム１０中のＩＳＳ５で実行する必要がある部分を含む関数をＩＳＳ５を介して呼び出す処理である。シミュレーション環境用プログラム１１は、ターゲットプログラム１０中のＩＳＳ５で実行する必要がある関数の呼出しを図８の処理で置換している。ステップＳＴ８０１は、ＩＳＳ５のプログラムカウンタに関数の開始アドレスを設定する処理である。ステップＳＴ８０２は、スタックポインタを設定する処理である。ステップＳＴ８０３は、関数の引数を設定する処理である。具体的には、引数をレジスタやスタック中に設定し、引数がポインタであれば適切にポインタが指すデータをＩＳＳ５のアドレス空間にコピーする処理である。ステップＳＴ８０３の処理は、関数が引数を持たない場合は不要である。ステップＳＴ８０４は、関数のリターンアドレスを設定する処理である。具体的には、リターンアドレスレジスタあるいはスタックに適当なリターンアドレスを設定する。リターンアドレスは、関数が実行し得る命令のアドレス以外の任意の値である。ステップＳＴ８０５は、プログラムを１命令実行する処理であり、関数の処理が完了するまで繰り返し実行される。ステップＳＴ８０６は、プログラムカウンタの値がステップＳＴ８０４で設定したリターンアドレスになっているかを確認することによって、関数呼出しの完了を検出する処理である。ステップＳＴ８０７は、関数呼出しの結果を取得する処理である。これは、関数の戻り値を戻り値レジスタあるいはスタックから取得と引数のポインタを介して得られる結果をＩＳＳ５のアドレス空間からホスト計算機アドレス空間へコピーする処理を含む。ステップＳＴ８０７の処理は、関数が結果を出力しない場合不要である。
【００２７】
以上のように、実施の形態１のシステムシミュレーション装置によれば、ターゲットプログラムをターゲットＣＰＵのインストラクションセットアーキテクチャで実行するインストラクションセットシミュレータと、ターゲットＣＰＵ外部のハードウェアを模擬するバスシミュレータと、ターゲットプログラムをネイティブ実行するホスト計算機とを備えたシステムシミュレーション装置であって、バスシミュレータは、ターゲット計算機のアドレス空間のアドレスをホスト計算機のアドレス空間のアドレスに変換するアドレス変換テーブルを有するよう構成したので、ターゲットプログラムの一部をホスト計算機向けにコンパイルして実行し、別の一部をターゲットシステム向けの機械語プログラムに変更を加えることなく実行してシミュレーションすることができる。
【００２８】
また、実施の形態１のシステムシミュレーション装置によれば、インストラクションセットシミュレータ上で動作するターゲットプログラムによる大域データへのメモリアクセス時に、アドレス変換テーブルを用いてホスト計算機上のアドレス空間に存在する大域データのアドレスを取得し、ホスト計算機上の大域データに対してメモリアクセスするようにしたので、ＩＳＳ実行部分とホストネイティブ実行部分が大域変数を共有することができる。
【００２９】
また、実施の形態１のシステムシミュレーション装置によれば、インストラクションセットシミュレータ上で動作するターゲットプログラムによる大域変数へのアクセス判定をアドレス変換テーブルを用いて行うようにしたので、メモリアクセスが大域変数かどうかを容易に判別することができる。
【００３０】
また、実施の形態１のシステムシミュレーション装置によれば、アドレス変換テーブルは、ターゲットＣＰＵアドレス空間上に存在する大域変数を含む領域の先頭から末尾までのバイトアドレスと順に一対一に対応するエントリを持ち、各エントリがホストＣＰＵアドレス空間上のアドレスを保持するようにしたので、高速なアドレス変換を行うことが可能となる。
【００３１】
また、実施の形態１のシステムシミュレーション装置によれば、アドレス変換テーブルは、言語処理系が生成する変数情報に含まれる変数のサイズとアドレスを用いて構築されるようにしたので、ホストＣＰＵとターゲットＣＰＵが同じエンディアンを持つ場合、言語処理系が出力するシンボルテーブルを用いてアドレス変換テーブルの構築を行うことができる。
【００３２】
また、実施の形態１のシステムシミュレーション装置によれば、ホストネイティブ実行からのインストラクションセットシミュレータ実行への切替え時、実行対象となる関数のエントリアドレスをインストラクションセットシミュレータのプログラムカウンタに設定し、かつ、関数が使用するインストラクションセットシミュレータのレジスタとスタックを設定すると共に、リターンアドレスとして関数実行時にプログラムカウンタの値として適切でない任意の値を設定し、この状態で、プログラムカウンタが設定したリターンアドレスの値になるまでインストラクションセットシミュレータの実行を続け、リターンアドレスが設定した値になると再びホストネイティブ実行を行うようにしたので、ホストネイティブ実行とＩＳＳ実行とを容易に切り替えることができる。
【００３３】
実施の形態２．
実施の形態１では、ホスト計算機がターゲットシステムと同一のエンディアンを持つことを前提とした。また、実施の形態１において、ホスト計算機用言語処理系１３とターゲット用言語処理系１４で同一構造体に対するメモリレイアウトが異なる場合、即ち、構造体メンバの構造体先頭からのオフセットが一致しない場合、アドレス変換テーブルを正しく構築できないため、構造体変数をＩＳＳとホストネイティブで共有する大域変数にすることができない。従って、ホスト計算機とコンパイラの選択に制約が生じることが問題となる。
【００３４】
実施の形態２は、実施の形態１のホスト計算機をＩＳＳと異なるエンディアンの計算機にし、同一の構造体が異なるメモリレイアウトを持つようなホスト計算機用言語処理系１３とターゲット用言語処理系１４からシステムシミュレータを構築するケースを想定している。更に、実施の形態２では、変数情報８、９は、一般的なデバッガが使用するＤＷＡＲＦ形式のデバッグ情報とする。但し、デバッグ情報は、大域変数の名前、アドレス、サイズ、型の情報を含んでいれば良く、ＤＷＡＲＦと異なるデバッグ形式でも代替可能である。
【００３５】
実施の形態１において、単純にホスト計算機を異なるエンディアンの計算機に置換した場合の不具合を図４の論理的なアドレス変換テーブル７を例として説明する。尚、実施の形態２のシステムシミュレーション装置における図面上の構成は、アドレス変換テーブル７ａ以外、図１と同様であるため、以下、図１を援用して説明する。
ここで、ＩＳＳ５はビッグエンディアンであり、ホスト計算機２がリトルエンディアンであると仮定する。ＩＳＳ５の変数Ｂａｚの領域である０ｘ１２３Ｃは、変数ＢａｚのＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｙｔｅ）である。しかし、アドレス変換後の０ｘ３０００は、ホストネイティブ空間では、変数ＢａｚのＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｙｔｅ）となり正しくない。
【００３６】
実施の形態２では、ホスト計算機２がＩＳＳ５と異なるエンディアンを持つ場合、図９のようなアドレス変換テーブル７ａを使用する。アドレス変換テーブル７ａは、アドレス変換テーブル７と異なり、変数毎にアドレスを逆からマップしている。例えば、アドレス変換テーブル７ａは、変数Ｂａｚの領域０ｘ１２３Ｃ、０ｘ１２３Ｄ、０ｘ１２３Ｅ、０ｘ１２３Ｆを順に０ｘ３０００３、０ｘ３０００２、０ｘ３０００１、０ｘ３００００にマップする。アドレス０ｘ１２３Ｃは、ビッグエンディアンのＩＳＳ５にとってＢａｚのＭＳＢであり、対応するアドレス０ｘ３０００３は、リトルエンディアンのホスト計算機２によって同様にＢａｚのＭＳＢとなり正しい。
【００３７】
図１０は、アドレス変換テーブル初期化処理のフローチャートである。以下では、ターゲットプログラム１０がＣ言語記述の場合について記述する。但し、本実施の形態はＣ言語以外の高級言語で記述されたターゲットプログラムでも実施可能である。
図１０の処理は、ホストネイティブのデバッグ情報とターゲットシステム向けのデバッグ情報を入力とする。デバッグ情報は、一般的なＣ言語コンパイラが生成するデバッグ情報である。以降では、デバッグ情報としてＤＷＡＲＦ形式を想定するが、大域変数の型情報とアドレス情報を取得できるデバッグ情報フォーマットであればＤＷＡＲＦ形式に限らない。ステップＳＴ１００１は、ターゲットプログラム１０に含まれる全大域変数を順に処理するためのループの開始であり、ステップＳＴ１００７は、当該ループの終了である。
【００３８】
ステップＳＴ１００１で始まるループは、繰り返し毎に大域変数のアドレス変換情報をアドレス変換テーブル７ａに登録する処理であり、.debug_pubnamesセクションに含まれるエントリを順に処理する。ステップＳＴ１００２は、.debug_pubnamesセクションの巡回中エントリが大域変数かどうかを確認する処理であり、関数名などの大域変数以外のシンボルをスキップする。ステップＳＴ１００３は、大域変数の開始アドレスを取得する処理であり、.debug_pubnamesセクションの巡回中エントリのエントリが示す位置にあるＤＩＥ（Ｄｅｂｕｇ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｅｎｔｒｙ）のＤＷ＿ＡＴ＿ｌｏｃａｔｉｏｎ属性からアドレスを取得する。ステップＳＴ１００４は、処理中の変数名を変数名スタックにプッシュする処理である。変数名スタックは、後の処理でホスト計算機アドレスを検索するときに用いるキーを生成するためのスタックであり、下位のサブルーチンからもアクセス可能である。変数名スタックの要素は、変数名、配列インデックス、構造体メンバ名のいずれかである。ステップＳＴ１００５は、変数を構成する基本データ毎にアドレス変換情報をアドレス変換テーブル７ａに登録するための再帰処理であり、ステップＳＴ１００３で取得した先頭アドレスと型情報を入力とする。ここで、型情報は、現在処理中の変数に対応するＤＩＥのＤＷ＿ＡＴ＿ｔｙｐｅ属性が指す別のＤＩＥである。ステップＳＴ１００６はステップＳＴ１００４でプッシュした変数名を変数名スタックからポップする処理である。図１０の処理では、.debug_pubnamesセクションを用いて大域変数のＤＩＥを巡回したが、.debug_infoに含まれるすべてのＤＩＥを巡回し、大域変数のＤＩＥだけにＳＴ１００３からＳＴ１００６の処理を適用してもよい。
【００３９】
図１１は、図１０のステップＳＴ１００５の詳細であり、基本型あるいは複合型のデータを基本型毎にアドレス変換テーブル７ａに登録する処理を示すフローチャートである。
図１１の処理は、再帰処理であり、再帰の底で基本型データ毎のアドレス変換に必要なターゲットＣＰＵアドレスとホスト計算機アドレスをアドレス変換テーブル７ａに登録する。図１１の処理の入力は、登録対象となるデータの開始アドレスと配列、構造体、基本型のいずれかの型情報である。具体的に型情報は、ＤＷ＿ＴＡＧ＿ａｒｒａｙ＿ｔｙｐｅ、ＤＷ＿ＴＡＧ＿ｓｔｒｕｃｔｕｒｅ＿ｔｙｐｅ、ＤＷ＿ＴＡＧ＿ｂａｓｅ＿ｔｙｐｅのいずれかをタグとするＤＩＥである。ステップＳＴ１１０１は、データ型の判定処理であり、ＤＩＥのタグによってデータ型を判別し、配列の場合はステップＳＴ１１０２、構造体の場合はステップＳＴ１１１０、基本型の場合はステップＳＴ１１１７の処理を行う。
【００４０】
ステップＳＴ１１０２は、配列の要素数を取得する処理である。配列の要素数は、入力となるＤＩＥのＤＷ＿ＴＡＧ＿ａｒｒａｙ＿ｔｙｐｅのＤＩＥの後続エントリであるＤＷ＿ＴＡＧ＿ｓｕｂｒａｎｇｅ＿ｔｙｐｅのタグのＤＩＥのＤＷ＿ＡＴ＿ｕｐｐｅｒ＿ｂｏｕｎｄ属性の値である。ステップＳＴ１１０３は、配列要素のサイズを取得する処理である。配列要素サイズの取得方法は、一般的なデバッガが行う処理と同じであるため、詳細は省略する。ステップＳＴ１１０４は、現在処理中の配列要素数回のループの開始であり、ステップＳＴ１１０９は、当該ループの終了である。ステップＳＴ１１０４で始まるループは、配列インデックスを０から配列要素数−１までの配列全要素に関するアドレス変換情報をアドレス変換テーブル７ａに登録する。ステップＳＴ１１０５は、現在処理中の配列インデックスに要素サイズを乗じて更に入力開始アドレスを加えて配列要素の開始アドレスを取得する処理である。ステップＳＴ１１０６は、現在処理中の配列要素のインデックスを変数名スタックにプッシュする処理である。ステップＳＴ１１０７は、配列要素の型情報と開始アドレスを入力とした自己再帰処理である。ステップＳＴ１１０８は、ステップＳＴ１１０６でプッシュした配列インデックスをポップする処理である。
【００４１】
ステップＳＴ１１１０は、構造体メンバを巡回するループの開始であり、ステップＳＴ１１１６は、当該ループの終了である。ステップＳＴ１１１０で始まるループは、入力ＤＩＥの後続エントリとして順に存在するＤＷ＿ＴＡＧ＿ｍｅｍｂｅｒタグのメンバＤＩＥの巡回処理である。ステップＳＴ１１１１は、巡回中の構造体メンバのオフセットを取得する処理である。構造体メンバのオフセットは、巡回中メンバＤＩＥのＤＷ＿ＡＴ＿ｄａｔａ＿ｍｅｍｂｅｒ＿ｌｏｃａｔｉｏｎ属性の値である。ステップＳＴ１１１２は、入力開始アドレスにステップＳＴ１１１１で取得したメンバオフセットを加えて構造体メンバの開始アドレスを取得する処理である。ステップＳＴ１１１３は、構造体メンバ名を変数名スタックにプッシュする処理である。構造体メンバ名は、巡回中メンバＤＩＥのＤＷ＿ＡＴ＿ｎａｍｅ属性の値である。ステップＳＴ１１１４は、ステップＳＴ１１１２で取得した構造体メンバ開始アドレスと構造体メンバの型情報を入力とした自己再帰処理である。構造体メンバの型情報は、巡回中メンバＤＩＥのＤＷ＿ＡＴ＿ｔｙｐｅ属性の値が示すＤＩＥである。ステップＳＴ１１１５は、ステップＳＴ１１１３でプッシュした構造体メンバ名を変数名スタックからポップする処理である。
【００４２】
ステップＳＴ１１１７は、型のサイズを取得する処理である。型のサイズは、入力ＤＩＥのＤＷ＿ＡＴ＿ｂｙｔｅ＿ｓｉｚｅ属性の値である。ステップＳＴ１１１８は、ホスト計算機アドレスは、変数名スタックに存在する変数名、構造体メンバ名、配列名を順につなげたシーケンスをキーとして、ホスト計算機向けＤＷＡＲＦ情報から基本型のホスト計算機アドレスを取得する処理である。一般的なデバッガによるアドレス取得処理と同じであるステップＳＴ１１１８の処理の詳細は省略する。ステップＳＴ１１１９は、入力開始アドレスに存在する基本型データの領域をアドレス変換テーブル７ａに登録する処理である。
【００４３】
図１２は、図１１のステップＳＴ１１１９の詳細であり、ＩＳＳ５のエンディアンとホスト計算機のエンディアンが異なる場合において、基本型データ領域をアドレス変換テーブル７ａに登録する処理のフローチャートである。ホスト計算機とＩＳＳ５のエンディアンが等しい場合は、図７の処理で代替すればよい。
図１２のステップＳＴ１２０１〜ＳＴ１２０８の処理は、ステップＳＴ１２０２とステップＳＴ１２０７を除いて図７のステップＳＴ７０１〜ＳＴ７０８の処理と同じである。図１２の処理では、ステップＳＴ１２０２とステップＳＴ１２０７に示すように、図７の処理と逆順でターゲットＣＰＵアドレスとホスト計算機アドレスのペアをアドレス変換テーブル７ａに登録する。即ち、図１２の処理は、開始ターゲットＣＰＵアドレスが末尾ホスト計算機アドレスに変換されるようにし、末尾ターゲットＣＰＵアドレスが開始ホスト計算機アドレスに変換されるようにアドレス変換テーブルを構築する。
【００４４】
上記の処理では、構造体などの複合型を基本型に分解してアドレス変換テーブル７ａを構築するため、ターゲット向けのコンパイラとホスト計算機向けのコンパイラが同一構造体に対して異なるデータレイアウトを持つ場合にも、有効なアドレス変換テーブル７ａを構築することが可能である。構築されたアドレス変換テーブル７ａは、大域変数を構成する基本型毎にバイト単位でターゲットＣＰＵアドレス空間とホスト計算機アドレス空間のマッピングを保持する。従って、ＩＳＳ５とホスト計算機２が異なるエンディアンの場合にも、ＩＳＳ５のデータアクセスとホスト計算機２のデータアクセスのバイトオーダに関して整合性を保つことが可能である。
【００４５】
以上のように、実施の形態２のシステムシミュレーション装置によれば、アドレス変換テーブルは、言語処理系が生成する変数情報に含まれる変数のサイズとアドレスと型情報を用いて構築されるようにしたので、ホスト計算機のエンディアンに依らずハイブリッドシミュレーションを行うことができる。
【００４６】
実施の形態３．
ＩＳＳがＣＰＵのＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）を模擬している場合、ＭＭＵを通過する前の論理アドレスを用いて大域変数のアドレスをホストアドレスに変換する必要がある。そこで、実施の形態３として、実施の形態１および２において、アドレス変換テーブル７（または７ａ）をバスシミュレータ６内部からＩＳＳ５内部に移し、メモリアクセスに関するホストＣＰＵ空間とターゲットＣＰＵアドレス空間の切替えをバスシミュレータ６ではなく、ＩＳＳ５が行う。これにより、ＩＳＳ５がＣＰＵのＭＭＵを模擬する場合に対応することができる。
【００４７】
実施の形態４．
実施の形態１、２、３において、アドレス変換テーブル７（または７ａ）の構築を、言語処理系が生成した変数情報からシステムシミュレーション装置１がアドレス変換テーブル７（または７ａ）を構築するのではなく、言語処理系内部でアドレス変換テーブルを作成し、システムシミュレーション装置１がアドレス変換テーブルをインポートするようにしてもよい。
【図面の簡単な説明】
【００４８】
【図１】この発明の実施の形態１によるシステムシミュレーション装置を示す構成図である。
【図２】この発明の実施の形態１によるシステムシミュレーション装置のＩＳＳがターゲットプログラムを実行する際に発生するメモリアクセスの模式図である。
【図３】この発明の実施の形態１によるシステムシミュレーション装置のバスシミュレータにおける要求アドレスによるアクセス切替え処理のフローチャートである。
【図４】この発明の実施の形態１によるシステムシミュレーション装置の論理的なアドレス変換テーブルの構成例を示す説明図である。
【図５】この発明の実施の形態１によるシステムシミュレーション装置のアドレス変換テーブルとアドレス空間の相関関係を示す説明図である。
【図６】この発明の実施の形態１によるシステムシミュレーション装置のアドレス変換テーブル構築処理のフローチャートである。
【図７】この発明の実施の形態１によるシステムシミュレーション装置のデータ領域登録処理のフローチャートである。
【図８】この発明の実施の形態１によるシステムシミュレーション装置のＩＳＳ呼出し処理のフローチャートである。
【図９】この発明の実施の形態２によるシステムシミュレーション装置の論理的なアドレス変換テーブルの構成例を示す説明図である。
【図１０】この発明の実施の形態２によるシステムシミュレーション装置のアドレス変換テーブル構築処理のフローチャートである。
【図１１】この発明の実施の形態２によるシステムシミュレーション装置のデータ領域登録処理のフローチャートである。
【図１２】この発明の実施の形態２によるシステムシミュレーション装置の基本型データ領域登録処理のフローチャートである。
【符号の説明】
【００４９】
１  システムシミュレーション装置、２  ホスト計算機、３  ホストネイティブ部分、４  ターゲットＩＳＡ部分、５  インストラクションセットシミュレータ（ＩＳＳ）、６  バスシミュレータ、７，７ａ  アドレス変換テーブル、８，９  変数情報、１０  ターゲットプログラム、１１  シミュレーション環境用プログラム、１２  ターゲット用ライブラリ、１３  ホスト計算機用言語処理系、１４  ターゲット用言語処理系、２１，５１  ターゲットＣＰＵアドレス空間、２２，５２  ホスト計算機アドレス空間。
【図１】
2010102496.tif 000003
【図２】
2010102496.tif 000004
【図３】
2010102496.tif 000005
【図４】
2010102496.tif 000006
【図５】
2010102496.tif 000007
【図６】
2010102496.tif 000008
【図７】
2010102496.tif 000009
【図８】
2010102496.tif 000010
【図９】
2010102496.tif 000011
【図１０】
2010102496.tif 000012
【図１１】
2010102496.tif 000013
【図１２】
2010102496.tif 000014