JP2006505844A - プログラムコード変換の検証を実行するための方法および装置 - Google Patents

プログラムコード変換の検証を実行するための方法および装置 Download PDF

Info

Publication number
JP2006505844A
JP2006505844A JP2004549323A JP2004549323A JP2006505844A JP 2006505844 A JP2006505844 A JP 2006505844A JP 2004549323 A JP2004549323 A JP 2004549323A JP 2004549323 A JP2004549323 A JP 2004549323A JP 2006505844 A JP2006505844 A JP 2006505844A
Authority
JP
Japan
Prior art keywords
target
emulator
code
processor
block
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
JP2004549323A
Other languages
English (en)
Other versions
JP4766540B2 (ja
Inventor
ジョン サンダーム
ポウル ノウレス
Original Assignee
トランジティブ リミテッド
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 トランジティブ リミテッド filed Critical トランジティブ リミテッド
Publication of JP2006505844A publication Critical patent/JP2006505844A/ja
Application granted granted Critical
Publication of JP4766540B2 publication Critical patent/JP4766540B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44589Program code verification, e.g. Java bytecode verification, proof-carrying code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Communication Control (AREA)
  • Debugging And Monitoring (AREA)
  • Numerical Control (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Gyroscopes (AREA)
  • Lubrication Of Internal Combustion Engines (AREA)
  • Diaphragms For Electromechanical Transducers (AREA)

Abstract

エミュレータ(30a)によって実行されるプログラムコード変換を検証するための方法および装置。セイムツーセイム(same−to−same)(X−X)モードで構成された第1のエミュレータ(30a)が、対象プロセッサ(12)による実行向けに対象コード(10)を目標コード(20)に変換する。対象プロセッサ(12)によるネイティブでの対象コード(10)の実行が、第1のエミュレータ(30a)を介した実行と比較されて、そのプログラムコード変換が検証される。オプションとして、次に、第1のエミュレータ(30a)を使用して、目標プロセッサ(22)上で実行されるディスツーダット(this−to−that)(X−Y)モードエミュレータ(30a)などの、第2のエミュレータ(30b)によって実行されたプログラムコード変換(すなわち、最適化および/または翻訳)が増進的に検証される。

Description

本発明は、一般に、プログラムコード変換の分野に関する。詳細には、本発明は、プログラムコード変換が正しく実行されたことを検証するための方法および装置に関する。
コンピュータ処理の分野においては、対象プログラムが、対象コンピュータプロセッサ上で実行されるように書かれる。しばしば、対象プログラムを異なる形態に変換するために、プログラムコード変換を実行することが必要である。第1に、不要な命令を削除すること、または命令シーケンスを単純化することなどにより、対象プログラムの実行を最適化するために、ときとして、プログラムコード変換を実行することが所望される。第2に、対象プログラムと適合しない目標プロセッサ上で対象プログラムを実行することが、ときとして、所望される。いずれの場合でも、エミュレータを使用してプログラムコード変換を実行して、変換されたプログラムが所望された異なる形態でもたらされるようにする。
プログラムコード変換が正しく実行されたことを検証する強い要望が存在する。詳細には、変換済みのプログラムを実行することの結果が、元の対象プログラムを実行することの結果と等価であることを検証することが所望される。理想的には、対象プログラムと変換済みのプログラムの間でビット単位の適合性を実証することが所望される。
本発明によれば、添付の特許請求の範囲に記載する装置および方法が提供される。本発明の好ましい特徴は、従属請求項、および以下の説明から明白となろう。以下は、本発明の様々な実施形態により実現可能な様々な態様および利点の概要である。この概要は、当業者が、その後に続く詳細な設計の説明をより速やかに習得するのに役立つ概説として提供され、本明細書に添付される特許請求の範囲を制限することを意図するものでは全くない。
国際公開第99/03168号パンフレット
本発明は、迅速、効率的、正確、かつ費用対効果の大きい形でプログラムコード変換を検証するための方法および装置を提供する。
本発明の第1の態様によれば、対象プロセッサ上で対象コードをネイティブで実行することを、エミュレータを介して対象プロセッサ上で対象コードを実行することと比較することによりエミュレータによって実行される、プログラムコード変換を検証する方法が提供される。プログラムコード変換は、エミュレータを介して対象プロセッサ上で実行された対象コードのエミュレートされた状態を、対象プロセッサ上においてネイティブで実行された対象コードのネイティブの状態と比較して、エミュレートされた状態とネイティブの状態が、対象コードの中のすべての選択可能な比較ポイントで比較されるようにすることにより、検証される。プログラムコード変換は、好ましくは、様々な複雑度の検証モードで検証されて、次第により複雑な検証モードが使用されるようにする。
好ましくは、プログラムコード変換を検証する方法は、対象プロセッサからのメモリに対する読み込み要求および格納要求を読み込み/格納バッファの中に入れ、好ましくは、目標コードを実行する際にメモリへのアクセスを選択的に阻止して、エミュレートされたメモリイメージが読み込み/格納バッファの中で提供されるようにすることにより、対象プロセッサに関連するメモリへのアクセスを選択的に禁止する。次に、プログラムコード変換検証を実行するために、読み込み/格納バッファの中で提供されるエミュレートされたメモリイメージが、メモリの中で提供される対象プロセッサ状態と比較される。
本発明の特に好ましい発展形態では、プログラムコード変換検証方法は、対象プロセッサ上で実行される第1のエミュレータを介した対象コードの実行を、目標プロセッサ上で実行される第2のエミュレータを介した対象コードの実行と比較する増進的検証アルゴリズムをさらに含むことが可能である。増進的検証アルゴリズムを使用する際、第1のホストプロセッサが、対象プロセッサとして提供され、第2のホストプロセッサが、目標プロセッサとして提供され、対象コードは、対象プロセッサ上においてネイティブで実行可能である一方で、目標プロセッサ上ではネイティブで実行可能ではない。したがって、この場合、対象プロセッサと目標プロセッサは、本来的に不適合である。対象プロセッサ上で対象コードをネイティブで実行することを、第1のエミュレータを介して対象プロセッサ上で対象コードを実行することと比較して、第1のエミュレータによって実行されたプログラムコード変換を検証することにより、対象プロセッサ上の第1のエミュレータのプログラムコード変換が最初に検証された後、対象プロセッサ上で実行される第1のエミュレータを介した対象コードの実行が、目標プロセッサ上で実行される第2のエミュレータを介した対象コードの実行と比較され、第2のエミュレータによって実行されたプログラムコード変換が増進的に検証される。
本発明をよりよく理解するため、および本発明の諸実施形態をどのように実施することができるかを示すため、例として、添付の図面を次に参照する。
以下に説明する様々な新規の特徴を実施するための例示的な装置が図1に示されている。図1は、レジスタ群14を、いくつかのソフトウェアコンポーネント10、16、20、および30を格納するメモリ18とともに含むホストプロセッサ12を示し、そのようなプロセッサ18は、基本ブロックキャッシュ15用、およびグローバルレジスタストア17用の作業ストレージをさらに提供する。ソフトウェアコンポーネント群には、オペレーティングシステム16、エミュレータコード30、および翻訳された目標コード20が含まれる。エミュレータコード30は、例えば、あるISAの対象コードを別のISAの目標コードに翻訳するエミュレータとして、または対象コードを、それぞれ同一のISAの翻訳済みのコードに翻訳するためのアクセラレータとして、または他の任意の知られているタイプのエミュレータとして機能することもできる。
エミュレータ30、すなわち、エミュレータ機能を実施するソースコードのコンパイル済みのバージョン、および目標コード20、すなわち、エミュレータ30によって生成された対象コード10の翻訳は、通常はマイクロプロセッサ、または他の適切なコンピュータであるホストプロセッサ12上で実行される、例えば、UNIX(登録商標)などの、オペレーティングシステム16と連携して実行される。図1に示した構造は、単に典型的であり、例えば、本発明によるソフトウェア、方法、およびプロセスは、オペレーティングシステム内、またはオペレーティングシステムの下に存在するコードとして実施されてもよいことが理解されよう。対象コード10、エミュレータコード30、オペレーティングシステム16、およびメモリ記憶機構群は、当業者に知られている多種多様なタイプのいずれであることも可能である。
図2は、プログラムコード変換を使用する典型的なコンピューティングシステムの概要を示す。システムは、対象コンピューティング環境1および目標コンピューティング環境2を含む。対象コンピューティング環境1および目標コンピューティング環境2は、通常、2つの物理的に別個のコンピューティングプラットフォームによって提供され、このため、図2は、クロスプラットフォームシステムを示す。対象コード10の形態の対象プログラムが、対象環境1内の対象プロセッサ12上で実行可能である。既存のプログラムの手間がかかり、時間がかかる書き換えを回避するためなどの、多くの実際的な理由で、目標コンピューティング環境2内の目標プロセッサ22上で同一の対象コード10を実行することも所望される。しかし、目標プロセッサ22が、対象コード10と適合しないことがしばしば生じる。このため、プログラムコード変換を実行するようにエミュレータ30が、目標コンピューティング環境2内において提供される。このケースでは、エミュレータ30は、クロスプラットフォーム翻訳を実行して、目標プロセッサ22上においてネイティブで実行される翻訳済みの目標コード20の形態で、変換済みのプログラムを生成する。
エミュレータ30は、図2の典型的な構成を超えて、多くの異なる形態をとることができる。詳細には、エミュレータ30は、対象プログラムの実行を最適化し、最適化された変換済みのプログラムを対象プロセッサ12に戻すために、対象プロセッサ12上で実行されるように適合されることも可能である。他のケースでは、エミュレータ30は、最適化と翻訳の両方の結合を実行するように構成される。各状況において、エミュレータ30がプログラムコード変換を正しく実行することを検証することが所望される。
正しいプログラムコード変換を検証するための好ましい方法および装置を以下に詳細に説明する。ただし、本発明の背景として、図2の典型的な対象コンピューティング環境1および目標コンピューティング環境2の全体的な動作をまず、より詳細に説明する。
図2は、対象コード10の形態で対象プログラムを示す。対象プログラムは、普通、人間のプログラマが容易に理解する高水準言語(例えば、C、C++などの言語)で書かれる。次に、プログラムは、高水準言語から、コンピュータのプロセッサ、ならびにメモリ、入出力ユニットなどの関連するコンポーネントの制御により適した低水準言語(例えば、バイトコード)に変換される。最後に、プロセッサが機能するように、プログラムコードは、読み込み動作、シフト動作、追加動作、および格納動作などの、プロセッサの基本動作を指示する、機械可読のネイティブで実行可能な形態(すなわち、機械コード)で提供される。
ほとんどのケースでは、特に1つのタイプのプロセッサ向けに生成されたネイティブで実行可能なプログラムコードは、他のいずれのタイプのプロセッサ上でも実行することができない。詳細には、各プロセッサは、独自の特定のネイティブ命令セットを有し、異なるタイプのプロセッサ向けの命令セットの間には、かなりの、しばしば、根本的な相違が存在する。プロセッサがある条件コードフラグセットを使用するか否か、ならびに各条件コードフラグの特定の性質および目的などの、不適合につながる他の相違も存在する。
一般的な例として、一部のプロセッサは、RISC(縮小命令セットコンピュータ)として知られる、単純な命令シーケンスの迅速な実行向けに設計されている。他のプロセッサは、CISC(コンプレックス命令セットコンピュータ)として知られる基本命令シーケンスをそれぞれが表す命令の拡張セットを使用する。この結果、RISCプロセッサ向けのネイティブで実行可能なプログラムコードをCISCプロセッサが実行することはできず、その逆も同様である。典型的な具体例として、対象プロセッサ12は、Intel(rtm)x86系のプロセッサ群のメンバなどのCISCプロセッサであり、他方、目標プロセッサ22は、PowerPC(rtm)プロセッサ系のメンバなどのRISCプロセッサである。これら2つのプロセッサは、本来的に互換性がない。第1に、これら2つのプロセッサは、実質的に異なる命令セットを使用する。第2に、x86プロセッサは、x86系に固有であり、PowerPCアーキテクチャでは提供されない2つの条件コードフラグ(補助フラグおよびパリティフラグ)を使用する。
ほとんどのケースでは、エミュレータ30は、レジスタや条件コードフラグなどの、プロセッサの重要な諸態様を含め、対象プロセッサ12の仮想モデルを提供する。この仮想環境により、あたかも対象コード10が、対象プロセッサ12の物理的な実施例の上においてネイティブで実行されているかのように、対象プログラムが、対象プロセッサの仮想モデル上においてネイティブで実行されることが可能になる。
図3を参照すると、本発明の好ましい諸実施形態において使用されるエミュレータ30が、次のコンポーネント群を有するものとして概略で示されている。すなわち、フロントエンド31、コア32、およびバックエンド33であり、これらのコンポーネントのそれぞれが、好ましくは、エミュレータ30を表すコードのそれぞれの部分において実装される。
フロントエンド31は、エミュレートされる対象プロセッサ12に固有に構成される。フロントエンド31は、対象コード10の所定のセクションを復号化し、一般的な中間表現のブロック(「IRブロック」)をもたらす。中間表現生成の例は、「プログラムコード変換(Program Code Conversion)」という名称の国際公開第99/03168号パンフレットに記載されている。
コア32は、他にも多くの最適化技術が存在するなかで、とりわけ、「プログラムコード変換のためのブロック翻訳最適化(Block Translation Optimization for Program Code Conversion)」という名称の米国特許出願公開10/439966号明細書で開示される最適化技術などの、局所最適化技術または大域最適化技術を使用することにより、フロントエンド31によって生成された各IRブロックを最適化する。
バックエンド33は、コア32からの最適化されたIRブロックを取り込み、目標プロセッサ22によって実行可能な目標コード20を生成する。適切には、フロントエンド31は、対象コード10を基本ブロックに分割し、各基本ブロックは、固有エントリポイントにおける第1の命令と固有エグジットポイント(ジャンプ命令、呼び出し命令、または分岐命令などの)における最後の命令の間の連続した命令セットである。コア32は、一緒に単一の単位として扱われる2つ以上の基本ブロックを含むグループブロックを選択することができる。さらに、フロントエンド31は、異なるエントリ条件の下で対象コードの同一の基本ブロックを表すアイソブロックを形成することができる。
好ましいエミュレータ30は、適切には、コア32において提供される複数の抽象レジスタ群320を含み、レジスタ群320は、対象プロセッサ12内部で使用されて、対象コード10を実行する物理レジスタ群14を表す。抽象レジスタ群320は、対象プロセッサレジスタ群14に対する対象コード命令の予期される効果を表現することにより、エミュレートされている対象プロセッサ12の状態をシミュレートする。エミュレータ30は、オプションとして、対象プロセッサのレジスタ群に関連する条件コードフラグ群321の状態などの、対象プロセッサ12の他の諸態様もエミュレートする。動作の際、エミュレータ30は、対象コード10を実行する際のエミュレートされた対象プロセッサ12の予期される状態を、抽象レジスタ群320およびエミュレートされた条件コードフラグ群321を使用することなどにより、暗黙に記録する。
クロスプラットフォーム翻訳モードにおいて、エミュレータ30は、対象コード10に対してプログラムコード変換を実行し、翻訳済みの目標コード20を目標プロセッサ22に提供する。本発明の好ましい諸実施形態では、エミュレータ30は、対象プロセッサ12に適切な実行可能なバイナリコード(すなわち、機械コード)の形態の対象コード10が、目標プロセッサ22に適切な実行可能なバイナリコードの形態の目標コード20に翻訳される、バイナリ翻訳を実行する。
翻訳は、静的に実行されることも、動的に実行されることも可能である。静的翻訳では、プログラム全体が、目標プロセッサ22上で翻訳済みのプログラムを実行するのに先立って翻訳される。これには、相当な遅延が伴う。したがって、好ましいエミュレータ30は、目標プロセッサ22上で即時に実行するために、対象コード10の小さいセクションを動的に翻訳するように構成される。これは、はるかに効率的である。というのは、対象コード10の大きいセクションは、実際には使用されないか、または稀にしか使用されないからである。したがって、本発明の好ましい諸実施形態は、動的バイナリ翻訳を実行するエミュレータ30で使用されることが特に意図されている。ただし、本発明は、動的なバイナリ翻訳に限定されず、プログラムコード変換の分野において一般に適用可能である。例えば、本発明の諸実施形態は、コンパイラとしてではなく、インタプリタとして動作するエミュレータにも適用可能である。
図4は、プログラムコード変換を検証する好ましい方法の動作フローチャートであり、他方、図5は、図4の方法によるプログラムコード変換を検証するための好ましい装置の概略である。図4および図5に示した好ましい方法および装置では、第1のエミュレータ30aが、対象プロセッサ12上で対象コード10を実行するのに使用される。最初、ステップ200で、エミュレータ30aが、前述したとおり、対象コード10を目標コード20aに変換し、次にステップ202で、目標コード20aが対象プロセッサ12によって実行されて、対象コード10を実行する対象プロセッサ12のエミュレートされた状態が提供される。次にステップ204で、対象コード10が、対象プロセッサ12上においてネイティブで実行されて、対象コード10を実行する対象プロセッサ12のネイティブの状態が提供される。このため、変換済みの出力目標コード20aと元の対象コード10がともに、同一タイプのプロセッサ上で実行される。この特定のタイプのエミュレーションを「セイムツーセイム(same−to−same)」エミュレータ、または「XツーX」エミュレータと呼ぶことができる。第1のエミュレータ30aによって実行されるプログラムコード変換は、ステップ206で、第1のエミュレータ30aを介して対象コード10を実行したことの出力を、対象プロセッサ12上においてネイティブで同一の対象コード10を実行したことの結果と比較することにより、正しいと検証される。ステップ206で、対象プロセッサ12のエミュレートされた状態とネイティブの状態は、可能な場合、好ましくは、対象コードの中の各命令後、対象コード10の中の可能なすべての比較できるポイントにおいて互いに比較される。対象プロセッサ12のエミュレートされた状態とネイティブの状態が合致した場合、次にステップ208で、エミュレートされた対象コードに関するプログラムコード変換が検証される。エミュレートされた状態とネイティブの状態の間に不一致が存在する場合、次にステップ210で、プログラムコード変換誤りが識別される。この検証プロセスは、以下により詳細に説明するとおり、非常に有用なツールである。
図6を参照して、対象環境1内における本発明の好ましい実施形態の動作を以下により詳細に説明する。図6で、対象プロセッサ12上における対象コード10のネイティブの実行が、エミュレータ30aを介して同一の対象コード10の実行と比較される。この場合、任意の適切な構成を、対象コード10のネイティブの実行のために使用することができる。理想的には、対象コード10は、機械コードの形態であり、対象プロセッサ12上で直接に実行される。ただし、コンパイラまたはインタプリタなどの1つまたは複数の中間ステップも、それらが正しく機能することが信頼されるという条件付きで、使用することができる。対象コード10のこのネイティブの実行後、特に対象プロセッサ12を含む対象環境1の状態が、ネイティブの機械状態を形成する。ネイティブの機械状態は、対象プロセッサ12の状態(すなわち、レジスタ群14および条件コードフラグ群に含まれる値)、およびメモリ122の状態を含む。
エミュレータ30aは、対象プロセッサ12上における対象コード10の実行をエミュレートするように構成される。例えば、エミュレータ30は、レジスタ群14や条件コードフラグ群などの対象プロセッサ12の重要な要素に対する対象コード10の効果をエミュレートする。エミュレートされた機械状態が、特にこのエミュレートされたプロセッサモデルから導出されて、提供される。このため、ネイティブの機械状態は、エミュレータによって実行されたプログラムコード変換を検証するように、エミュレートされた機械状態と比較できる。エミュレートされた機械状態は、好ましくは、対象コード10の中の各命令の実行後、対象コード10の中の可能なすべての比較できるポイントにおいて、ネイティブの機械状態と比較される。誤った変換は、エミュレートされた機械状態とネイティブの機械状態の間の相違で容易に識別される。
対象プロセッサ12の状態に関する情報に加えて、ネイティブの機械状態は、好ましくは、対象コード10のネイティブの実行後のメモリ122の状態を表す情報も含む。同様に、エミュレートされた機械状態は、好ましくは、エミュレータ30aを介した対象コードの実行後の、メモリ122のイメージも含む。図6に示した本発明の好ましい実施形態では、プロセッサメモリ122と連携して動作する読み込み/格納バッファ121が提供される。動作の際、読み込み/格納バッファ121は、メモリ122に全く影響を与えることなしに、エミュレータ30aによって生成された目標コード20aの実行によって生じさせられる、あらゆるメモリアクセスを扱う。このようにして、読み込み/格納バッファ121は、エミュレータ30aのメモリ122へのアクセス可能性を制限する。対照的に、対象コード10が対象プロセッサ12においてネイティブで実行される場合、メモリ122への完全なアクセスが提供される。この結果、メモリ122の現実の状態を、読み込み/格納バッファ121の状態から導出された、エミュレートされたメモリイメージと比較することが可能である。代替として、対象コード10のエミュレートされた実行に、メモリ122へのアクセスが許される一方で、読み込み/格納バッファ121を使用して、ネイティブの実行中のメモリの状態が保存されてもよい。
プロセッサ状態およびメモリ状態の以上の比較は、別々に実行されても、組み合わせで実行されてもよい。好ましくは、第1の比較が、ネイティブのプロセッサ状態とエミュレートされたプロセッサ状態の間で、すなわち、プロセッサ12の現実の状態(レジスタ群14および条件コードフラグ群に含まれる値)とエミュレータ30aによって保持されるプロセッサの仮想モデル(抽象レジスタ群320および条件コードフラグ群321に含まれる値)の間で行われる。第2の比較が、ネイティブのメモリ状態とエミュレートされたメモリ状態の間で、すなわち、ネイティブの実行後に更新されたメモリ122と、エミュレータ30aを介した実行後に更新された読み込み/格納バッファ121の間で行われる。理想的には、ビット単位のXOR比較が実行されて、対象コード10のネイティブの実行と、エミュレータ30aによって実行されたプログラムコード変換の間でビット単位の適合性が実証される。ビット単位の適合性は、好ましくは、対象コード10の中のそれぞれの個別の命令のレベルにおいて実証される。この場合、コード実行によって影響を受けた機械状態の部分(例えば、選択されたレジスタ群、または選択されたメモリロケーション)だけを比較することなどの、効率的な比較スキームを特定することができる。
本発明の特定の好ましい実施形態では、対象コード10の実行と目標コード20aの実行は、対象プロセッサ12内部で単一のプロセスイメージを共有し、したがって、全く同一の対象コードを扱う。有利には、単一のプロセスイメージを共有することは、直接の比較が迅速に、効率的に行われることを可能にすることにより、検証を実行することの影響を最小限に抑える。さらに、ネイティブのプロセッサ状態とエミュレートされたプロセッサ状態の同時の実行のため、対象コード10の単一の共有されたイメージストリームだけを要し、決定論的な信号ストリームを記録し、再生することの面倒な問題が回避される。さらに、ネイティブのプロセッサ状態とエミュレートされたプロセッサ状態の同時の比較により、大きいトレースファイルの必要性が回避される。ただし、そのように緊密に結合された動作は、対象コード実行と目標コード実行の間で所望の分離を実現する際に問題をもたらすことが明らかである。前述したとおり、読み込み/格納バッファ121は、メモリ122を選択的に分離する。さらに、対象プロセッサにおいてコンテキスト切り替えが実行されて、ネイティブの実行とエミュレータの実行の間で切り替えが行われる。
図7は、対象プロセッサ12が異なるコンテキストの間で切り替えを行う際の主要な状態遷移を示して、好ましい検証方法を例示する状態図である。図7では、各コンテキストが1つの列で表され、対象プロセッサ12の制御の変化が、列の間の水平方向の移動で強調されている。この例では、対象プロセッサ12は、3つの異なるコンテキスト、すなわち、エミュレータ30aが対象プロセッサ12内部で実行されるエミュレータコンテキスト41、エミュレータ30aによって生成された目標コード20aが対象プロセッサ12内部で実行される目標実行コンテキスト42、および対象コード10が対象プロセッサ12内部においてネイティブで実行される対象ネイティブコンテキスト43を有する。ただし、その他の特定のコンテキスト構成も可能である。例えば、インタプリタとして動作するエミュレータ30aが、変換コンテキスト41と目標実行コンテキスト42を結合して単一のコンテキストにする。
プログラムコード変換検証の好ましい実施形態は、対象コード10の大きいセグメントを多数のより小さいブロックに分割し、各ブロック境界において検証比較を実行する。この例では、現行のブロックBBnと直前の先行するブロックBBn−1が考慮され、各ブロックは、対象コード10からの1つまたは複数の命令を含む。各ブロックは、好ましくは、初期検証段階において単一の命令を含み、以下により詳細に説明するとおり、より複雑なモードのプログラムコード変換検証を実現するため、複数の命令を含むブロックの分析がその後に実行される。
ステップ401で、対象プロセッサ12の制御は、エミュレータコンテキスト41におけるエミュレータ30aにある。エミュレータ30aは、対象コード10を検査し、現行のブロックBBnを定義する。エミュレータ30aは、次に、現行のブロックBBnに対してプログラムコード変換を実行して、目標コード20aの対応するブロックを生成する。ステップ402で、対象コードの直前の先行するブロックBBn−1にリターンジャンプがパッチされる。コンテキスト切り替えルーチンを実行することにより、コンテキスト切り替えが実行されて、対象ネイティブコンテキスト43になる。ステップ403で、対象コードの先行するブロックBBn−1が、対象プロセッサ12によってネイティブで実行され、ネイティブ実行ハーネスとしてエミュレータ30aによってパッチされたリターンジャンプで終了する。リターンジャンプは、コンテキスト切り替えルーチンを呼び出し、このルーチンにより、変換コンテキスト41に戻るように切り替えられる。ステップ404で、前述したとおり、ネイティブの機械状態とエミュレートされた機械状態が比較される。この時点で、エミュレータ30aによって保持される対象プロセッサの仮想モデルは、現実のプロセッサ12と同一でなければならず、両方とも、先行するブロックBBn−1の終りにある。比較が誤りを示さないものと想定すると、別のコンテキスト切り替えが実行され、今回は、目標実行コンテキスト42に切り替わる。ステップ405で、対象コードの現行のブロックBBnに対応する目標コード20aが、エミュレータによって保持される対象プロセッサの仮想モデルにおいて実行され、仮想モデルと読み込み/格納バッファは、現行のブロックBBnの終りを表す機械状態に置かれる。次に、目標コード20a実行が、エミュレータコンテキスト41に戻る別のコンテキスト切り替えで終了する。ステップ406で、対象コードのパッチされた前のブロックBBn−1が、最初の状態に復元されて、検証プロセスの侵入的な効果が最小限に抑えられる。次に、方法は、次のブロックBBn+1を扱うことを始めるために、ステップ401に戻る。
各ブロックBBnは、そのブロックBBnのネイティブの実行(ステップ403における)に先立って、エミュレータ30aを介して(ステップ405で目標コードとして)まず実行されることが理解されよう。本発明の図示した好ましいインプリメンテーションでは、対象プロセッサ上における直前の先行するブロックBBn−1のネイティブの実行の前に、エミュレータ30aにおける現行のブロックBBnを定義することが好都合である。この場合、対象プロセッサの仮想モデルは、最初、ホストプロセッサの物理レジスタ群(このケースでは、対象プロセッサ12の現実のレジスタ群14)、および物理メモリロケーション(キャッシュメモリロケーションおよびバッファメモリロケーションを含む)などの、分散されたソースを参照して獲得される。このため、検証比較を実行するのに先立って、メモリの所定の領域に順序正しい形でレジスタ内容を書き込むことなどにより、仮想モデルを強化することが好ましい。好ましいインプリメンテーションでは、そのような強化された仮想モデルは、各ブロックの終りにおいてではなく、先頭において、より容易に利用可能である。
本発明の別の好ましい実施形態では、図5に示すとおり、目標コンピューティング環境2内において第2のエミュレータ30bが提供される。対象コード10は、第2のエミュレータ30bによって、目標プロセッサ22上で実行される目標コード20bに変換される。つまり、第1のタイプのプロセッサ向けの対象プログラムが変換されて(例えば、最適化を伴って、または伴わずに翻訳または解釈されて)、異なるタイプのプロセッサ向けの変換済みのプログラムが生成される。この場合、エミュレータは、「ディスツーダット(this−to−that)」エミュレータ、または「XツーY」エミュレータと呼ばれる。第2のエミュレータ30bによって実行されたプログラムコード変換は、第1のエミュレータ30aとの比較によって検証される。このため、信頼の連鎖が、増進的に確立される。信頼は、最初、第1のエミュレータ30aにおいて得られ、第2に、第2のエミュレータ30bにおいて得られる。この形態の増進的検証により、検証が、費用およびオーバーヘッドを最小限に抑えながら、単純に正確な形で実行されることが可能になる。異なるタイプのプロセッサ向けに設計された第1のエミュレータ30bの既に検証されたプログラムコード変換を使用して、第2のエミュレータ30bのプログラムコード変換を検証するこのタイプの構成を、以降、クロスプラットフォーム構成と呼ぶ。
次に図8を参照して、クロスプラットフォーム構成における本発明の好ましい実施形態の動作フローチャートを以下により詳細に説明し、他方、図9は、図8の方法に従ってプログラムコード変換を検証するための好ましい装置の概略である。図8および図9に示す好ましい方法および装置において示すとおり、第1のエミュレータ30aは、対象環境1内で提供され、対象コード10に対してプログラムコード変換を実行する。図4および図5を参照して前述したとおり、対象環境1内においてネイティブで対象コード10を実行したことの結果が、第1のエミュレータ30aを使用したことの結果と比較されて、第1のエミュレータ30aが正しく動作していることが確認される。次に、第1のエミュレータ30aを使用して、目標環境2内で実行されている第2のエミュレータ30bによって実行されたプログラムコード変換が検証される。第1のエミュレータ30aは、正しく動作していることが既に検証されており、このため、第1のエミュレータ30aを本明細書では、以降、「基準システム」と呼ぶ。それに対して、第2のエミュレータ30bが正しく動作しているかどうかは未判定であり、したがって、第2のエミュレータ30bを本明細書では、以降、「試験システム」と呼ぶことができる。
動作の際、第2のエミュレータ30bは、ステップ502で目標プロセッサ22上においてネイティブで実行される第2の目標コード20bを、ステップ500で生成する。これを行う際、第2のエミュレータ30bは、エミュレートされた対象プロセッサ12に対する対象コード10の効果をエミュレートする。同時に、第1のエミュレータ30aが、図4のステップ202で既に生成済みのエミュレートされた対象プロセッサ12に対する対象コード10の効果を再びエミュレートする。このため、第1のエミュレータ30aによって保持される第1のエミュレートされた状態で表される結果が、ステップ504で獲得される(「基準システム状態」)。基準システム状態は、ステップ506で、第2のエミュレータ30bによって保持される第2のエミュレートされた機械状態で表される結果(「試験システム状態」)と比較できる。ステップ506で、対象プロセッサ12の基準システムエミュレート状態と試験システムエミュレート状態が、可能な場合、対象コード10の中の各命令後の、対象コード10の中の可能なすべての比較できるポイントにおいて互いに比較される。基準システムエミュレート状態と試験システムエミュレート状態が合致した場合、第2のエミュレータ30bに関するプログラムコード変換が、ステップ508で検証される。基準システムエミュレート状態と試験システムエミュレート状態の間に不一致が存在する場合は、ステップ510で、第2のエミュレータ30bに関するプログラムコード変換誤りが識別される。第1のエミュレータ30aは、正しく機能することが既に信頼されているので、この時点で、第2のエミュレータ30bが、正しく機能することが検証され、信頼される。
本発明の様々な実施形態では、次第に複雑になる動作モードを使用して検証が実行される。第1の最も単純な動作モードでは、対象コード10の大きいセグメントがブロックに分割され、各ブロックは、単一の命令を含む。対象コードのそれぞれの単一の命令が、対象プロセッサ12でネイティブで実行され、第1のエミュレータ30aと比較される。第1のエミュレータ30aの正しい動作が、命令ごとに検証される。対象コード12の中の命令のすべてが実行されて、信頼できるプログラムコード変換が確立されると、各ブロックのサイズが、いくつかの命令の基本ブロックを含むように大きくされた第2のより複雑なモードが行われる。命令の基本ブロックが前述したとおり検証された後、プログラムコード変換の信頼性がさらなるレベルで検証される。次に、各ブロックが、単一の単位として一緒に扱われる、または異なる条件下の同一の基本ブロックを表す、グループの基本ブロック(すなわち、グループブロックまたはアイソブロック)を含む第3のモードが行われる。プログラムコード変換検証方法は、グループの基本ブロックに対して繰り返される。最後に、対象コードの累進的に大きくなるセグメントが提供され、それぞれの累進的に複雑になる検証モードが、完全に信頼できるプログラムコード変換が確立されるまで、さらなるレベルの信頼性を追加する。
同一の累進的にますます複雑になる動作モードが、目標環境2内のエミュレータ30bを検証する際に適用され、単一の命令からグループのブロックまでの累進的に複雑になる動作モードが可能になる。
一実施形態では、第1のエミュレータ30aおよび第2のエミュレータ30bの検証は、異なる時点において順次に実行されるが、これにより、一方の環境内で記録され、他方の環境内で再生される大量のデータが生成される。このため、最も好ましくは、第1のエミュレータ30aおよび第2のエミュレータ30bの検証は、実質的に同時に実行され、これにより、負担になる再生機構の必要性が回避される。対象コード10のブロックが、対象プロセッサ12、第1のエミュレータ30a、および第2のエミュレータ30bのそれぞれに供給されて、それぞれの機械状態、基準システム状態、および試験システム状態が生成され、検証比較が実行されるようにする。それらの比較が成功であったものと想定すると、第1のエミュレータ30aと第2のエミュレータ30bの両方において信頼できるプログラムコード変換が検証されるまで、次のブロックが順に供給される。
図10は、対象環境1内の動作を目標環境2内の動作と同期させるための好ましい機構を示す。図11は、対象環境1内の動作を目標環境2内の動作と同期させる際に実行される方法の動作フローチャートをさらに示す。図10に示すとおり、対象環境1から目標環境2までの、詳細には、第1のエミュレータ30aから第2のエミュレータ30bまでの通信パスが提供される。この通信パスは、好ましくは、ネットワーク待ち時間を最小限に抑え、検証の速度を向上させるために、単一方向通信である。ただし、第2のエミュレータ30bは、代替の諸実施形態において、第1のエミュレータ30aと直接、または間接に、双方向で通信するように構成することもできるものと理解される。
第1に、2つのエミュレータ30a、30bが、第1のエミュレータ30aから第2のエミュレータ30bに初期状態情報を送ることにより、エミュレートされたレジスタ群およびメモリの値を含め、エミュレートされた対象機械状態を同期させる。
第2に、対象環境からの非決定論的な値を目標環境に送ることにより、同期が保持される。例えば、システムコール「get_time_of_day」から獲得された戻り値が、対象環境1内で記録され、目標環境2に送られる。このため、目標環境2は、対象環境1をミラーリングするようにさせられる。対象コード10は、複数のブロックに分割される。対象コードの各ブロックBB(例えば、1つの命令、命令のブロック、グループブロックなど)に関して、対象環境1は、ステップ600で、第1のエミュレータ30a(基準システムとも呼ばれる)を介してそのコードブロックBBを実行し、これにより、ステップ602で目標環境2(試験システムとも呼ばれる)に送られる、対象機械状態データ[s]rおよび非決定論的な値[d]rがもたらされる。対象機械状態データ[s]rおよび非決定論的な値[d]rを試験システムに直接に送ることが可能であり、あるいは、そのような情報をネットワークバッファの中に格納して、試験システムが、必要に応じてその情報を取り出すことができるようにすることができる。試験システムが、ステップ604で、基準システムから対象機械状態データ[s]rおよび非決定論的な値[d]rを受け取ると、第2のエミュレータ30bは、ステップ606で、非決定論的な値[d]rを適宜、代入して、試験システム上で対象コード10の同一のブロックBBを実行する。対象コードのそのブロックの実行に続き、ステップ608で、第1のエミュレータ30aからの受け取られた対象機械状態データ[s]rが、第2のエミュレータ30bにおける対応する対象機械状態データ[s]tと比較される。基準システムに関する状態データと試験システムに関する状態データが一致した場合、ステップ610で、対象コード10のブロックBBに関するプログラムコード変換が正しいことが検証される。相違が検出された場合、そのことが、ステップ612で誤りとして報告される。検出されなかった場合、プロセスは、対象コードの次のブロックに関して繰り返される。
基準システムと試験システムは、好ましくは、制御の下で同期に実行される。この緊密に制御された実行により、非決定論的な状態の相違が回避され、命令レベルから基本ブロック境界を経てグループブロック境界まで、任意のポイントで基準システム状態と試験システム状態の比較が可能になる。
本明細書で説明する方法は、コンピュータ可読記憶媒体上にコンピュータプログラムとして記録されるのに適している。本発明は、本明細書で説明した方法を実行するのに適したエミュレータ装置、および本明細書で説明する方法を実行するようにプログラミングされている場合のコンピュータプラットフォームにも及ぶ。本発明のプログラムコード変換検証の方法および装置は、本明細書で定義した方法のいずれかを実行するように構成されたエミュレーションシステム、コンピューティングシステム、またはコンピューティングプラットフォームにも及ぶ。本発明は、例えば、ネットワーク化されたコンピューティングシステム、サーバコンピュータ、デスクトップコンピュータ、またはポータブルコンピューティングデバイスを含め、任意の適切な形態で実施することができる。本発明は、本明細書で定義した方法のいずれかを実行するためのプログラムコード命令を含むコンピュータ可読記録媒体にも及ぶ。
本発明は、以上の説明から明白となり、本発明の実施を介して当業者に明白となる多くの利点を有する。詳細には、プログラムコード変換が、迅速、効率的、正確、かつ費用対効果の大きい形で検証される。本発明の好ましい実施形態は、互換性のない対象環境と目標環境にわたる検証が、安価に、最小限のオーバーヘッドで実行されることを可能にする。まず対象コンピューティング環境内で、次に目標コンピューティング環境における増進的検証により、各環境内における影響が最小限に抑えられる。増進的検証を介し、次第に複雑になる検証モードの使用により、エミュレータを迅速に、信頼できる形で検証することができる。好ましいエミュレータは、エミュレータのフロントエンドまたはバックエンドを相応する形に適合させることにより、異なるタイプのプロセッサで使用されるように容易に適合される。検証は、単純で、信頼できる形で実行され、したがって、開発の早い段階で適用して、誤りが、迅速で、安価に検出され、解決されることを可能にすることができる。好ましい検証は、対象コードのそれぞれの個別の命令のレベルにおけるビット単位の適合性の実証を可能にする。
いくつかの好ましい実施形態を図示し、説明してきたが、添付の特許請求の範囲において定義する本発明の範囲を逸脱することなく、様々な変更および改変を行うことが可能であることが、当業者には理解されよう。
本出願に関連して本明細書と同時に、または本明細書に先立って提出され、本明細書とともに公共の閲覧が自由であるすべての書類および文書に注意を向けられたい。すべてのそのような書類および文書の内容は、参照により本明細書に組み込まれている。
本明細書(添付の特許請求の範囲、要約書、および図面を含む)で開示した特徴のすべて、および/またはそのように開示した方法またはプロセスのステップのすべては、そのような特徴および/またはステップの少なくとも一部が相互排他的である場合の組み合わせを除き、あらゆる組み合わせで組み合わせることができる。本明細書(添付の特許請求の範囲、要約書、および図面を含む)で開示した各特徴は、別段、明記しない限り、同一の目的、均等の目的、または類似の目的を果たす代替の特徴で置き換えることができる。このため、別段、明記しない限り、開示した各特徴は、一般的な一連の均等の特徴、または類似の特徴の一例に過ぎない。本発明は、以上の実施形態の詳細に限定されない。本発明は、本明細書(添付の特許請求の範囲、要約書、および図面を含む)で開示した特徴の任意の新規な1つ、または任意の新規な組み合わせ、あるいはそのように開示した任意の方法またはプロセスのステップの任意の新規な1つ、または任意の新規な組み合わせにも及ぶ。
本発明によるエミュレーションを実行するための例示的なコンピューティング環境の概略図である。 プログラムコード変換に関わる典型的なコンピューティングシステムの概略図である。 好ましいエミュレータの概略図である。 好ましい実施形態による、対象プロセッサ上で実行されたプログラムコード変換の検証の動作フローチャートである。 本発明の好ましい実施形態に従って使用される第1のエミュレータおよび第2のエミュレータの概略図である。 本発明の好ましい実施形態に従って使用される第1のエミュレータを示すより詳細な概略図である。 本発明の好ましい実施形態による検証方法を示す概略の状態図である。 好ましい実施形態に従って実行されるプログラムコード変換の増進的検証の動作フローチャートである。 本発明の好ましい実施形態に従って使用される第1のエミュレータおよび第2のエミュレータを示す概略図である。 本発明の好ましい実施形態によるプログラムコード変換の検証中における第1のエミュレータと第2のエミュレータの同期を示す概略図である。 本発明の好ましい実施形態によるプログラムコード変換の検証中における第1のエミュレータと第2のエミュレータの同期を示す動作フローチャートである。
符号の説明
10 対象コード
12 プロセッサ
15 基本ブロックキャッシュ
16 オペレーティングシステム
17 グローバルレジスタストア
20 目標コード
22 目標プロセッサ
30 エミュレータ(コード)
31 フロントエンド
32 コア
33 バックエンド
121 読み込み/格納バッファ
122 メモリ

Claims (35)

  1. エミュレータ(30a)によって実行されたプログラムコード変換を検証する方法であって、
    a)対象プロセッサ(12)上のエミュレータ(30a)を介して対象コード(10)を実行することを、前記対象コード(10)の中の比較できるポイントまで行うステップと、
    b)前記対象プロセッサ(12)上においてネイティブで前記対象コード(10)を実行することを、前記対象コード(10)の中の同一の比較できるポイントまで行うステップと、
    c)前記対象プロセッサ(12)上におけるネイティブでの対象コード(10)の実行を、前記エミュレータ(30a)を介した前記対象プロセッサ(12)上における前記対象コード(10)の実行と、前記対象コード(10)の中の前記比較できるポイントにおいて比較するステップとを特徴とする方法。
  2. 前記ステップ(a)は、前記対象プロセッサ(12)上において前記対象コード(10)を実行することを、前記エミュレータ(30a)を介した前記対象コード(10)の中の前記比較できるポイントまで行い、エミュレートされた機械状態を提供することを含み、前記ステップ(b)は、前記対象プロセッサ(12)上においてネイティブで前記対象コード(10)を実行することを、前記対象コード(10)の中の同一の比較できるポイントまで行い、ネイティブの機械状態を提供することを含み、前記ステップ(c)は、前記対象コード(10)の中のすべての比較できるポイントにおいて、前記エミュレートされた機械状態を前記ネイティブの機械状態と比較することを含む請求項1に記載の方法。
  3. 前記ステップ(b)を実行するのに先立って前記ステップ(a)を実行することを含む請求項2に記載の方法。
  4. 前記ステップ(a)は、前記対象プロセッサ(12)のエミュレートされたイメージ、および/または前記対象プロセッサ(12)に関連するメモリ(18)のエミュレートされたイメージを提供することを含み、前記ステップ(b)は、前記プログラムコードの前記ネイティブの実行後における前記対象プロセッサ(12)のネイティブのイメージ、および/または前記プログラムコードの前記ネイティブの実行後における、前記対象プロセッサ(12)に関連する前記メモリ(18)のネイティブのイメージを提供することを含み、前記ステップ(c)は、前記対象プロセッサ(12)の前記エミュレートされたイメージを前記対象プロセッサ(12)の前記ネイティブのイメージと比較すること、および/または前記メモリ(18)の前記エミュレートされたイメージを前記メモリ(18)の前記ネイティブのイメージと比較することを含む請求項2または3に記載の方法。
  5. 前記ステップ(a)は、前記メモリ(18)に関する読み込み/格納バッファ(121)内で前記メモリ(18)の前記エミュレートされたイメージを提供して、前記メモリ(18)が、前記エミュレータ(30a)を介して前記対象コード(10)を実行することによって影響を受けないようにすることを含む請求項4に記載の方法。
  6. 前記対象プロセッサ(12)の前記エミュレートされたイメージは、1つまたは複数のレジスタ(14)のイメージを含む請求項4または5に記載の方法。
  7. 前記対象プロセッサ(12)の前記エミュレートされたイメージは、1つまたは複数の条件コードフラグのイメージを含む請求項4、5、または6に記載の方法。
  8. 前記対象コード(10)をネイティブで実行すること、および前記エミュレータ(30a)を介して実行することの両方を前記対象プロセッサ(12)の単一のプロセスイメージ内で行うことを含む請求項1から7のいずれかに記載の方法。
  9. 前記単一のプロセスイメージ内のコンテキストである、少なくとも、前記エミュレータ(30a)を介した前記対象コード(10)の実行のためのエミュレーションコンテキストと、前記対象プロセッサ(12)上におけるネイティブでの前記対象コード(10)の実行のためのネイティブコンテキストの間でコンテキスト切り替えを実行するステップを含む請求項8に記載の方法。
  10. 前記対象プロセッサ(12)上で前記エミュレータ(30a)を実行するためのエミュレーションコンテキストと、前記対象プロセッサ(12)上で前記エミュレータ(30a)によって生成された目標コード(20)を実行するための目標実行コンテキストと、前記対象コード(10)が前記対象プロセッサ(12)内部においてネイティブで実行される対象ネイティブコンテキストとの間で選択的に切り替えを行うことを含む請求項8または9に記載の方法。
  11. 前記ネイティブコンテキストと前記エミュレーションコンテキストはともに、前記対象コード(10)の単一のイメージを使用する請求項9または10に記載の方法。
  12. 前記対象コード(10)の中の前記比較できるポイントの1つをそれぞれが含む複数のブロックに前記対象コード(10)を分割すること、
    前記ブロックの1つを実行すること、および
    前記1つのブロックの実行からもたらされた機械状態を比較することを含む請求項1から11のいずれかに記載の方法。
  13. 2つ以上の検証モードの間で選択を行い、前記選択された検証モードに応じた前記複数のブロックに前記対象コード(10)を分割することを含む請求項12に記載の方法。
  14. 前記対象コード(10)を複数のブロックに分割し、前記複数のブロックのそれぞれに関して前記実行するステップおよび前記比較するステップを繰り返すことを含む請求項12または13に記載の方法。
  15. 各ブロックは、
    (a)対象コード(10)の単一の命令と、
    (b)固有エントリ命令から固有エグジット命令までの命令シーケンスを含む基本ブロックと、
    (c)複数の前記基本ブロックを含むグループブロックのいずれか1つを含む請求項12、13、または14に記載の方法。
  16. 前記対象コード(10)の大きいセグメントを、対象コード(10)の前記大きいセグメントからの1つまたは複数の命令をそれぞれが含む複数のより小さいブロックに分割するステップと、
    前記複数のブロックのなかの連続した近隣ブロックの各ペア間のブロック境界において検証比較を実行するステップとを含むいずれかの前記請求項に記載の方法。
  17. 前記プロセッサの制御が前記エミュレータ(30a)にあるエミュレーションコンテキストにおいて前記対象プロセッサ(12)を提供し、現行のブロックBBnに対してプログラムコード変換を実行して、変換済みの目標コード(20)の対応するブロックを生成し、対象コード(10)の直前の先行するブロックBBn−1にリターンジャンプをパッチするステップと、
    コンテキスト切り替えルーチンを実行して対象ネイティブコンテキストに入り、対象コード(10)の前記直前の先行するブロックBBn−1を前記対象プロセッサ(12)によって実行して、前記実行するステップが前記リターンジャンプで終了するようにするステップと、
    コンテキスト切り替えルーチンを実行して前記エミュレーションコンテキストに戻り、前記直前の先行するブロックBBn−1の実行後における前記対象プロセッサ(12)を表すネイティブの機械状態を、前記直前の先行するブロックBBn−1の実行後における、前記エミュレータ(30a)によって保持される前記対象プロセッサ(12)の仮想モデルを表すエミュレートされた機械状態と比較することにより、前記検証比較を実行するステップと、
    目標実行コンテキストへのコンテキスト切り替えを実行し、前記エミュレータ(30a)によって保持される前記対象プロセッサ(12)の前記仮想モデル内で、対象コード(10)の前記現行のブロックBBnに対応する前記目標コード(20)の実行をモデル化して、前記現行のブロックBBnの終りを表す機械状態に前記仮想モデルを置くステップと、
    前記検証比較が前記プログラムコード変換における誤りを明らかにしない限り、前記複数のブロックのなかのそれぞれの後続ブロックに関して以上のステップを繰り返すステップとを含む請求項16に記載の方法。
  18. 前記直前の先行するブロックBBn−1を復元して前記リターンジャンプを削除することをさらに含む請求項17に記載の方法。
  19. 前記対象コード(10)のブロックを選択するステップと、
    前記エミュレータ(30a)を介して前記対象プロセッサ(12)上で対象コード(10)の前記ブロックを実行するステップと、
    対象コード(10)の前記ブロックにリターンジャンプを付加し、対象コード(10)の前記ブロックを前記対象プロセッサ(12)上においてネイティブで実行して、前記リターンジャンプで終了させ、前記リターンジャンプが前記プロセッサの制御を前記エミュレータ(30a)に戻すようにするステップとをさらに含むいずれかの前記請求項に記載の方法。
  20. プログラムコード変換を検証する方法であって、
    対象プロセッサ(12)上で実行されるエミュレータ(30a)を介して対象コード(10)の目標コード(20)へのプログラムコード変換を実行し、前記目標コード(20)を実行して、前記対象プロセッサ(12)に関連する読み込み/格納バッファ(121)の中に格納されるエミュレートされた機械状態を提供するステップと、
    前記対象プロセッサ(12)上で直接に前記対象コード(10)を実行して、前記対象プロセッサ(12)に関連するメモリ(18)の中に格納されるネイティブの機械状態を提供するステップと、
    前記読み込み/格納バッファ(121)の中に含まれる前記エミュレートされた機械状態を前記メモリ(18)の中に含まれる前記ネイティブの機械状態と比較して、前記プログラムコード変換を検証するステップとを含む方法。
  21. 前記メモリ(18)に対する前記対象プロセッサ(12)からの読み込み要求および格納要求を読み込み/格納バッファ(121)の中に入れることにより、前記対象プロセッサ(12)に関連する前記メモリ(18)に対する前記エミュレータ(30a)によるアクセスを選択的に阻止することをさらに含む請求項20に記載の方法。
  22. 前記目標コード(20)を実行する場合に、前記メモリ(18)へのアクセスを選択的に阻止して、前記読み込み/格納バッファ(121)内でエミュレートされたメモリ(18)イメージが提供されるようにすることを含む請求項21に記載の方法。
  23. 前記対象プロセッサ(12)上で実行される前記エミュレータ(30a)によって実行された前記プログラムコード変換が検証された後、前記対象プロセッサ(12)上で実行される前記エミュレータ(30a)を介した前記対象コード(10)の実行を、目標プロセッサ(22)上で実行される第2のエミュレータ(30b)を介した前記対象コード(10)の実行と比較するステップをさらに含むいずれかの前記請求項に記載の方法。
  24. 前記対象プロセッサ(12)として第1のホストプロセッサを提供すること、および前記目標プロセッサ(22)として第2のホストプロセッサを提供することを含む請求項23に記載の方法。
  25. 前記対象コード(10)は、前記対象プロセッサ(12)上においてネイティブで実行可能であるが、前記目標プロセッサ(22)上においてはネイティブで実行可能でない請求項23または24に記載の方法。
  26. プログラムコード変換を検証する方法であって、
    対象プロセッサ(12)上におけるネイティブでの対象コード(10)の実行を、第1のエミュレータ(30a)を介した前記対象プロセッサ(12)上における前記対象コード(10)の実行に対してまず比較し、前記第1のエミュレータ(30a)によって実行されたプログラムコード変換を検証するステップと、
    前記第1のエミュレータ(30a)によって実行されたプログラムコード変換が検証された後、前記対象プロセッサ(12)上で実行される前記第1のエミュレータ(30a)を介した対象コード(10)の実行を、目標プロセッサ(22)上で実行される第2のエミュレータ(30b)を介した前記対象コード(10)の実行と次に比較して、前記第1のエミュレータ(30a)によって実行された前記検証済みのプログラムコード変換を使用して、前記第2のエミュレータ(30b)によって実行されたプログラムコード変換を検証するステップとを含む方法。
  27. 前記第1のエミュレータ(30a)において前記対象プロセッサ(12)の第1の仮想モデルを提供すること、および前記第1の仮想モデルを前記対象プロセッサ(12)と比較することを含む、前記対象コード(10)の第1のプログラムコード変換を実行するステップと、
    前記第2のエミュレータ(30b)において前記対象プロセッサ(12)の第2の仮想モデルを提供すること、および前記第1のエミュレータ(30a)における前記第1の仮想モデルを、前記第2のエミュレータ(30b)における前記第2の仮想モデルと比較することを含む、前記対象コード(10)の第2のプログラムコード変換を実行するステップとを含む請求項26に記載の方法。
  28. 前記第1のエミュレータ(30a)から前記第2のエミュレータ(30b)への単一方向通信を提供することを含む請求項27に記載の方法。
  29. 前記第1のエミュレータ(30a)から前記第2のエミュレータ(30b)に初期状態情報を送ることにより、前記第1の仮想モデルと前記第2の仮想モデルを同期させるステップと、
    前記対象コード(10)を複数のブロックに分割するステップと、
    対象コード(10)の各ブロックに関して、前記第1のエミュレータ(30a)を介して対象コード(10)の前記ブロックを実行し、対象機械状態データのセット、および非決定論的な値を前記第2のエミュレータ(30b)に提供するステップと、
    前記非決定論的な値を代入し、目標機械状態データのセットを与えて前記第2のエミュレータ(30b)において対象コード(10)の前記ブロックを実行するステップと、
    前記対象機械状態データを前記目標機械状態データと比較して、相違が検出された場合、誤りを報告し、相違が検出されなかった場合、対象コード(10)の次のブロックに関して前記プロセスを繰り返すステップとを含む請求項27または28に記載の方法。
  30. プログラムコード変換を検証する方法であって、
    (a)少なくとも1つの命令をそれぞれが含む複数のブロックに対象コード(10)を分割するステップと、
    (b)第1のエミュレータ(30a)を介して対象プロセッサ(12)上で対象コード(10)の前記1つのブロックを実行するステップと、
    (c)対象プロセッサ(12)上におけるネイティブでの対象コード(10)の前記1つのブロックの実行を、前記第1のエミュレータ(30a)を介した前記対象プロセッサ(12)上における前記対象コード(10)の前記1つのブロックの前記実行と比較して、前記第1のエミュレータ(30a)によって実行された対象コード(10)の前記ブロックのプログラムコード変換を検証するステップと、
    (d)目標プロセッサ(22)上で実行される第2のエミュレータ(30b)を介した対象コード(10)の同一の1つのブロックの実行を、前記対象プロセッサ(12)上で実行される前記第1のエミュレータ(30a)を介した対象コード(10)の前記1つのブロックの前記既に検証済みの実行と比較して、前記第2のエミュレータ(30b)によって実行された対象コード(10)の前記1つのブロックのプログラムコード変換を検証するステップと、
    (e)前記第2のエミュレータ(30b)によって実行されたプログラムコード変換が、前記対象コード(10)のすべてのブロックに関して検証されるまで、前記対象コード(10)のすべてのブロックに関してステップ(b)〜(d)を繰り返すステップとを含む方法。
  31. 前記対象コード(10)は、対象コード(10)の各ブロックが単一の命令を含むように最初に分割される請求項30に記載の方法。
  32. 前記第2のエミュレータ(30b)によって実行されたプログラムコード変換が、単一の命令を含む対象コード(10)のすべてのブロックに関して検証された後、それぞれが固有エントリ命令から固有エグジット命令までの命令シーケンスを含む基本ブロックである複数の新たなブロックに前記対象コード(10)を再分割することにより、ステップ(a)を繰り返すこと、および
    各基本ブロックに関してステップ(b)〜(e)を繰り返して、対象コード(10)のすべての基本ブロックに関して、前記第2のエミュレータ(30b)によって実行されたプログラムコード変換を検証することをさらに含む請求項31に記載の方法。
  33. 前記第2のエミュレータ(30b)によって実行されたプログラムコード変換が、対象コード(10)のすべての基本ブロックに関して検証された後、複数の基本ブロックをそれぞれが含む複数のグループブロックに前記対象コード(10)を再分割することにより、ステップ(a)を繰り返すこと、および
    各グループブロックに関してステップ(b)から(e)までを繰り返して、対象コード(10)のすべてのグループブロックに関して、前記第2のエミュレータ(30b)によって実行されたプログラムコード変換を検証することをさらに含む請求項32に記載の方法。
  34. 請求項1から33のいずれかに記載の方法を実行するためにコンピュータによって実行可能なコンピュータ可読コードの形態で存在するエミュレータソフトウェアを有するコンピュータ可読記憶媒体。
  35. プロセッサ(12、22)と、
    請求項1から33のいずれかに記載の方法を実行するためのエミュレータコード(30)とを組み合わせで含むエミュレータ装置。
