JP2008537245A - プログラム・コード変換中の例外を正確に処理するための方法及び装置 - Google Patents

プログラム・コード変換中の例外を正確に処理するための方法及び装置 Download PDF

Info

Publication number
JP2008537245A
JP2008537245A JP2008507146A JP2008507146A JP2008537245A JP 2008537245 A JP2008537245 A JP 2008537245A JP 2008507146 A JP2008507146 A JP 2008507146A JP 2008507146 A JP2008507146 A JP 2008507146A JP 2008537245 A JP2008537245 A JP 2008537245A
Authority
JP
Japan
Prior art keywords
target
code
instruction
recovery information
target code
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
JP2008507146A
Other languages
English (en)
Other versions
JP5182815B2 (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 トランジティブ リミテッド
Priority claimed from PCT/GB2006/001268 external-priority patent/WO2006111705A2/en
Publication of JP2008537245A publication Critical patent/JP2008537245A/ja
Application granted granted Critical
Publication of JP5182815B2 publication Critical patent/JP5182815B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context

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)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

対象プロセッサの正確なプログラム・カウンタ値およびレジスタ値を含む正確な対象状態に依拠する正確な例外処理。対象コード(17)は、目標プロセッサ(13)によって実行可能な目標コード(21)に変換される。生成された目標コード(17)は、障害を受けやすい対象コード命令(174)に関連する、対応する目標命令(214)を含む。さらに、対応する目標コード命令(214)の各々は回復情報(195)に関連付けられる。例外(例えば障害)が生じると、その回復情報(195)が取り出され、特に一般的なケースの目標コード(21)を生成する最適化を考慮に入れて、正確な対象状態を回復するのに当該回復情報(195)が使用される。次に、その正確な対象状態を使用して例外が正確に処理される。

Description

本発明は、概してコンピュータおよびコンピュータ・ソフトウェアの分野に関し、より詳細には、例えば、プログラム・コードを変換するコード・トランスレータやコード・エミュレータやコード・アクセラレータにおいて有用なプログラム・コード変換方法およびプログラム・コード変換装置に関する。
組み込み型CPUと非組み込み型CPUの両方において存在する主なISA(命令セット・アーキテクチャ)にあっては、関連するソフトウェアにトランスペアレントにアクセス可能であるとともに、パフォーマンスを「高速化」可能であり、かつ低コスト/高パフォーマンスの利点をもたらす多数の有能なプロセッサに「変換」可能な多くのソフトウェアが存在する。また、それらのISAに合わせて組み込まれ、パフォーマンスおよび市場範囲を発展させることができない優れたCPUアーキテクチャも見られる。そのようなCPUは、ソフトウェア指向のプロセッサ・コアーキテクチャの恩恵を受ける。
PCT出願WO00/22521は、そのような高速化能力、変換能力、および共通アーキテクチャ能力を促進するプログラム・コード変換方法およびプログラム・コード変換装置を開示する。
プログラム・コード変換を実行する場合は、対象プロセッサ上で対象プログラムをそのまま実行する場合と比べ、変換工程におけるオーバヘッドをもたらす。例外の処理と関係して、或る特定の困難が生じる。
例外とは、プログラムにおける制御の通常のフローを変える条件である。例外は、プロセッサに注意を促す条件であって、通常、処理を続行可能とするためにまず処理されなければならない条件がシステム内部のどこかで発生したことを示す。例外は、割り込み、障害、トラップ、または異常終了などの、様々な異なるタイプに細分化可能である。用語は種々のアーキテクチャ間において多様であり、特定のタイプまたはカテゴリの例外は特定のアーキテクチャにおいて固有である。
例外は、ハードウェアによって、またはソフトウェアによって生成(「発生」)可能である。ハードウェア例外には、リセット、割り込みのような信号、またはメモリ管理ユニットからの信号が含まれる。例外は、例えば、ゼロ除算などの数値エラーに関して、オーバフローまたはアンダフローに関して、あるいは特権命令、予約命令、トラップ命令、または未定義の命令などの命令復号化エラーに関して、演算論理装置または浮動小数点装置によって生成可能である。
ソフトウェア例外は、種々のソフトウェア・プログラムでそれぞれ異なり、プログラムの通常の動作を変化させる任意の種類のエラー検査に適用可能である。例示的な例として、1つのレジスタの値が第2のレジスタの値より大きい場合に、対象コード中の命令が、報告すべき例外を発生する。
例外ハンドラは、プログラムの実行中に例外が生じた際に要請される特別なコードである。対象プログラムが所与の例外に関するハンドラを提供しない場合、デフォルトのシステム例外ハンドラが呼び出され、通常、実行されているプログラムの異常終了がもたらされ、エラー指示が戻される。
例外信号は、多くのオペレーティング・システム上で例外を生成するための一般的な機構である。多くのオペレーティング・システム、特に、Unix(商標)のようなシステムが準拠するPOSIX(商標)標準は、この機構が、どのように振舞うべきかを指定して、例外信号が、多くのシステムにわたって広く類似するようにする。例外をトリガする最も一般的なイベントは、プログラムによって実行される工程が、(i)マップされていないメモリ領域にアクセスしようとした場合、または(ii)正しい許可を有さないメモリ領域を操作しようとした場合である。例外信号をトリガする他の一般的なイベントは、(iii)別の工程から送信された信号の受信、(iv)実行する特権レベルを有さない命令工程の実行、または(v)ハードウェアにおけるI/Oイベントである。
本発明は、正確な例外とも呼ばれる、例外を正確に処理することに特に関係する。正確な例外は、対象コード命令間の境界上で報告される。正確な例外が報告されると、先行するすべての対象命令の効果は完了し、例外は、実行されていない対象コードの最初の命令を指し示し、その対象命令または後続の任意の命令からの効果は、まだ全く生じていない。
バイナリ変換に関しては、目標命令が目標プロセッサ上で実行され、例外が報告されると、目標命令は、一般に、対象コードの中に書かれた例外ハンドラに正確な例外を報告するための諸条件を満たさないことが明白である。命令は、その殆どが、対象コードの対応するブロックの中の命令の順序とは異なる順序で、目標プロセッサ上で実行される。その理由は、第1に、対象コードが書かれた対象プロセッサの命令セットと、目標コードが実行される目標プロセッサとの違いに起因するため、第2に、プログラム・コード変換中において通常行われる最適化のためである。
1つの周知のアプローチは、変換または実行されているコードのセクションに入る時点で適用されていた諸条件に、仮想の対象マシンを戻す「回復ポイント」の使用、すなわち、変換または実行されている対象コード命令の現在のブロックに入るポイントで支配的であった条件に、仮想の対象マシンを戻すことである。
米国特許第5832205号明細書(ケリーら(Kelly et al))は、ゲート・ストア・バッファを使用することにより、後に、対象コードの各セクションの終わりに「正式な」仮想対象レジスタ・セットにコピーされる「作業」レジスタ・セットを使用するエミュレータを開示している。例外が生じた場合、そのことは、作業レジスタにだけ影響を及ぼし、仮想対象マシンの条件は、対象コードの、そのセクションに入ったポイントで、「正式な」レジスタから回復させることが可能である。しかし、「作業」レジスタと「正式な」レジスタの使用は、目標プロセッサにおけるエミュレーション工程のオーバヘッドを大幅に増加させる。
別の例として、PCT出願公開WO−A−00/65440は、プログラム・コードの変換中に、Aレジスタ・セットとBレジスタ・セットとの間で交替して履歴回復ポイントを提供することを開示している。
PCT出願公開WO−A−2005/006106は、対象プログラム中の複数のタイプの命令のそれぞれに関して、様々なレベルの詳細を記録することにより、種々の正確な例外処理が適用される別のアプローチを開示している。つまり、記録されるべき情報の量およびタイプは、対象命令の性質に応じて多様である。好ましくは、それぞれの対象命令が4つのタイプのいずれかであると判定され、対応するレベルの詳細が記録される。第1のレベルは、全く状態を記録しない。第2のレベルは、最後に知られているスタック・フレームを使用して、正確でない(不正確な)状態情報を提供する。第3のレベルは、変換中、一時抽象レジスタ中に正確な対象プログラム・カウンタを記録し、そのカウンタが、その後、取り出されて、例外が処理される。第4のレベルは、さらなる目標コードを生成し、配置して、例外を生成した目標命令(特に、例外をトリガするトラップ・タイプの命令)の直前の正確な状態を修正する(すなわち、対象プログラム・カウンタを記録し、延滞または保留中の対象レジスタ値を修正する)。添付の特許請求の範囲の特徴を記述する部分は、この明細書に基づく。
これらの先行するアプローチは、前もって定義された回復ポイントにロールバックすることにより、またはそのポイントより前の対象状態を修正することにより、例外が生じたポイントにおける対象プロセッサの状態を正確に決定することのできる情報を記録することに依拠する。しかし、先行技術では、正確な例外処理のために正確な状態を獲得することは、依然として、プログラム・コード変換工程を制限し、相当なオーバヘッドおよび/または特定のハードウェア・サポートを伴う。
本発明の目的は、プログラム・コード変換を行う際のパフォーマンスを向上させることである。
本発明の好ましい目的は、プログラム・コード変換中の、最も詳細には、動的バイナリ変換中の例外の処理に関連するオーバヘッドを小さくすることである。
本発明の実施形態の別の好ましい目的は、例外の正確な処理のために、正確な対象状態を提供することに関連するオーバヘッドを小さくすることである。
本発明によれば添付の特許請求の範囲に記載する装置および方法が提供される。本発明の好ましい特徴は、従属請求項および以下の説明から明らかとなり得る。
以下は、本発明の各実施形態に従って実現可能な種々の態様および利点の要約である。以下は、当業者が詳細な設計の説明をより迅速に理解し得るように提供されるものであって、本明細書に添付する特許請求の範囲を限定することを意図したものではない。
本発明者らは、特に対象プログラム・コードの目標コードへの動的バイナリ変換を提供するランタイム・トランスレータに関連して特に有用であるプログラム・コード変換をスピードアップすることを目的とする方法を開発した。
本発明の第1態様では、対象コードから目標コードへのプログラム・コード変換において例外を正確に処理する方法が提供される。本方法は、障害を受けやすい対象コード命令から、対応する1つまたは複数の目標命令を含む目標コードを生成することを含む。対応する目標コード命令のそれぞれは回復情報に関連付けられる。目標コード命令の実行中に例外(例えば、障害)が生じた後、その回復情報が取り出され、正確な対象状態を修正するのに使用される。
好ましくは、回復情報は、目標コードの生成中に実行される最適化を考慮に入れる。好ましくは、回復情報は、障害を受けやすい対象コード命令のポイントにおける対象プロセッサを表す正確な対象状態を修正する回復ルーチンを実行するのに使用される。
好ましくは、当該方法は、生成された目標コードの直後に、1つまたは複数の回復情報項目を格納することを含む。回復情報を取得することは、目標コードの走査を進めて、当該目標コードに続く回復情報を探し出し、それぞれの障害が生じた対応する目標命令に関連する回復情報項目を取得することを含む。
好ましくは、目標コードと回復情報は、ブロック単位でインタリーブされる。
特に好ましい実施形態では、目標プログラム・カウンタが、回復情報に索引付けするのに使用される。
本発明の第2態様では、対象コードから目標コードへのプログラム・コード変換に関する例外を正確に処理する方法が提供される。当該方法は、対象コード中の潜在的に障害が生じる対象命令に対応する少なくとも1つの対応する目標命令を含む目標コードを生成するステップと、その少なくとも1つの対応する目標命令に関連する回復情報を格納するステップとを含む。割り込み信号が受信されると、目標コード命令の実行は、対応する目標命令の1つが出現するまで継続される。対応する目標命令に達すると、関連する回復情報が取り出され、正確な対象状態を回復するのに使用される。
好ましい実施形態では、格納された回復情報を使用して正確な対象状態が回復可能になるまで、例外が起こるポイントから正確な例外処理方法をロールフォワードする。好適には、目標コード命令の実行は、好ましくは目標コード・インタプリタを呼び出すことにより、または段階的目標プロセッサ・モードを呼び出すことにより、1つずつ続けられる。
また、本発明は、本明細書で定義する各種方法のいずれかを実行するように構成されたトランスレータ装置まで拡張される。また、本発明は、本明細書で定義する各種方法のいずれかを実現するように、コンピュータによって実行可能な命令が記録されたコンピュータ可読記憶媒体まで拡張される。
本明細書に援用され、本明細書の一部を成す添付の図面は、現在において好ましい実施形態を示し、以下で説明される。
以下の説明は、当業者が本発明を形成及び使用するために提供され、本発明者らによって企図された、本発明を実行するための最良の形態を示す。しかし、種々の変形が可能であることを当業者は理解し得る。本発明の一般的な原理は、改良されたプログラム・コード変換の方法および装置を提供するように本明細書で定義される。
以下の用語において、対象プログラムは、対象プロセッサを含む対象コンピューティング・プラットフォーム上で実行されるものとされる。目標プロセッサを含む目標コンピューティング・プラットフォームは、動的プログラム・コード変換を実行するトランスレータを介して対象プログラムを実行するのに使用される。トランスレータは、目標コードが目標コンピューティング・プラットフォーム上で実行可能となるように、対象コードから目標コードへのコード変換を実行する。
図1は、複数の目標レジスタ15と、複数のソフトウェア構成要素17、19、20、21、27を格納するメモリ18とを有する目標プロセッサ13を含む例示的な目標コンピューティング・プラットフォームを示す。ソフトウェア構成要素には、オペレーティング・システム20、対象コード17、トランスレータ・コード19、および、変換された目標コード21が含まれる。
一実施形態では、トランスレータ・コード19は、最適化を伴うか否かによらず、対象ISA(命令セット・アーキテクチャ)を、別のISAにおける変換済目標コードに変換するエミュレータである。別の実施形態では、トランスレータ19は、プログラム・コード最適化を実行することにより、対象コードを目標コードに変換するためのアクセラレータとして機能し、対象コードと目標コードはそれぞれ同一のISAである。
トランスレータ19、すなわちトランスレータを実装するソース・コードのコンパイル済みバージョン、および、変換済コード21、すなわちトランスレータ19によって生成された対象コード17の変換は、通常、マイクロプロセッサ、または他の適切なコンピュータである目標プロセッサ13上で実行されるオペレーティング・システム20と連携して実行される。
図1に示す構造は、単に例示的であり、例えば、本発明によるソフトウェア、方法、および工程は、オペレーティング・システム内部に、またはオペレーティング・システムの下に存在するコードで実装可能であることを理解し得る。対象コード17、トランスレータ・コード19、オペレーティング・システム20、およびメモリ18の格納機構は、当業者に知られている多種多様なタイプのいずれであることも可能である。
図1による装置では、プログラム・コード変換は、好ましくは実行時、すなわち目標コード21が実行されている間に動的に実行される。トランスレータ19は、変換済プログラム21とインラインで実行される。トランスレータ19は、好ましくは、目標アーキテクチャのためにコンパイルされたアプリケーションとして使用される。対象プログラム17は、実行時にトランスレータ19によって変換され、目標アーキテクチャ14上で実行される。
トランスレータ19を介して対象プログラム17を実行することには、インタリーブされた形で実行される次の2つの異なるタイプのコードが関係する。すなわち、トランスレータ・コード19および目標コード21である。トランスレータ・コード19は、トランスレータ19の高レベルのソース・コード実装に基づき、実行時に先立って、コンパイラなどによって生成される。これに対して、目標コード21は、変換済プログラムの格納された対象コード17に基づき、実行時の期間中、トランスレータ・コード19によって生成される。
対象プログラム17は、対象プロセッサ(図示せず)上で実行される。一実施形態では、トランスレータ19はエミュレータとして機能する。つまり、トランスレータ19は、対象プログラム17を目標プロセッサ13上で目標コード21として実際に実行しながら、対象プロセッサをエミュレートする。好ましい実施形態では、少なくとも1つのグローバル・レジスタ・ストア27が設けられる(対象レジスタ・バンク27または抽象レジスタ・バンク27とも呼ばれる)。マルチプロセッサ環境では、対象プロセッサのアーキテクチャに従って複数の抽象レジスタ・バンク27が任意に設けられる。対象プロセッサ状態の表現は、トランスレータ19の構成要素、および目標コード21によって与えられる。つまり、トランスレータ19は、変数および/またはオブジェクトなどの、様々な明示的なプログラミング言語デバイスの中に対象プロセッサ状態を格納する。トランスレータ19をコンパイルするのに使用されるコンパイラが、目標コードにおいて、どのように状態および動作が実装されるかを決定する。ちなみに、目標コード21は、対象プロセッサ状態を、目標コード21の目標命令によって操作される目標レジスタ15およびメモリ・ロケーション18の中で暗示的に提供する。例えば、グローバル・レジスタ・ストア27の低レベル表現は、単に、割り当てられたメモリの領域である。しかし、トランスレータ19のソース・コードにおいて、グローバル・レジスタ・ストア27は、より高いレベルでアクセスされ、操作されることが可能なデータ・アレイまたはオブジェクトである。
図2は、プログラム・コード変換中の実行制御の好ましい方法を示す概略的な流れ図である。
図2に示すように、制御は、まず、トランスレータ制御ループ190に存在する。ステップ201で、制御ループ190が、トランスレータ・コード19のコード生成ファンクション192を呼び出し、ファンクション192は、対象コード17のブロックを、対応する変換済コード21のブロックに変換する。次に、ステップ202で、その変換済コード21のブロックが目標プロセッサ13上で実行される。好適には、変換されたコード21の各ブロックの終端は、制御を制御ループ201に戻す命令を含む。つまり、対象コードを変換するステップと実行するステップとが混合され、したがって、対象プログラム17の各部分は順次変換され、次に実行される。
この場合、「基本ブロック」という用語は、当業者にはよく知られている。基本ブロックは、ブロック・コードを単一の制御パスに限定する、厳密には1つの入口点と、厳密には1つの出口点とを有するコードのセクションである。つまり、基本ブロックは、制御フローの有用な基本単位である。好ましくは、トランスレータ19は、対象コード17を複数の基本ブロックに分割し、各基本ブロックは、単一の入口点における最初の命令と、単一の出口点における最後の命令(ジャンプ命令、呼び出し命令、または分岐命令などの)との間の順次命令セットである。トランスレータは、それらの基本ブロックの1つだけを選択する(ブロック・モード)か、または基本ブロックのグループを選択する(グループ・ブロック・モード)ことができる。グループ・ブロックは、好ましくは、単一の単位として一緒に扱われるべき2つ以上の基本ブロックを含む。さらに、トランスレータは、異なる入口条件下で、対象コードの同一の基本ブロックを表すアイソブロックを形成することができる。
好ましい諸実施形態では、IR(中間表現)のツリーが、元の対象プログラム17から目標コード21を生成するステップの一環として、対象命令シーケンスに基づいて生成される。IRツリーは、対象プログラムによって計算される式、および実行される演算の抽象表現である。その後に、目標コード21が、IRツリーに基づいて生成される。IRノードの集合は、実際には、DAG(有向非循環グラフ)であるが、口語的には、「ツリー」と呼ばれる。
当業者は理解し得るように、一実施形態では、トランスレータ19は、C++などのオブジェクト指向プログラミング言語を使用して実装される。例えば、IRノードがC++オブジェクトとして実装され、他のノードへのリファレンスがそれらの他のノードに対応するC++オブジェクトに対するC++リファレンスとして実装される。したがって、IRツリーは、互いへの様々なリファレンスを含む、IRノード・オブジェクトの集合として実装される。
さらに、本実施形態の説明では、IR生成は、対象プログラム17の実行が意図されている、対象アーキテクチャの特定のフィーチャに対応する抽象レジスタ定義セットを使用する。例えば、対象アーキテクチャ上の各物理レジスタ(「対象レジスタ」)に関する固有の抽象レジスタ定義が存在する。このため、トランスレータにおける抽象レジスタ定義は、IRノード・オブジェクトへのリファレンスを含むC++オブジェクト(すなわち、IRツリー)として実装可能である。抽象レジスタ定義セットによって参照されるすべてのIRツリーの集合は、作業IRフォレスト(複数の抽象レジスタ・ルートを含み、その各々がIRツリーを参照するため、「フォレスト」である)と呼ばれる。それらのIRツリー、およびその他の工程は、好ましくは、トランスレータ・コード生成ファンクション192の一部を形成する。
(例外処理)
図3は、本発明の好ましい実施形態におけるプログラム・コード変換後の、対象プログラム中の命令と、目標プログラム中の命令との間の関係を示す概略図である。
この例では、対象命令S1〜S3が、機能的に均等な目標命令T1〜T3をもたらす。対象命令S1は、デッド・コード削除最適化などによって除去されており、生成された目標コード内において対応物を有さない。対象命令S2は、1つの均等な目標命令T3をもたらす。これに対して、対象命令S3は、2つの目標命令T1,T2をもたらす。目標コード命令と対象コード命令との間に、1対0、1対1、1対多、または多対1の関係が、存在可能である。
図3に示すように、別の一般的に使用される最適化は、目標コード中の命令シーケンスが、対象コードの中の元のシーケンスと均等でないコード再スケジューリングを実行することである。ここでは、第2の対象命令S2は、第3の目標命令T3として再スケジューリングされている。
また、図3は、対象例外ハンドラ170も示す。通常、対象環境は、1つまたは複数の特有の対象障害ハンドラ170a(すなわち、特定のタイプの例外に特有の)、および/または、1つまたは複数のデフォルトの例外ハンドラ170b(いずれの特有の例外ハンドラも登録されていない場合に使用される)を提供する。
この例では、対象命令S1、S2、S3のいずれかが、対象例外ハンドラ170によって処理される必要がある例外を潜在的にもたらす。
変換済対象例外ハンドラ270は、目標プロセッサ上で実行される目標コードの中で、対象例外ハンドラ170をエミュレートする例外ハンドラを提供する。実際には、1つまたは複数の変換済対象特有例外ハンドラ270aか、あるいは、1つまたは複数の変換済デフォルト例外ハンドラ270bが提供される。例外が処理されると、例外ハンドラ270は、通常、制御を目標コード21に戻す。
変換済対象例外ハンドラ270は、例外を正確に処理するために、正確な対象状態を受け取ることを見込む。前述したとおり、正確な対象状態を再現することは、困難であるとともに、高い費用がかかる。第1に、対象状態を計算することや収集することに関連する実際の費用が存在する。例えば、延滞評価などのトランスレータ最適化は、対象レジスタ値の計算を、それらの値を計算するのに必要な基礎をなすデータを格納することにより、遅延させる可能性がある。例外に応答して対象状態を再現することは、それらの値が即時に修正される(すなわち、計算される)ことを要求する。対象レジスタが、前もって計算されている場合でさえ、それらのレジスタが、対象レジスタ・バンク27などのメモリから取り出されなければならない。
第2に、対象プログラムの任意のポイントにおける正確な対象状態を計算する能力に関連する機会費用が存在する。コード再スケジューリングなどの動的バイナリ・トランスレータにおける多くの重要な最適化には、バイナリ互換性の厳密なモデルからの逸脱が伴う。バイナリ互換性とは、トランスレータが対象アーキテクチャの正確な状態を再現できることを意味する。厳密なモデルとは、変換されたプログラムの任意のポイントにおいて(すなわち、任意の対象命令において)、対象状態を再現可能なモデルである。実行の任意のポイントにおける対象状態を再現するのに必要な情報を保存するため、トランスレータは、通常、重要な最適化をあきらめなければならない。それらの最適化が使用されている場合、トランスレータは、対象コンテキストを正確に再現する方法を持たない。このため、正確な例外処理の現実の費用は、正確な対象状態を生成する作業だけではない。そもそも、対象状態を生成することができるために、コード変換工程に対する制約が存在する。
(障害)
最初に、障害として一般的に知られている特定のカテゴリの例外に集中することにより本発明を説明する。
障害とは、通常、エラー処理に関して使用される。多くの演算は、例外的な状況において、正しい結果をもたらすことができない。例えば、整数加算命令は、表現するには大きすぎる結果をもたらす可能性がある(結果のサイズが、入力のサイズと合致するものと想定すると)。プロセッサ・アーキテクチャ設計者は、そのような障害が示される場合に、どのように示されるかを決定する。通常の3つの設計オプションは、オーバフローをそのまま無視すること、内部プロセッサ状態(例えば、ステータス・フラグ)を変更することにより、エラーは示されるが後続の命令の実行に進むこと、または、オーバフロー例外を生成することである。特定のアーキテクチャは、特定の命令の障害を生じるバージョンと、障害を生じないバージョンとを提供することにより、それらのオプションの混合を提供することが可能である。
他の例として、一部の一般的な部類の障害は、算術例外、種々の形態のメモリ障害(無効なアドレス、保護違反、および整列チェック)、および、不正な形式または(現在の特権レベルにおいて)不正な命令障害である。
障害は、通常、同期した、強制的な例外である。その理由は、障害は、オペランド・データに関して、所与の命令の実行およびプロセッサ状態(メモリ割り当てなどを含む)に起因して生じるからである。障害は、命令内部で生じる。つまり、障害が生じた命令は、完了することができない。通常、対象プロセッサは、障害が生じた命令の開始時の状態にレジスタ状態を解決して、障害ハンドラがエラーを解決しようと試みることを可能にし、実行処理を再開可能にする。一部の状況では、そのような状態を解決することができない可能性があり、そのことが障害を致命的にする可能性がある。
回復可能な障害(通常、OSレベル、またはOSより下位のレベルにおける)の例が、ページ・フォルトである。すなわち、メモリ・アクセスが、存在しない仮想メモリの中のページにアクセスしようと試みた場合に、例外が生成される。ページがマップされている場合、仮想メモリ・システムは、物理ページを割り当て、マッピングに従って物理ページを準備し(例えば、ファイルがそのアドレスにマップされている場合、データをロードする)、次に、それに応じてページ・テーブル構造を更新する。その後、プロセッサは、同一の命令で実行を再開し、その命令は、その時点で正しく完了可能となる。
一部の障害は、ユーザ・モード・アプリケーションからマスク可能であり得る。すなわち、例えば整列チェックは、不整列アクセスをサポートするアーキテクチャ上で、マスク可能な障害として一般的に利用可能であり、サポートしないアーキテクチャ上では、整列障害はマスク可能ではない。
対象命令セット・アーキテクチャにおける一部の命令は、障害を生じやすいことが知られているのに対して、他の命令はそうではない。つまり、ほとんどの命令セットは、障害を受けやすい命令(障害を生じる命令、または潜在的に障害を生じる命令とも呼ぶ)を、障害を生じず、障害を受けにくい命令と共に含む。
障害は、同期性であるので問題があり、通常、回復可能である。さらに、障害を受けやすい命令は、いずれの現実の対象プログラムにおいても、比較的頻繁に実行される傾向がある。このため、障害の処理の改良は、プログラム・コード変換において、特に、動的バイナリ変換において即時の利益がある。
(障害処理)
図4は、本発明の好ましい実施形態によるプログラム・コード変換中の目標マシンにおける例示的なプログラム・コード構造を示す。
図4では、対象コード17の例示的なブロックは、対象命令SC1〜SC4を含む。それらの命令の1つ(SC3)は、障害を受けやすい命令174であるのに対して、残りの命令は、障害を受けにくい。
また、対応する目標コード21のブロックが、均等の目標コード命令TC1〜TC6とともに示される。障害を受けやすい対象命令174(SC3)は、生成された目標コード21中の1つまたは複数の対応する目標命令214(このケースでは、TC4)と関係する。
図4に示すように、対応する目標命令214のそれぞれを、回復情報項目195のそれぞれにリンクする回復マップ194が設けられる。つまり、障害を受けやすい対象命令174の各々は1つまたは複数の対応する目標コード命令214を有し、それぞれの命令214は、それぞれの目標特有回復情報項目195にマップされる。
回復情報195は、目標コード21の実行中に行われる、例外(特に、障害)の正確な処理を可能にする。詳細には、回復情報195は、変換済対象例外ハンドラ270における例外の正確な処理のための正確な対象状態を作成するため、さらなるネイティブ・コード命令の実行を可能にする。
1つの好ましい実施形態では、回復ハンドラ215が設けられ、この回復ハンドラ215は、回復情報195を使用して正確な対象状態を修正し、例外ハンドラ270によって処理すべき例外を準備する。
図5は、本発明の好ましい実施形態による、障害タイプの例外の正確な処理を行うことができる目標コード21を作成する方法の概略図である。
ステップ501で、対象コード17の或るセクション、好ましくは基本ブロックが復号化される。復号化中、1つまたは複数の障害を受けやすい命令174が対象ISAの定義に従って識別される。
ステップ502で、対象コード17を対応する目標コード21のブロックに変換するプログラム・コード変換が実行される。任意に、プログラム・コード変換は、デッド・コード削除および/またはコード再スケジューリングなどの最適化を含む。生成された目標コード21のブロックは、障害を受けやすい対象命令174のそれぞれに関する1つまたは複数の対応する目標命令214を含む。
ステップ503で、対応する目標命令214の各々に関する回復情報195が提供される。好ましくは、回復マッピング・テーブル194内で、対応する目標命令214のそれぞれを回復情報195のそれぞれにリンクするエントリが作成される。
ステップ504で、生成された目標コード21のブロック中の命令が実行される。例外(障害)が全く生じなかった場合、実行は、ブロックの終わりまで続き、その後、制御は図2のトランスレータ実行ループを通るなどして、次のブロックを呼び出すように進む。
ステップ505で、対応する目標命令214の1つと関係する例外(障害)が生じた場合、各回復情報195が獲得され、正確な対象状態を修正するのに使用される。つまり、回復情報195は、さらなる回復コード命令セットを実行する(理想的には、回復ハンドラ215において)のに使用される。
回復ハンドラ215は、好ましくは、目標プロセッサによってそのまま実行可能なネイティブ・コードで書かれる(トランスレータ19によって動的に生成される変換済目標コードとは対照的に)。
ステップ506で、例外は、例外ハンドラ270によって正確に処理される。つまり、ステップ505における回復は、例外ハンドラ270による正確な例外の処理の条件を満たす正確な対象状態をもたらす。通常、例外は好適に処理され、制御は実行プログラムに戻る。通常、制御は、現在のブロックの実行を完了させるように戻る。それ以外の場合、障害は致命的であり、プログラムは終了する。
(回復情報の格納)
図6は、目標コンピューティング・プラットフォーム上に回復情報195、および生成された目標コード21を格納する、好ましい機構を示す。
前述した回復機構それ自体は、一部の費用をトランスレータ19にもたらす。第1に、回復情報195を格納するのに、メモリ・スペースが要求される。さらに、対応する目標コード命令214のそれぞれを回復情報195のそれぞれにリンクする回復マップ194を格納するスペースが要求される。例外(障害)が生じた場合、妥当な回復情報195を迅速、かつ効率的に獲得することが所望される。
図6は、目標コード21aの生成されたブロックを格納する目標コンピューティング・プラットフォームの中のメモリの領域を示す。目標コード・ブロック21aは、対象コードの中の障害を受けやすい命令174に対応する1つまたは複数の対応する目標命令214を含む。
回復情報195は、メモリ内において、それぞれの目標コード・ブロック21aの直後に格納される。つまり、対応する目標命令214のそれぞれは、妥当な目標コード・ブロック21aの直後に格納される回復情報項目195を有する。
好ましくは、マーカ196は、目標コード・ブロック21aの終端と、回復情報195の先頭とを容易に区別するために設けられる。
さらに、図6に示すように、別の変換済目標コード・ブロック21bがメモリ内に格納され、同様にその後に、それぞれの回復情報195およびマーカ196が続く。つまり、目標コード21と回復情報195が、メモリ内でインタリーブされる。
特定の対応する目標命令214内で例外(障害)が生じた場合、それぞれの回復情報を獲得するために、以下のステップが実行される。
第1のステップは、目標コード・ブロックの終端まで走査を進めることである。好都合なことに、このステップは、マーカ196が識別されるまで、相次ぐ命令を読み取ることを含む。第2に、回復情報195のリストの走査を進めることにより、所望されるそれぞれの回復情報が識別される。
特に好ましい実施形態では、各回復情報195は、対応する目標命令214のプログラム・カウンタに従って索引付けされる。つまり、対応する目標コード命令214のプログラム・カウンタ値は、回復情報195のリストの中の索引を形成する。例外が生じた場合、目標プログラム・カウンタは、目標プロセッサの中で直ちに利用可能である。第1に、マーカ196を求めてメモリを走査し、第2に、目標プログラム・カウンタを求めて回復情報のリストの中を走査することにより、それぞれの回復情報195が効率的に探し出される。
図7は、図6のメモリ・レイアウトを使用して回復情報を獲得する好ましい方法を示す。
実際的な実施形態では、各基本ブロックは、通常、およそ12の命令を含む。したがって、かかわる距離が比較的短いので、現在の目標コード・ブロックの終端まで走査することは、比較的迅速である。好ましい実施形態では、各対象ブロックは、例えば100または200の命令という最大サイズに制限される。比較的長い目標ブロックなどの稀なケースでも、走査は、依然、効果的であり、費用の低い機構である。
図8は、回復情報195の特に好ましい実施形態を示す。
図8の例では、回復情報195には、目標プログラム・カウンタ195a、対象プログラム・カウンタ195b、回復標識セット195c、およびマッピング・テンプレート195dが含まれる。
回復情報195は、回復ハンドラ215により正確な対象状態を修正することを可能にする。特に、正確な対象状態は、対象プログラム・カウンタ値(195b)と、対象レジスタ値とを含む。
好ましくは、回復ハンドラ215は、回復情報を使用して、対象プログラム・カウンタを修正する(対象プログラム・カウンタが既に利用可能ではない場合)。この例では、回復情報195は、各目標PC195aに関する正確な対象PC195bを格納する。対象PCは、格納された回復情報の中で、そのフィールド195bを読み取ることによって修正される。
マッピング・テンプレート195dは、対応する目標命令214のポイントにおいて適用可能な、適切なレジスタ・マッピングを識別する。回復ハンドラ215は、対象プロセッサ・レジスタ値を修正する。一実施形態では、レジスタ値は、メモリの中の抽象レジスタ・バンク27に修正される。代替として、メモリ・ストアが、目標レジスタの中に残される。ここでは、回復ハンドラ215は、格納されたマッピング・テンプレート195dを使用してレジスタ・マッピングを設定し、これにより、対象レジスタが物理目標レジスタにマップされる。
図8に示すように、好ましくは格納された回復情報195には、特定の目標コード命令のポイントにおける最適化が未処理であることを表す回復標識(最適化フラグ)セット195cが含まれる。この例では、フラグF1、F2、F3、F4として設定された4つの回復標識が存在する。好ましくは、回復ハンドラ215は1つまたは複数のネイティブ・コード回復ルーチン216を呼び出して、回復標識F1〜F4に基づき、未処理の最適化を実行する。
詳細には、回復ハンドラは、例外が生じたポイントで延期されていた、延滞した作業を実行する。例えば、多くのプロセッサは条件コード・フラグ・セットを提供する。好ましい最適化は、条件コード・フラグの正しい状態を必要に応じて修正可能とする基礎情報(underlying information )を代わりに格納することにより、条件コード・フラグの修正を遅延させることである。回復ルーチン216は、格納された基礎をなす情報から延滞条件コード・フラグ評価を実行する。
図9は、格納された回復情報の別の特に好ましい実施形態を示す。
回復情報195は、理想的には、圧縮された形態で格納される。有利には、回復情報のメモリ占有面積は小さくされる。一部の実施形態では、トランスレータ19は、他の多くのステップと共に、コンピューティング・プラットフォーム上で動作し、トランスレータ19のオーバヘッドによって消費されるメモリの量を少なくすることが望ましい。
図9に示すように、第1の目標PC195aおよび第1の対象PC195bは、フル値(full values)として格納される。後続のPCはそれぞれ、それらの基本値からのオフセットとして格納される。好ましくは、目標コード21a、21bの各ブロックの中の第1の回復情報195は基本値としてのフルPC値で格納され、後続の各回復情報195は、プログラム・カウンタ値を基本値からのオフセットとして格納する。代替として、ブロックの中の第1の目標コード命令に関するPCなどの基本PCが、その命令が対応する目標命令214であるか否かにかかわらず、ブロックに関して定義される。
(例1 PPC−x86変換)
対象コード17の例示的なシーケンスの例を以下に示す。例示的な対象コード17は、PPC(PowerPC)タイプのプロセッサに適切である。
対象コード(PPC)
0x0001003c:...
0x00010040:add.r3,r3,68
0x00010044:ld r3,0(r3)
0x00010048:...
例示的なPPC対象コードは、定数値68をレジスタ「r3」に加え、次に、そのアドレスからr3にロードする。この加算は、PPCドット付き加算命令で実行され、当該命令は、PPC条件フィールド・レジスタのフィールド0の中でフラグを設定する。ロード障害が生じた場合、例外の正確な処理のため、そのロード命令のプログラム・カウンタ値(0x00010044)が報告されなければならず、r3は、加算演算が実行された後の値を含まなければならず、条件フィールド0は、更新されていなければならない。
プログラム・コード変換の後、以下の例示的な目標コード21が生成される。この例では、目標コードは、x86タイプのプロセッサによって実行可能である。
目標コード(x86)
0x40083200:mov 12(%ebp),%eax
0x40083203:add $68,%eax
0x40083206:mov (%eax),%ecx
0x40083208:mov %ecx,12(%ebp)
目標コードは、対象レジスタr3に関する値(この場合、抽象レジスタ・バンク27を指し示すebpレジスタからのオフセット12に存在する)をレジスタeaxにロードする。目標コードは、次に、68をeaxに加え、その後、そのアドレスからecxにロードする。最後に、その結果が、抽象レジスタ・バンクの中の対象レジスタr3に再び格納される。
この例では、回復情報195の例示的なインスタンスは、以下のとおりである。すなわち、
0x40083206:
subj_addr=0x00010044,
flags=cr0_lazy1_cmp0,
register_map=[lazy1(%eax),r3(%eax)]
ターゲットPC(0x40083206)は、回復情報に索引付けをするのに使用される。このケースでは、目標mov命令は、潜在的に障害を生じる対象ロード命令に対応する目標命令である。正確な対象PCが記録される(0x00010044)。「lazy1」と呼ばれる特別な対象レジスタ内の値の0との比較に基づいて条件レジスタ・フィールド0を修正する必要があることを示すのに、フラグが使用される。また、回復情報は、対象レジスタlazy1およびr3の値が、目標レジスタeax(加算目標命令0x40083203によって生成された値)内に入っていることを示す。回復を行うため、eaxからの値は、適切な対象レジスタに溢れさせられ、条件フィールドは、その時点でlazy1に溢れさせられた値を使用して適切な比較を実行することにより、その時点で修正されることが可能であり、適切なPCを報告可能である。
要するに、回復情報は、作業を必要とする場合にだけ実行可能にする。つまり、作業は、例外が生じた例外的なケースにおいてだけ実行される。大抵、通常の実行では、正確な対象状態は要求及び修正されない。ここで説明する回復機構は、生成された目標コードの通常の実行中に、作業が延期または全く実行されないことを可能にする。その結果、目標コードの通常の実行が、より高速になり、より効率的になる。しかし、例外が生じた場合、回復情報195は、依然として正確な対象状態を修正可能とし、例外を正確に処理可能とする。回復作業は、正確な対象状態を修正するために、例外が生じた後に実行される。
(割り込み)
割り込みの正確な処理と関係する、本情報のさらなる好ましい態様を詳細に説明する。
割り込みは、通常、ハードウェア・デバイス・サポートのために使用される。プロセッサ外部のハードウェア・デバイスにおいてイベントが生じると、そのイベントをプロセッサに通知する信号が送信される。例は、I/Oデバイスからのデータの利用可能性である。外部デバイスは、割り込みに対処するルーチンを呼び出すために、プロセッサを通る命令の現在のフローに割り込みをかける。割り込みの使用により、システムがデバイスに絶えずポーリングを行ってデバイスが対処を必要としているかどうかを調べる必要性が軽減される。別の例は、所定の間隔でユーザ・アプリケーションに割り込みがかけられることを可能にするタイマ割り込みであり、制御は、通常、オペレーティング・システムに移される。規則的な割り込みは、マルチタスク・システムにおいてプロセッサ・リソースの共有を実施する便利な機構である。
割り込みは、プロセッサ内部における特定の命令の実行にではなく、外部デバイスにおけるイベントに反応して駆動されるという点で、非同期の例外である。このため、割り込みは、命令ストリームにおける不定のポイントで生じる可能性がある。割り込みは、実行されている現在の命令ストリームとは無関係であり、実行は、例外に対処が行われると、再開する。
図10は、割り込みの処理を示す例示的な目標コード・シーケンスを示す。
目標コード21aのブロックは、命令TC1〜TC6を含む。この例では、割り込みは、プロセッサが命令TC2を実行している間に生じる。現在の命令(TC2)の実行が完了する。また、回復情報195に関連する、対応する目標命令214(このケースでは、命令TC4)が出現するまで、0、または1つ以上のさらなる命令が実行される(TC3)。つまり、目標コード命令の実行は、正確な対象状態が実現可能である次のポイントまでロールフォワードされる。
プロセッサが、回復情報195に関連する次の対応する目標命令214に到達すると、回復情報は、正確な対象状態を修正するために、回復ハンドラ215に送られる。次に、正確な対象状態が適切な例外ハンドラ270に送られる。このハンドラ270は、好ましくは対象割り込みハンドラである。
図11は、目標コンピューティング・プラットフォーム内で割り込みを処理する3つの好ましい実装形態を示す。
第1の好ましい実施形態では、割り込みタイプの例外が生じると、目標コード・インタプリタ197が呼び出される。目標コード・インタプリタ197は、回復情報195を有する対応する命令214に到達するまで、目標コード命令を1つずつ実行する。
第2の実施形態では、ステップ・プロセッサ・モードが呼び出される。つまり、目標プロセッサ13は、対応する命令214に到達するまで、目標コード命令を1つずつ実行するステップ・プロセッサ・モードに入るように制御される。
第3の好ましい実施形態では、回復情報195を有する対応する命令214に到達するまで、命令による目標コード命令を実行するように、チェック基準が呼び出される。
目標コード・ブロック21a内で、障害を受けやすい対応する目標命令214が全く出現しなかった場合、実行は、好ましくはブロックの終端まで続けられる。好ましい実施形態では、正確な対象状態はブロック境界で修正される。
(トラップ)
トラップは、通常、明示的、かつ無条件に、ユーザによって要求された例外である。対象命令がトラップ・タイプの例外を生成した場合、トランスレータ19は、そのトラップ・イベントを処理するのに要求される動作を直接に実行する、その命令に関する目標コードを生成する。
単一ステップ・トラップや条件付きトラップ(例えば、IA−32アーキテクチャにおけるINTO命令)などの一部の命令セット・アーキテクチャは、さらなる特別な処理を要求するトラップを定義する。一般的なケースは、例外が生成されないことである、条件付きトラップは、好ましくは前述した障害と同様に処理される。このようにして、一般的なケースにおける作業が最小限に抑えられる。例外的なケースでは、要求されるさらなる作業は、回復ハンドラを介して呼び出される。
(異常終了)
異常終了は、通常、回復可能でないイベントであるが、様々な特性を有することが可能である。異常終了は、通常、重大なシステム障害を管理するのに使用される。内部プロセッサ状態の不整合などのハードウェア障害、またはオペレーティング・システムの重要な領域内の誤りなどの深刻なソフトウェア障害を検出すると、プロセッサは、そのエラーを無視して、実行を続けようと試みる、安全のために停止もしくは再起動しようと試みることが可能であり、あるいはそのエラーをオペレーティング・システムに知らせる例外を生成することが可能である。障害と同様に、異常終了は命令内部で生じる。異常終了は、しばしば致命的である。異常終了は、通常、ユーザによるマスクが可能でない。
マシン・チェック・エラーなどの異常終了が、障害が起きると予期されていない命令の実行内で生じた場合、その異常終了する命令における正確な対象状態を完全に再現するのは困難である。一般に、動的バイナリ変換に関して異常終了を正確に処理するのは、非常に費用がかかる。
以上の説明から理解されるように、本明細書で説明する例外処理機構は、多くの利点を有する。特に、可能であれば、作業が一般的なケースから取り除かれ、プログラムの通常の実行中、稀にしか生じない例外的なケースにおいてだけ、作業が実行される。しかし、要求される場合、正確な対象状態が実現される。また、正確な対象状態を実現するオーバヘッドが最小限に抑えられる。
種々の好ましい実施形態を図示して説明したが、添付の特許請求の範囲で定義される本発明の範囲を逸脱することなく、種々の変更および変形が可能であることが、当業者には理解し得る。
本明細書(添付の特許請求の範囲、要約書、および図面を含む)で開示する特徴のすべて、および/またはそのように開示する方法またはステップのすべては、そのような特徴および/またはステップの少なくともいくつかが互いに相容れない組合せを除き、任意の組合せで組み合わせ可能である。
本明細書(添付の特許請求の範囲、要約書、および図面を含む)で開示する各特徴は、特に明記しない限り、同一の目的、均等の目的、または同様の目的を果たす代替の特徴によって置き換えられてもよい。このため、特に明記しない限り、開示する各特徴は、一連の一般的な均等の特徴、または同様の特徴の一例に過ぎない。
本発明は、以上の実施形態の詳細に限定されない。本発明は、本明細書(添付の特許請求の範囲、要約書、および図面を含む)で開示する特徴の任意の新たな1つ、または任意の新たな組合せにまで、あるいはそのように開示する方法またはステップの任意の新たな1つ、または任意の新たな組合せにまで拡張される。
本発明の実施形態の装置を示すブロック図。 プログラム・コード変換中の実行制御の好ましい方法を示す概略流れ図。 プログラム・コード変換後の対象命令と目標命令の間の関係を示す概略図。 本発明の好ましい実施形態によるプログラム・コード変換中の目標マシンにおける例示的なプログラム・コード構造を示す図。 本発明の好ましい実施形態による、正確な例外のために目標コードを作成する方法の概略図。 回復情報および生成済目標コードを格納する好ましい機構を示す概略図。 回復情報を獲得する好ましい方法の概略図。 本発明の好ましい実施形態で使用される回復情報の概略図。 本発明の別の好ましい実施形態で使用される回復情報の概略図。 割り込み処理を示す例示的な目標コード・シーケンスを示す図。 目標コンピューティング・プラットフォーム内で割り込みを処理する好ましい実装形態を示す概略図。

Claims (29)

  1. 対象コード(17)から目標コード(21)へのプログラム・コード変換において例外を正確に処理する方法であって、
    (a)対象命令セット・アーキテクチャに従って対象プロセッサにより実行可能な前記対象コード(17)を復号化するステップと、
    (b)前記対象コード(17)から目標コード(21)を生成するステップと、
    (c)目標命令セット・アーキテクチャに従って目標プロセッサ(13)上で前記目標コード(21)を実行するステップと、を備え、
    前記ステップ(a)は、前記対象命令セット・アーキテクチャにおいて潜在的に障害を生じる、障害を受けやすい命令(174)を識別することを含み、
    前記ステップ(b)は、前記識別された障害を受けやすい対象命令から1つまたは複数の対応する目標命令(214)を生成し、該複数の対応する目標命令(214)または該複数の対応する目標命令(214)の各々に関連する回復情報(195)を格納することを含み、
    当該方法は更に、
    (d)前記複数の対応する目標命令(214)または前記複数の対応する目標命令(214)の1つの実行中に障害が発生した場合に、
    (i)前記対応する目標命令(214)に関連する前記回復情報(195)を取得するステップと、
    (ii)前記回復情報(195)を使用して前記障害時における対象プロセッサを正確に表現する正確な対象状態を回復するステップと、
    (iii)前記正確な対象状態を使用して前記障害を正確に処理するステップと、
    を実行することを含む、方法。
  2. 前記目標コード(21)を生成することは、1つまたは複数の最適化を実行することを含み、
    前記回復情報(195)は、前記1つまたは複数の最適化に関する情報を含む、請求項1に記載の方法。
  3. 前記目標コードを生成することは、前記1つまたは複数の対応する目標命令(214)において不正確な対象状態を残す1つまたは複数の最適化を実行することを含み、
    前記回復情報(195)は、利用可能な前記不正確な対象状態から正確な対象状態を獲得可能にする、請求項1に記載の方法。
  4. 前記正確な対象状態は、少なくとも正確な対象プログラム・カウンタを含む、請求項1に記載の方法。
  5. 前記正確な対象状態は、前記対象プロセッサの対象レジスタを表現する少なくとも正確なレジスタ値を含む、請求項1に記載の方法。
  6. 前記回復情報(195)を格納することは、前記生成された目標コード(21)の直後に前記回復情報(195)を格納することを含む、請求項1に記載の方法。
  7. 前記回復情報(195)を取得することは、
    前記目標コード(21)の走査を進めて、前記目標コード(21)の後に続く前記回復情報(195)を探し出すステップと、
    それぞれの前記対応する目標命令(214)に関連する前記回復情報(195)を取得するステップと、
    を含む、請求項6に記載の方法。
  8. 前記対象コード(17)を複数のブロックに分割すること、
    複数の目標コード(21)のブロックを生成すること、
    前記生成された複数の目標コード(21)のブロック間にインタリーブされた回復情報(195)を格納すること、
    をさらに備える請求項1に記載の方法。
  9. 前記回復情報(195)から前記目標コード(21)を分離するマーカー(196)を格納すること、
    障害を示す前記対応する目標命令(214)から走査を行って前記マーカー(196)を探し出した後、前記マーカー(196)から走査を行って前記関連する回復情報(195)を探し出すことにより、前記回復情報(195)を取得すること、
    をさらに備える請求項1に記載の方法。
  10. 前記関連する前記対応する目標命令(124)を表す目標プログラム・カウンタによって索引付けされた前記回復情報(195)を格納することをさらに備える請求項1に記載の方法。
  11. 前記正確な対象状態を回復することは、
    前記取得された回復情報(195)を回復ハンドラ(215)に送ること、
    現在利用可能な対象状態を獲得すること、
    前記回復情報(195)を使用して前記現在利用可能な対象状態を変更することで前記正確な対象状態をもたらすこと、
    を含む、請求項1に記載の方法。
  12. 前記回復情報(195)を回復ハンドラ(215)に送ること、
    前記回復情報(195)に従って、前記回復ハンドラ(215)から1つまたは複数のネイティブ・コード回復ルーチンを呼び出すこと、
    を更に備える請求項1に記載の方法。
  13. 前記回復情報(195)は、目標プログラム・カウンタ値(195a)と、対象プログラム・カウンタ値(195b)とを含む、請求項1に記載の方法。
  14. 前記回復情報(195)は、前記対応する目標コード命令のポイントにおける最適化が未処理であることを表す回復標識セット(195c)をさらに含む、請求項13に記載の方法。
  15. 前記回復情報(195)は、前記対応する目標命令(214)のポイントにおいて適用可能な抽象対象レジスタへの目標レジスタのマッピングを特定するマッピング・テンプレート(195d)をさらに含む、請求項13に記載の方法。
  16. 前記回復情報(195)は圧縮形態で格納される、請求項1に記載の方法。
  17. 前記回復情報(195)は、
    フル・プログラム・カウンタ値が基本値として格納された目標コード・ブロック(21)に関する第1の回復情報項目(195)と、
    各々が前記基本値からのオフセットとしてのプログラム・カウンタ値を含む1つまたは複数の後続回復情報項目(195)と、
    を含む、請求項13に記載の方法。
  18. 前記目標コード(21)の実行中、前記目標プロセッサ(13)において割り込み信号を受信すると、前記複数の対応する目標命令(214)か、または前記複数の対応する目標命令(214)の1つが出現するまで、前記目標コード(21)の実行を継続するステップと、
    それぞれの前記対応する命令に関連する前記回復情報(195)を取得し、前記正確な対象状態を回復するステップと、
    前記正確な対象状態を使用して、前記割り込みを正確に処理するステップと、
    をさらに備える請求項1に記載の方法。
  19. 対象コード(17)から目標コード(21)へのプログラム・コード変換において例外を正確に処理する方法であって、
    (a)対象プロセッサによって実行可能な前記対象コード(17)を、目標プロセッサ(13)によって実行可能な目標コード(21)に変換するステップと、
    (b)前記目標プロセッサ(13)上で前記目標コード(21)を実行するステップと、を備え、
    前記ステップ(a)が、
    (a1)前記対象コード(17)内において障害を受けやすい命令(174)を識別すること、
    (a2)前記障害を受けやすい対象命令に対応する、1つまたは複数の対応する目標コード命令を生成すること、
    (a3)前記複数の対応する目標命令(214)、または前記複数の対応する目標命令(214)の各々に関連する回復情報(195)を格納すること、
    をさらに含み、
    前記ステップ(b)が、
    (b1)前記複数の対応する目標命令(214)、または前記複数の対応する目標命令(214)の1つに関する例外が生じたとき、前記障害が生じている前記対応する目標命令(214)に関連する前記回復情報(195)を探し出すこと、
    (b2)前記探し出された回復情報(195)に従って、前記対象プロセッサを表現する正確な対象状態に修正する回復ルーチンを実行すること、
    (b3)前記修正された正確な対象状態に関して前記例外を処理するよう例外ハンドラを呼び出すこと、
    をさらに含むことを特徴とする方法。
  20. 対象コード(17)から目標コード(21)へのプログラム・コード変換において例外を正確に処理する方法であって、
    前記対象コード(17)内において潜在的に障害を生じる対象命令に対応する少なくとも1つの対応する目標命令(214)を含む目標コード(21)を生成し、前記少なくとも1つの対応する目標命令(214)に関連する回復情報(195)を格納するステップと、
    割り込みを受信したとき、前記少なくとも1つの対応する目標命令(214)が出現するまで、目標コード命令の実行を継続するステップと、
    前記対応する目標命令(214)に到達したとき、前記関連する回復情報(195)を使用して正確な対象状態を回復するステップと、
    前記回復された正確な対象状態を使用して、前記割り込みを正確に処理するステップと、
    を備えることを特徴とする方法。
  21. 前記割り込みを受信したとき、前記目標コード命令を1つずつ実行することをさらに備える請求項20に記載の方法。
  22. 前記目標プロセッサ(13)における段階的モードを呼び出して前記目標命令を1つずつ実行することをさらに備える、請求項21に記載の方法。
  23. 目標コード・インタプリタ(197)を呼び出して前記目標コード命令を1つずつ実行することをさらに備える、請求項21に記載の方法。
  24. 対象コード(17)から目標コード(21)への動的バイナリ変換において例外を正確に処理する方法であって、
    対象コード命令シーケンスから目標コード命令シーケンスを生成するステップと、
    前記目標コード命令シーケンスを実行するステップと、を備え、
    例外が生じた場合に、正確な対象状態を実現可能な目標コード命令が出現するまで前記目標コード命令シーケンスに沿って処理を進め、前記正確な対象状態を実現可能となるまで前記例外の処理を延期することを特徴とする方法。
  25. 対象コード(17)から目標コード(21)へのプログラム・コード変換を実行するように構成されたトランスレータ装置であって、
    対象命令セット・アーキテクチャに従って対象プロセッサにより実行可能な対象コード(17)を復号化する復号化ユニット(19)と、前記対象コード(17)から前記目標コード(21)を生成する目標コード生成ユニット(192)とを有するトランスレータ・ユニット(19)と、
    目標命令セット・アーキテクチャに従って前記目標コード(21)を実行する目標プロセッサ(13)と、を備え、
    前記復号化ユニット(19)は、前記対象命令セット・アーキテクチャにおいて潜在的に障害を生じる、障害を受けやすい命令(174)を識別するように構成されており、
    前記目標コード生成ユニット(192)は、前記識別された前記障害を受けやすい対象命令から1つまたは複数の対応する目標命令(214)を生成し、前記複数の対応する目標命令(214)かまたは前記複数の対応する目標命令(214)の各々に関連する回復情報(195)を格納するように構成されており、
    当該装置は更に、
    前記目標プロセッサ(13)において前記複数の対応する目標命令(214)のそれぞれを実行しているときに障害が発生すると、前記1つまたは複数の対応する目標命令(214)のそれぞれに関連する前記回復情報(195)を取得し、前記回復情報(195)を使用して正確な対象状態を回復する回復ハンドラ・ユニット(215)と、
    前記正確な対象状態を使用して前記障害を正確に処理する例外処理ユニット(170)とをさらに備える、装置。
  26. 対象コード(17)から目標コード(21)へのプログラム・コード変換を実行するように構成されたトランスレータ装置であって、
    対象プロセッサによって実行可能な前記対象コード(17)を、目標プロセッサ(13)によって実行可能な目標コード(21)に変換するトランスレータ・ユニット(19)と、
    前記目標コード(21)を実行する目標プロセッサ(13)と、を備え、
    前記トランスレータ・ユニット(19)は、前記対象コード(17)内において障害を受けやすい命令(174)を識別し、前記障害を受けやすい対象命令に対応する1つまたは複数の対応する目標コード命令を生成し、前記1つまたは複数の対応する目標命令(214)かまたは前記1つまたは複数の対応する目標命令(214)の各々に関連する回復情報(195)を格納するように構成されており、
    前記目標プロセッサ(13)は、前記目標コード(21)を実行し、前記1つまたは複数の対応する目標命令(214)の各々に関して例外が生じたとき、前記対応する目標命令(214)のそれぞれに関連する前記回復情報(195)を探し出し、前記探し出された回復情報(195)に従って、前記対象プロセッサを表現する正確な対象状態を修正する回復ルーチンを実行し、例外ハンドラ(170)を呼び出して、前記修正された正確な対象状態に関して前記例外を処理することを特徴とする装置。
  27. 対象コード(17)から目標コード(21)へのプログラム・コード変換を実行するように構成されたトランスレータ装置であって、
    対象プロセッサによって実行可能な前記対象コード(17)を、目標プロセッサ(13)によって実行可能な目標コード(21)に変換するトランスレータ・ユニット(19)と、
    前記目標コード(21)を実行する目標プロセッサ(13)と、を備え、
    前記トランスレータ・ユニット(19)は、前記対象コード(17)内において潜在的に障害を生じる対象命令に対応する少なくとも1つの対応する目標命令(214)を含む前記目標コード(21)を生成し、前記少なくとも1つの対応する目標命令(214)に関連する回復情報(195)を格納するように構成されており、
    前記目標プロセッサ(13)は、前記目標コード(21)を実行するように構成されており、かつ、割り込みを受信すると、前記少なくとも1つの対応する目標命令(214)が出現するまで目標コード命令の実行を継続するように構成されており、
    当該装置は更に、
    前記少なくとも1つの対応する目標命令(214)が前記目標プロセッサ(13)によって検出されたとき、前記関連する回復情報(195)を使用して正確な対象状態を回復する回復ハンドラと、
    前記回復された正確な対象状態を使用して前記割り込みを処理する変換済対象例外ハンドラ(270)と、
    をさらに備える、装置。
  28. 対象コード(17)から目標コード(21)へのプログラム・コード変換を実行するように構成されたトランスレータ装置であって、
    対象コード命令シーケンスから目標コード命令シーケンスを生成するトランスレータ・ユニット(19)と、
    前記目標コード命令シーケンスを実行する目標プロセッサ(13)と、を備え、
    前記目標プロセッサ(13)は、前記目標コード命令シーケンスを実行するように構成されており、かつ、例外が生じると、正確な対象状態を実現可能な目標コード命令が出現するまで前記目標コード命令シーケンスに沿って実行処理を続け、前記正確な対象状態を実現可能な目標コード命令が出現した時点で、例外ハンドラ(170)を呼び出して、前記正確な対象状態を使用して前記例外を処理するように構成されていることを特徴とする装置。
  29. 請求項1乃至請求項24のいずれかに記載の方法を実現するようにコンピュータによって実行可能な命令が記録されたコンピュータ可読媒体。
JP2008507146A 2005-04-20 2006-04-07 プログラム・コード変換において例外を正確に処理するための方法、並びにその装置及びコンピュータ・プログラム Active JP5182815B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB0507943.9 2005-04-20
GB0507943A GB2425372B (en) 2005-04-20 2005-04-20 Method and apparatus for precise handling of exceptions during program code conversion
US11/272,882 US8020154B2 (en) 2005-04-20 2005-11-14 Precise handling of exceptions during program code conversion
US11/272,882 2005-11-14
PCT/GB2006/001268 WO2006111705A2 (en) 2005-04-20 2006-04-07 Method and apparatus for precise handling of exceptions during program code conversion

Publications (2)

Publication Number Publication Date
JP2008537245A true JP2008537245A (ja) 2008-09-11
JP5182815B2 JP5182815B2 (ja) 2013-04-17

Family

ID=34630958

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008507146A Active JP5182815B2 (ja) 2005-04-20 2006-04-07 プログラム・コード変換において例外を正確に処理するための方法、並びにその装置及びコンピュータ・プログラム

Country Status (7)

Country Link
US (1) US8020154B2 (ja)
JP (1) JP5182815B2 (ja)
CN (1) CN101164041B (ja)
GB (1) GB2425372B (ja)
HK (1) HK1091003A1 (ja)
IL (1) IL186161A (ja)
TW (1) TWI482094B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9733990B2 (en) 2013-03-29 2017-08-15 Fujitsu Limited Information processing system and program migration method

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
US7757221B2 (en) * 2005-09-30 2010-07-13 Intel Corporation Apparatus and method for dynamic binary translator to support precise exceptions with minimal optimization constraints
US20070294675A1 (en) * 2006-06-20 2007-12-20 Transitive Limited Method and apparatus for handling exceptions during binding to native code
US20080052691A1 (en) * 2006-06-29 2008-02-28 Naveen Neelakantam Communicating with and recovering state information from a dynamic translator
US9658849B2 (en) * 2006-07-06 2017-05-23 Imperas Software Ltd. Processor simulation environment
GB2448523B (en) * 2007-04-19 2009-06-17 Transitive Ltd Apparatus and method for handling exception signals in a computing system
JP4661854B2 (ja) * 2007-11-09 2011-03-30 株式会社デンソー 検査システム及びプログラム
GB0813833D0 (en) * 2008-07-29 2008-09-03 Transitive Ltd Apparatus and method for handling page protection faults in a computing system
US10346199B2 (en) 2009-04-10 2019-07-09 Microsoft Technology Licensing, Llc Handling exceptions related to corrupt application state
US8645758B2 (en) * 2010-04-29 2014-02-04 International Business Machines Corporation Determining page faulting behavior of a memory operation
US9098355B2 (en) 2012-01-06 2015-08-04 Intel Corporation Method and apparatus for substituting compiler built-in helper functions with machine instructions
CN103077073B (zh) * 2013-01-15 2016-12-28 华为技术有限公司 即时功能级仿真器的实现方法和装置及仿真处理器
CN103699427B (zh) * 2013-12-13 2018-01-16 华为技术有限公司 一种基于jit仿真器的中断检测方法及系统
EP3258378B1 (en) 2016-06-14 2022-05-04 Qoitech AB Measurement coordination by monitoring of program code execution
US10261785B2 (en) * 2017-02-28 2019-04-16 Microsoft Technology Licensing, Llc Arithmetic lazy flags representation for emulation
TWI660307B (zh) * 2017-06-09 2019-05-21 國立交通大學 二元碼轉譯裝置及方法
DE102018122920A1 (de) * 2018-09-19 2020-03-19 Endress+Hauser Conducta Gmbh+Co. Kg Verfahren zur Installation eines Programms auf einem eingebetteten System, ein eingebettetes System für ein derartiges Verfahren sowie ein Verfahren zur Erstellung einer Zusatzinformation
CN111382429B (zh) * 2018-12-27 2022-12-27 华为技术有限公司 指令的执行方法、装置及存储介质
CN111708680A (zh) * 2020-06-12 2020-09-25 北京字节跳动网络技术有限公司 报错信息解析方法、装置、电子设备及存储介质
CN118051362A (zh) * 2022-11-16 2024-05-17 瑞昱半导体股份有限公司 任务异常侦错系统及嵌入式设备侦错方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0734178B2 (ja) * 1991-03-07 1995-04-12 ディジタル イクイプメント コーポレイション 変換コードを実行するための効果的エラー報告
JP2000322269A (ja) * 1999-05-10 2000-11-24 Nec Software Hokuriku Ltd エミュレーションシステム
WO2005006106A2 (en) * 2003-07-04 2005-01-20 Transitive Limited Method and apparatus for performing adjustable precision exception handling

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5787241A (en) * 1995-12-18 1998-07-28 Integrated Device Technology, Inc. Method and apparatus for locating exception correction routines
US5832205A (en) * 1996-08-20 1998-11-03 Transmeta Corporation Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed
US6161219A (en) * 1997-07-03 2000-12-12 The University Of Iowa Research Foundation System and method for providing checkpointing with precompile directives and supporting software to produce checkpoints, independent of environment constraints
US6256753B1 (en) * 1998-06-30 2001-07-03 Sun Microsystems, Inc. Bus error handling in a computer system
DE69924857T2 (de) 1998-10-10 2006-03-02 Transitive Ltd., Hanging Ditch Programm-kode-umwandlung
US7065750B2 (en) * 1999-02-17 2006-06-20 Elbrus International Method and apparatus for preserving precise exceptions in binary translated code
US6446197B1 (en) * 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US6990658B1 (en) * 1999-10-13 2006-01-24 Transmeta Corporation Method for translating instructions in a speculative microprocessor featuring committing state
US6895460B2 (en) * 2002-07-19 2005-05-17 Hewlett-Packard Development Company, L.P. Synchronization of asynchronous emulated interrupts

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0734178B2 (ja) * 1991-03-07 1995-04-12 ディジタル イクイプメント コーポレイション 変換コードを実行するための効果的エラー報告
EP0772122A2 (en) * 1991-03-07 1997-05-07 Digital Equipment Corporation Method for translating a first program code to a second program code and a system for executing a second program code
JP2000322269A (ja) * 1999-05-10 2000-11-24 Nec Software Hokuriku Ltd エミュレーションシステム
WO2005006106A2 (en) * 2003-07-04 2005-01-20 Transitive Limited Method and apparatus for performing adjustable precision exception handling

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9733990B2 (en) 2013-03-29 2017-08-15 Fujitsu Limited Information processing system and program migration method

Also Published As

Publication number Publication date
US8020154B2 (en) 2011-09-13
CN101164041B (zh) 2012-08-01
TW200710731A (en) 2007-03-16
TWI482094B (zh) 2015-04-21
GB0507943D0 (en) 2005-05-25
HK1091003A1 (en) 2007-01-05
IL186161A (en) 2013-03-24
US20060253691A1 (en) 2006-11-09
CN101164041A (zh) 2008-04-16
GB2425372A (en) 2006-10-25
JP5182815B2 (ja) 2013-04-17
GB2425372B (en) 2007-06-13
IL186161A0 (en) 2008-01-20

Similar Documents

Publication Publication Date Title
JP5182815B2 (ja) プログラム・コード変換において例外を正確に処理するための方法、並びにその装置及びコンピュータ・プログラム
US11347489B2 (en) Accessing a migrated member in an updated type
EP2324424B1 (en) Apparatus and method for handling page protection faults in a computing system
US20070294675A1 (en) Method and apparatus for handling exceptions during binding to native code
JP5077605B2 (ja) コンピュータ・システムにおいて例外信号を処理するための装置及び方法
US8196120B2 (en) Computer emulator employing direct execution of compiled functions
JP5284585B2 (ja) トランスレータによって対象プログラム・コードを目的コードにトランスレーションしながら、目的コードを実行する間に直面する例外を処理する方法並びにそのトランスレータ装置及びコンピュータ・プログラム
JP2008546086A (ja) 共有リソースのためのアクセス協調を伴うプログラムコードを変換する方法および装置
WO2012010419A1 (en) A string cache file for optimizing memory usage in a java virtual machine
KR101244069B1 (ko) 프로그램 코드 변환시 정밀한 예외 핸들링을 위한 방법 및장치
US7596780B2 (en) System and method for virtual catching of an exception
US8286144B2 (en) Administering a process filesystem with respect to program code conversion
Gschwind Method for the deferred materialization of condition code information
Aksenov et al. Execution of nvram programs with persistent stack
Paul et al. A Generic Operating System Kernel

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090406

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

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120315

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120315

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120824

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20121101

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121101

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

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20121218

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20121218

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130109

R150 Certificate of patent or registration of utility model

Ref document number: 5182815

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

Year of fee payment: 3