JP2004549323A 2002-11-04 2003-11-04 プログラムコード変換の検証を実行するための方法および装置 Expired - Fee Related JP4766540B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GBGB0225649.3A GB0225649D0 (en) 2002-11-04 2002-11-04 Incremental validation
GB0225649.3 2002-11-04
PCT/GB2003/004727 WO2004042564A2 (en) 2002-11-04 2003-11-04 Method and apparatus for performing validation of program code conversion

Publications (2)

Publication Number Publication Date
JP2006505844A true JP2006505844A (ja) 2006-02-16
JP4766540B2 JP4766540B2 (ja) 2011-09-07

Family

ID=9947144

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004549323A Expired - Fee Related JP4766540B2 (ja) 2002-11-04 2003-11-04 プログラムコード変換の検証を実行するための方法および装置

Country Status (9)

Country Link
US (1) US7793270B2 (ja)
EP (1) EP1559012B1 (ja)
JP (1) JP4766540B2 (ja)
AT (1) ATE361497T1 (ja)
AU (1) AU2003301782A1 (ja)
DE (1) DE60313652T2 (ja)
GB (2) GB0225649D0 (ja)
TW (1) TW200417925A (ja)
WO (1) WO2004042564A2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007282004A (ja) * 2006-04-10 2007-10-25 Nippon Telegr & Teleph Corp <Ntt> 音声モニタリング録音システムおよびその方法
JP2010530996A (ja) * 2007-03-30 2010-09-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム・コードを変換するためのコンピュータ・システム、方法、及びコンピュータ可読記録媒体
JP2011508921A (ja) * 2007-12-29 2011-03-17 中国科学院▲計▼算技▲術▼研究所 Riscプロセッサ及びレジスタのフラグビットの処理方法

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7149929B2 (en) * 2003-08-25 2006-12-12 Hewlett-Packard Development Company, L.P. Method of and apparatus for cross-platform core dumping during dynamic binary translation
US20050216829A1 (en) * 2004-03-25 2005-09-29 Boris Kalinichenko Wireless content validation
US8694802B2 (en) 2004-04-30 2014-04-08 Apple Inc. System and method for creating tamper-resistant code
US7278122B2 (en) * 2004-06-24 2007-10-02 Ftl Systems, Inc. Hardware/software design tool and language specification mechanism enabling efficient technology retargeting and optimization
US7877703B1 (en) * 2005-03-14 2011-01-25 Seven Networks, Inc. Intelligent rendering of information in a limited display environment
US7770050B2 (en) * 2006-05-03 2010-08-03 Sony Computer Entertainment Inc. Method and apparatus for resolving clock management issues in emulation involving both interpreted and translated code
US7792666B2 (en) * 2006-05-03 2010-09-07 Sony Computer Entertainment Inc. Translation block invalidation prehints in emulation of a target system on a host system
US7813909B2 (en) * 2006-05-03 2010-10-12 Sony Computer Entertainment Inc. Register mapping in emulation of a target system on a host system
US7802232B2 (en) * 2006-03-31 2010-09-21 Microsoft Corporation Software robustness through search for robust runtime implementations
US20070234296A1 (en) * 2006-03-31 2007-10-04 Microsoft Corporation Software variation for robustness through randomized execution contexts
US7568189B2 (en) * 2006-05-03 2009-07-28 Sony Computer Entertainment Inc. Code translation and pipeline optimization
US20070294675A1 (en) * 2006-06-20 2007-12-20 Transitive Limited Method and apparatus for handling exceptions during binding to native code
US8352713B2 (en) * 2006-08-09 2013-01-08 Qualcomm Incorporated Debug circuit comparing processor instruction set operating mode
US7908596B2 (en) * 2007-01-05 2011-03-15 International Business Machines Corporation Automatic inspection of compiled code
US8060356B2 (en) 2007-12-19 2011-11-15 Sony Computer Entertainment Inc. Processor emulation using fragment level translation
JP2010003008A (ja) * 2008-06-18 2010-01-07 Fujitsu Ltd 検出プログラム、検出装置および検出方法
US20110145643A1 (en) * 2009-12-10 2011-06-16 Microsoft Corporation Reproducible test framework for randomized stress test
US8549468B2 (en) * 2010-02-08 2013-10-01 National Tsing Hua University Method, system and computer readable storage device for generating software transaction-level modeling (TLM) model
US20120011491A1 (en) * 2010-07-06 2012-01-12 Adi Eldar Efficient recording and replaying of the execution path of a computer program
WO2012031846A1 (en) * 2010-09-09 2012-03-15 International Business Machines Corporation An automated operating system test framework
US9104514B2 (en) * 2011-01-11 2015-08-11 International Business Machines Corporation Automated deployment of applications with tenant-isolation requirements
US20120331303A1 (en) * 2011-06-23 2012-12-27 Andersson Jonathan E Method and system for preventing execution of malware
US20130024178A1 (en) * 2011-07-20 2013-01-24 Narendran Kumaragurunathan Playback methodology for verification components
US20130132063A1 (en) * 2011-11-18 2013-05-23 Michael J. Rieschl Systems and methods for debugging just-in-time static translation in an emulated system
WO2014155684A1 (ja) * 2013-03-29 2014-10-02 富士通株式会社 プログラム、情報処理システム、およびプログラム移行方法
EP2849464A1 (en) * 2013-09-17 2015-03-18 Gemalto SA Method of communicating between a server and a secure element
EP2851815A1 (de) * 2013-09-18 2015-03-25 dSPACE digital signal processing and control engineering GmbH Testeinrichtung zum Echtzeittest eines virtuellen Steuergeräts
US10747880B2 (en) * 2013-12-30 2020-08-18 University Of Louisiana At Lafayette System and method for identifying and comparing code by semantic abstractions
WO2015133786A1 (ko) * 2014-03-03 2015-09-11 엘지전자 주식회사 차량용 인포테인먼트 시스템과 이동 단말기의 공용 어플리케이션 개발을 위한 동작 검증 방법
RU2757409C1 (ru) * 2020-06-19 2021-10-15 Акционерное общество "Лаборатория Касперского" Эмулятор и способ эмуляции

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0096510B1 (en) 1982-06-03 1988-07-27 LUCAS INDUSTRIES public limited company Control system primarily responsive to signals from digital computers
US5138708A (en) 1989-08-03 1992-08-11 Unisys Corporation Digital processor using current state comparison for providing fault tolerance
JPH04190457A (ja) * 1990-11-26 1992-07-08 Hitachi Ltd 論理シミュレーション方法および装置
US5729554A (en) 1996-10-01 1998-03-17 Hewlett-Packard Co. Speculative execution of test patterns in a random test generator
US5905855A (en) 1997-02-28 1999-05-18 Transmeta Corporation Method and apparatus for correcting errors in computer systems
TW342483B (en) 1997-11-14 1998-10-11 Winbond Electronics Corp Serial in-circuit emulator architecture
US6415436B1 (en) 1998-12-11 2002-07-02 Hewlett-Packard Company Mechanism for cross validating emulated states between different emulation technologies in a dynamic compiler
US6145436A (en) * 1999-04-27 2000-11-14 Astro-Med, Inc. Label transport shuttle for a printing device
US6625759B1 (en) * 2000-02-18 2003-09-23 Hewlett-Packard Development Company, L.P. Method and apparatus for verifying the fine-grained correctness of a behavioral model of a central processor unit
JP2001306359A (ja) 2000-04-20 2001-11-02 Seiko Epson Corp 自動評価システム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007282004A (ja) * 2006-04-10 2007-10-25 Nippon Telegr & Teleph Corp <Ntt> 音声モニタリング録音システムおよびその方法
JP4589263B2 (ja) * 2006-04-10 2010-12-01 日本電信電話株式会社 音声モニタリング録音システム
JP2010530996A (ja) * 2007-03-30 2010-09-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム・コードを変換するためのコンピュータ・システム、方法、及びコンピュータ可読記録媒体
JP2011508921A (ja) * 2007-12-29 2011-03-17 中国科学院▲計▼算技▲術▼研究所 Riscプロセッサ及びレジスタのフラグビットの処理方法

Also Published As

Publication number Publication date
JP4766540B2 (ja) 2011-09-07
GB2395316A (en) 2004-05-19
AU2003301782A8 (en) 2004-06-07
DE60313652D1 (de) 2007-06-14
GB0225649D0 (en) 2002-12-11
GB2395316A8 (en) 2005-03-18
TW200417925A (en) 2004-09-16
AU2003301782A1 (en) 2004-06-07
EP1559012B1 (en) 2007-05-02
DE60313652T2 (de) 2008-01-10
GB0325759D0 (en) 2003-12-10
US20040221273A1 (en) 2004-11-04
EP1559012A2 (en) 2005-08-03
WO2004042564A2 (en) 2004-05-21
WO2004042564A3 (en) 2004-07-22
GB2395316B (en) 2005-05-11
ATE361497T1 (de) 2007-05-15
US7793270B2 (en) 2010-09-07

Similar Documents

Publication Publication Date Title
JP4766540B2 (ja) プログラムコード変換の検証を実行するための方法および装置
CN100483341C (zh) 用于执行本机绑定的方法和装置
US6496922B1 (en) Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
JP4573189B2 (ja) プログラムコード変換方法
US20030149963A1 (en) Condition code flag emulation for program code conversion
US20070011664A1 (en) Device and method for generating an instruction set simulator
JP3606561B2 (ja) 第1ビット・アーキテクチャの命令を第2ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造
WO2012151075A1 (en) System and method for blurring instructions and data via relocation
US20060026584A1 (en) Explicit linking of dynamic link libraries
US6314557B1 (en) Hybrid computer programming environment
CN106055343A (zh) 一种基于程序演进模型的目标代码逆向工程系统
US8490073B2 (en) Controlling tracing within compiled code
JP2817786B2 (ja) シミュレーション装置及びシミュレーション方法
US7219335B1 (en) Method and apparatus for stack emulation during binary translation
CN111324948A (zh) 模拟方法及模拟系统
KR0125605B1 (ko) 프로그램의 아키덱쳐 변환방법 및 장치와 그 방법 및 장치를 사용하여 프로그램의 동작을 검증하는 방법 및 장치
WO2000065440A2 (en) Exception handling method and apparatus for use in program code conversion
US7353163B2 (en) Exception handling method and apparatus for use in program code conversion
JPH10320212A (ja) キャッシュ向け最適化方法
Barrett et al. Predictable Macros for Hindley-Milner
US20040045018A1 (en) Using address space bridge in postoptimizer to route indirect calls at runtime
JP5067705B2 (ja) 異常系テスト支援装置、異常系テスト支援方法、及びプログラム
CN114327497A (zh) 一种代码处理方法、装置及设备
JP3604936B2 (ja) 最適化方法,最適化装置及び記録媒体
Cifuentes et al. A transformational approach to binary translation of delayed branches with applications to SPARC® and PA-RISC instructions sets

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061031

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20090731

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20090824

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20090824

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091225

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100319

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100319

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100728

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100802

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100802

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101227

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110412

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110412

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20110418

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: 20110601

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110601

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20110601

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: 20110609

R150 Certificate of patent or registration of utility model

Ref document number: 4766540

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20140624

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees