(57)【要約】対象（コード１７）を目的（コード２１）にトランスレーションする間に直面する例外を、直面する例外の特定の形式に依存して正確度のレベルを変えて処理するための、調整可能な正確度の例外処理技法が提供される。トランスレータ（１９）が例外信号を検出すると、対象プロセッサの状態が、検出された例外に対して十分であると判断される正確度で捕捉される。
2007525737.tif 000002
【特許請求の範囲】
【請求項１】
対象プログラム・コード（１７）を目的コード（２１）にトランスレーションする間に直面する例外を処理する方法であって、
例外の発生を検出すること、
前記検出された例外に対して必要とされる対象コンテキスト正確度のレベルを、正確度の複数の可能なレベルから選択すること、
信号ハンドラ（２２）を呼び出して、前記選択された正確度のレベルを用いて、前記検出された例外を処理すること、
を備える方法。
【請求項２】
請求項１に記載の方法において、前記例外の発生を検出するステップは、前記対象プログラム・コード（１７）のトランスレーションの間に例外信号の発生を検出することを含む、方法。
【請求項３】
請求項２に記載の方法において、前記トランスレーションによって生成される目的コード（２１）が、プロキシ信号ハンドラ（１２５）を呼び出して、前記検出された例外を処理する、方法。
【請求項４】
請求項１、２、または３に記載の方法において、前記例外の発生を検出するステップは、目的コード（２１）の実行の間に例外信号の発生を検出することを含む、方法。
【請求項５】
請求項４に記載の方法において、目的オペレーティング・システムが、プロキシ信号ハンドラ（１２５）を呼び出して、前記検出された例外を処理する、方法。
【請求項６】
請求項１〜５のいずれか一項に記載の方法において、対象コンテキスト正確度のデフォルト・レベルが、最新の既知のスタック・フレームである、方法。
【請求項７】
請求項６に記載の方法において、前記最新の既知のスタック・フレームは、最新の既知のスタック・ポインタ値、ベース・ポインタ値、およびプログラム・カウンタ・レジスタ値を含む、方法。
【請求項８】
請求項７に記載の方法において、前記対象コンテキスト正確度のデフォルト・レベルは、対象レジスタ値の修正を必要としない、方法。
【請求項９】
請求項１〜８のいずれか一項に記載の方法において、対象コンテキスト正確度の前記可能なレベルのうちの１つは、対象状態なしである、方法。
【請求項１０】
請求項１〜９のいずれか一項に記載の方法において、対象コンテキスト正確度の前記可能なレベルのうちの１つは、正確なプログラム・カウンタ値を含む正確なプログラム・カウンタ状態である、方法。
【請求項１１】
請求項１〜１０のいずれか一項に記載の方法において、対象コンテキスト正確度の前記可能なレベルのうちの１つは、修正された対象レジスタと正確なプログラム・カウンタ値とを含む正確な対象レジスタ状態である、方法。
【請求項１２】
トランスレータ（１９）を用いて対象コードを目的コード（２１）にトランスレートするトランスレーション・システムにおいて対象コード例外を処理する方法であって、
目的コンテキストを生成するステップと、
前記目的コンテキストを用いて対象コンテキストを再構築することにより、再構築された対象コンテキストを生成するステップと、
前記再構築された対象コンテキストを用いて、特定の前記例外に付随する対象信号ハンドラのトランスレート済みバージョンを実行するステップと、
を備える方法。
【請求項１３】
請求項１２に記載の方法において、前記対象コンテキストを再構築するステップは、全体の対象プロセッサ状態よりも少なく再構築することを含む、方法。
【請求項１４】
請求項１２または１３に記載の方法において、前記対象コンテキストを再構築するステップは、前記例外を処理するために複数の対象コンテキスト正確度レベルのうちの１つを選択することを含む、方法。
【請求項１５】
請求項１４に記載の方法において、前記対象正確度のレベルが、前記トランスレート済み対象信号ハンドラに送られる対象状態がないゼロ・レベルである、方法。
【請求項１６】
請求項１４または１５に記載の方法において、前記レベルが、前記トランスレート済み対象信号ハンドラに最新の既知のスタック・フレームのみが送られるレベルである、方法。
【請求項１７】
請求項１４、１５、または１６に記載の方法において、前記レベルが、前記トランスレート済み対象信号ハンドラに正確なプログラム・カウンタ値のみが送られるレベルである、方法。
【請求項１８】
請求項１４、１５、１６、または１７に記載の方法において、前記正確度のレベルが、前記トランスレート済み対象信号ハンドラに正確な対象コンテキストが送られるレベルである、方法。
【請求項１９】
請求項１４、１５、１６、１７、または１８に記載の方法において、前記対象コンテキストを再構築するステップが、プロキシ信号ハンドラ・コードによって行なわれる、方法。
【請求項２０】
請求項１９に記載の方法において、前記プロキシ信号ハンドラ・コードが、前記トランスレータ（１９）によって前記目的コード（２１）に登録され、前記トランスレータ（１９）はさらに、前記特定の例外に応答して前記複数の対象コンテキスト正確度レベルのうちのどれを用いるべきかを表示するフラッグを、前記プロキシ信号ハンドラ（１２５）に対して示す、方法。
【請求項２１】
請求項１９または２０に記載の方法において、前記特定の例外は、前記トランスレータ（１９）による対象コードのデコーディングの間に検出される、方法。
【請求項２２】
請求項２１に記載の方法において、前記トランスレータ（１９）が、デコーディングの間の前記特定の例外の検出に応答して、前記目的コンテキストを生成するとともに、前記プロキシ信号ハンドラ・コードの動作を呼び出す目的コード（２１）を、プラントする、方法。
【請求項２３】
請求項１９〜２２のいずれか一項に記載の方法において、前記特定の例外は、前記目的コード（２１）の実行の間に生じる、方法。
【請求項２４】
請求項２３に記載の方法において、目的オペレーティング・システムが、前記目的コード（２１）の実行の間の前記特定の例外の発生に応答して、前記プロキシ信号ハンドラ・コードに目的コンテキストを送る、方法。
【請求項２５】
請求項２４に記載の方法において、前記目的コンテキストを受け取った後に、前記プロキシ信号ハンドラ・コードが、前記トランスレータ（１９）をコールし、次に、前記トランスレータ（１９）が、選択されたトランスレート済み対象信号ハンドラを呼び出す、方法。
【請求項２６】
請求項１４〜２５のいずれか一項に記載の方法において、前記例外が、複数の非同期の外部イベントのうちの１つによって生じ、前記例外が、すべての非同期イベントに割り当てられた正確度の選択されたデフォルト・レベルを用いて処理される、方法。
【請求項２７】
請求項２６に記載の方法において、前記選択されたデフォルト・レベルは、最新の既知のスタック・フレームである、方法。
【請求項２８】
請求項１９〜２７のいずれか一項に記載の方法において、前記プロキシ信号ハンドラ・コードは、対象レジスタ・バンクと相互作用するように構成されている、方法。
【請求項２９】
請求項１〜２８のいずれか一項に記載の方法を行なうように構成されているトランスレータ装置。
【請求項３０】
請求項１〜２８のいずれか一項に記載の方法を行なうためのコンピュータによって実施可能な命令が記録されているコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータおよびコンピュータ・ソフトウェアの分野に関し、より詳細には、たとえば、例外信号に直面するコード・トランスレータ、エミュレータ、およびアクセラレータにおいて有用なプログラム・コード変換方法および装置に関する。
【背景技術】
【０００２】
例外とは、プログラムにおける正常な制御フローを変化させる状態のことである。例外は、ハードウェアによって生成される（「もたらされる（raised）」）こともあるし、ソフトウェアによって生成されることもある。ハードウェア例外としては、リセット、割り込みなどの信号、またはメモリ管理ユニットからの信号が挙げられる。例外は、算術論理ユニットまたは浮動小数点ユニットによって、数値エラーたとえばゼロ除算の場合に、オーバー・フローまたはアンダフローの場合に、あるいは命令デコーディング・エラーたとえば特権命令、予約命令、トラップ命令、もしくは未定義命令の場合に、生成される。ソフトウェア例外は、種々のソフトウェア・プログラムに渡ってそれぞれ変化し、プログラムの正常な動作を変えるどんな種類のエラー・チェックに対しても適用可能である。例外ハンドラは、プログラムの実行の間に例外が起きるとコールされる特別なコードである。所定の例外に対するハンドラがプログラムから得られない場合には、デフォルトのシステム例外ハンドラが呼ばれる。その結果、通常は、実行中のプログラムが途中停止されて、エラー表示が返される。
【０００３】
例外信号は、多くのオペレーティング・システム上で例外をもたらすためのメカニズムとして良く知られている。多くのオペレーティング・システム、特にＵｎｉｘ（登録商標）タイプのシステムは、ＰＯＳＩＸ規格に準拠する。ＰＯＳＩＸ規格では、このメカニズムの動作方法が指定されているため、例外信号は、多くのシステムに渡って大体同様である。例外をトリガするもっとも良く知られたイベントは、プログラムによって実施されるプロセスが、（ｉ）マッピングされてないメモリ領域へのアクセスを試みるか、あるいは（ｉｉ）正式な許可を持っていないメモリ領域の操作を試みる場合である。例外信号をトリガする他の良く知られたイベントは、（ｉｉｉ）他のプロセスから送られる信号を受け取ること、（ｉｖ）プロセスが実行の特権レベルを持っていない命令をプロセスが実行すること、あるいは（ｖ）ハードウェアにおけるＩ／Ｏイベントである。
【０００４】
実行中のプログラムが割り込みを受けるために、オペレーティング・システムが例外信号を例外ハンドラに送ると、普通は、例外が起きたときの対象（subject ）プロセッサの状態が捕捉される。この状態は、判断が非常に難しいだけでなく、生成に費用がかかる可能性がある。これらのコストを回避するために、一般的に好ましいのは、より良好な代替案がない場合を除いて、例外を出すことを意図的に回避することである。
【０００５】
表１に、ある特定のイベントを規定するためにオペレーティング・システムが出す代表的な例外信号のいくつかを記載する。
【０００６】
【表１】
2007525737.tif 000003
例外信号は２つの供給源に由来する可能性がある：（１）直接に対象プログラムから、あるいは（２）オペレーティング・システムまたは他のプロセスからである。いくつかの例外信号は、対象プログラムが実行する命令の直接的な結果として生成される。たとえば、対象プログラムが違法のｏｐｃｏｄｅを実行すると、ＳＩＧＩＬＬがもたらされる。同様に、対象プログラムが、違法のメモリ・アクセスを試みると、ＳＩＧＳＥＧＶがもたらされる。これらは帯域内信号と言われる。また例外信号は、外部によって生成される可能性もあり、これは、オペレーティング・システムによって、あるいは他のプロセスによって行なわれる。ＳＩＧＨＵＰおよびＳＩＧＡＬＲＭは、これらの例である。これらの外部で生成される例外信号は、帯域外信号と呼ばれる。
【０００７】
対象プログラムの観点からすると、例外信号は、任意の時間に発生する可能性がある。例外信号が発生すると、オペレーティング・システムは、信号が送られたプログラムの実行に割り込みをかけて、信号ハンドラ機能を呼び出す。オペレーティング・システムには、各信号を特定の信号ハンドラにマッピングするプロセス特定的な機能表が保持されている。またオペレーティング・システムは、すべての例外に対するデフォルトの信号ハンドラを規定している。デフォルトの信号ハンドラは、所定の動作を取るかまたは単に信号を無視する。
【０００８】
たとえば、Ｕｎｉｘでは、プログラムは、ｓｉｇａｃｔｉｏｎ（）システム・コールを呼び出すことによって、デフォルトの信号ハンドラをオーバーライドすることができる。Ｓｉｇａｃｔｉｏｎ（）によって、プログラムは、特定の例外信号を受け取ったときにどの動作をオペレーティング・システムが取るべきかを、指定することができる。動作としては以下のものがあり得る。（１）例外信号を無視する、（２）デフォルトの信号ハンドラをコールする、あるいは（３）特化された信号ハンドラ機能（アドレスはプログラムから与えられる）をコールする。ｓｉｇａｃｔｉｏｎ（）コールを行なうときに指定可能な他のオプションとしては、信号ハンドラの実行の間に、ＣＰＵが特定の割り込みを隠すことができるのとほぼ同じ方法で他の信号のどれをブロックするのか、が挙げられる。
【０００９】
Ｕｎｉｘ信号ハンドラには、２つのプロトタイプの一方を与えることができる。第１の信号ハンドラ・プロトタイプは、「ボイドｓｉｇＨａｎｄｌｅｒ（ｉｎｔｓｉｇＮｕｍ）」である。第１の引数は、例外信号の数であるため、１つの機能を、複数の信号を処理するように登録することができる。プログラムは、ＳＡ＿ＳＩＧＩＮＦＯフラッグを用いてｓｉｇａｃｔｉｏｎ（）をコールすることによって、より多くの情報を信号ハンドラに与えるように、要求することができる。この場合、Ｕｎｉｘ信号ハンドラ・プロトタイプは、「ボイドｓｉｇＨａｎｄｌｅｒ（ｉｎｔｓｉｇＮｕｍ、ｓｉｇＩｎｆｏ＿ｔ、ボイド＊コンテキスト）」になる。
【００１０】
第２のパラメータ（「ｓｉｇｉｎｆｏ」）は、信号についての情報を含む構造であり、信号が生じた原因および信号の出所についての何らかの表示を含んでいる。たとえばＳＩＧＩＬＬ信号の場合、ｓｉｇｉｎｆｏ構造には、違法命令のアドレスが含まれている。このデータは、プロセスが信号を適切に処理できるためには、不可欠であり得る。第３のパラメータ（「コンテキスト」）は、信号がもたらされたときのプロセッサ状態（すべての対象レジスタを含む）に対するアクセスを与える。この場合もやはり、このデータは、信号の正しい処理を可能にするためには、不可欠であり得る。信号ハンドラは、このコンテキストを変更することが許されている。実行が再開されると、対象レジスタは、変更後のコンテキストの値に戻される。
【００１１】
組込型および非組込型ＣＰＵの両方において、主流的な命令セット・アーキテクチャ（ＩＳＡ：Instruction Set Architecture）に対して、大量のソフトウェアが存在する。これらのソフトウェアは、性能を上げるために「アクセラレート」することもできるし、より優れたコスト・パフォーマンスの利点を示す無数の高性能なプロセッサに対して「トランスレート」することもできる。ただしこのようなプロセッサは、関連するソフトウェアに透過的にアクセスできなければならない。また、主流的なＣＰＵアーキテクチャも、そのＩＳＡに歩調を合わせなければならないため、性能または市場の範囲を発展させることができない。このようなアーキテクチャには、「複合ＣＰＵ（Synthetic CPU ）」共通アーキテクチャが有用であろう。
【００１２】
前述のアクセラレーション、トランスレーション、および共通アーキテクチャ能力を促進するプログラム・コード変換方法および装置が、たとえば同時継続中の特許出願ＧＢ０３０９０５６．０（２００３年４月２２日出願）、発明の名称「プログラム・コード変換に対するブロック・トランスレーション最適化（Block Translation Optimization for Program Code Conversion）」において扱われている。なお、この文献の開示は本明細書において参照により取り入れられている。例外処理は、プログラム・コード変換の過程において直面することがある多くの対象プログラムの１つの属性である。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明によれば、添付の請求項で述べるような装置および方法が提供される。本発明の好ましい特徴は、従属請求項および以下の説明から明らかとなる。
【課題を解決するための手段】
【００１４】
以下は、本発明による種々の実施形態による実現可能な種々の態様および優位性の概要である。この概要は、当業者が、後に続く詳細な構成の説明を迅速に理解するための助けとなる導入部として設けられている。概要は、添付の請求項の範囲を限定するものではなく、また決して限定することは意図されていない。
【００１５】
詳細には、発明者は、プログラム・コード変換の促進に向けた方法を開発した。この方法は、対象プログラム・コードの目的（target）コードへのトランスレーションを用いる実行時トランスレータと共に用いると、特に有用である。以下の説明の一態様によれば、トランスレート済み対象コードの実行の間に直面する例外を、直面する例外の特定の形式に依存して正確度のレベルを変えて処理するための、調整可能な正確度の例外処理技法が提供される。トランスレータが例外信号を検出すると、対象プロセッサの状態が、検出された例外と対象プログラムの対応する信号処理動作とに対して十分であると判断される正確度のレベルで捕捉される。
【００１６】
添付の図面は、本明細書に取り入れられて本明細書の一部を構成しているが、現時点で好ましい実施を例示するものであり、後述するように説明される。
【発明を実施するための最良の形態】
【００１７】
図１に、後述する種々の新しい特徴を実施するための例示的な装置を示す。図１は特に、目的レジスタ１５をメモリ１８と共に含む目的プロセッサ１３を例示している。メモリ１８には、多くのソフトウェア・コンポーネント１７，１９，２０，２１，２２が記憶されている。ソフトウェア・コンポーネントには、トランスレートすべき対象コード１７、オペレーティング・システム２０、トランスレータ・コード１９、およびトランスレート済みコード２１が含まれている。トランスレータ・コード１９は、たとえば、特定のＩＳＡの対象コードをトランスレートして別のＩＳＡのトランスレート済みコードにするエミュレータとして機能しても良いし、対象コードをトランスレートしてトランスレート済みコード（それぞれ同じＩＳＡ）にするためのアクセラレータとして機能しても良い。
【００１８】
トランスレータ１９には、可変正確度の例外処理メカニズム２２が含まれている。可変正確度の例外処理メカニズム２２には、プロキシ信号ハンドラ１２５が含まれている。後述するように、メカニズム２２は、プロキシ信号ハンドラ１２５を、例外処理を目的として目的コード２１に登録する。またトランスレータ１９は、例外信号処理を目的として、トランスレート済み対象信号ハンドラ１２７を生成しても良い。
【００１９】
トランスレータ１９、すなわちトランスレータを実施するソース・コードのコンパイルされたバージョンと、トランスレート済みコード２１、すなわちトランスレータ１９によって生成された対象コード１７のトランスレーションとは、目的プロセッサ１３（通常は、マイクロプロセッサまたは他の適切なコンピュータ）上で実行されるオペレーティング・システム２０（たとえばＵｎｉｘ）とともに実行される。図１に例示した構造は単に典型であること、およびたとえば本発明によるソフトウェア、方法、およびプロセスは、オペレーティング・システム内にまたはその下に存在するコードにおいて実施しても良いことが理解される。対象コード、トランスレータ・コード、オペレーティング・システム、および記憶メカニズムはそれぞれ、多種多様な形式のいかなるものであっても良く、これは当業者に知られていることである。
【００２０】
図１の例示的な実施形態による装置の全体動作において、プログラム・コード変換は好ましくは、実行時に、トランスレート済みコード２１が実行されている間に動的に行なわれる。トランスレータ１９は、トランスレート済みプログラム２１に合わせて動く。対象コード１７が例外信号ハンドラを登録している場合には、トランスレータ１９は、その例外信号ハンドラをトランスレートして、実行することを、対応する例外信号を受け取ったときに行なうように、構成されている。そのように行なう際、トランスレータ１９は、対象コード１７の個々のトランスレート部分のうちどれを、個々の例外信号を受け取ったときに実行するのかを把握することによって、対象オペレーティング・システムのセマンティクスを正しくエミュレートするように構成されている。加えて、同じ例外信号が、異なるアーキテクチャ上では異なる信号数を有していても良いため、エミュレーションは、信号数のトランスレーションを含んでいても良い。トランスレータ１９は、さらに好ましくは、対象コード１７をデコードの間に対象プログラムの例外を検出するように動作可能である。このような場合、トランスレータ１９は、次に、実際の例外信号をもたらすのではなくて、適切な時間に適切な対象信号ハンドラを単に呼び出しても良い。
【００２１】
トランスレータ１９はさらに、ｓｉｇｉｎｆｏデータ構造を、そのデータ構造が対象信号ハンドラによって用いられるならば、ポピュレートする。同様に、トランスレータ１９は、ｓｉｇｃｏｎｔｅｘｔデータ構造を、そのデータ構造が対象信号ハンドラによって用いられるならば、ポピュレートする。前述したように、ｓｉｇｃｏｎｔｅｘｔデータ構造には、例外信号のときの対象プロセッサ状態のスナップショットが含まれている。いくつかの信号（たとえばＳＩＧＳＥＧＶ）については、ほとんどすべての命令がこれらをもたらすことができるため、ｓｉｇｃｏｎｔｅｘｔ構造をポピュレートする場合には、トランスレータ１９が、対象コード１７のブロック内の任意の点から全体の対象プロセッサ状態を正しく再生成できる必要がある。全体の対象プロセッサ状態を再現する能力は、「正確度例外処理」と呼ばれる。動的なトランスレータが、著しく性能を損失することなく正確度例外処理をサポートすることは、非常に難しい。
【００２２】
前述したように、対象コード１７が例外信号ハンドラを登録している場合には、トランスレータ１９は、その信号ハンドラのセマンティクスをエミュレートするように構成されている。ほとんどの場合、対象コードの例外信号ハンドラは、目的アーキテクチャ上で実行することはできず、目的例外信号に対応していない。この非互換性に適応するために、トランスレータ１９には、プロキシ信号ハンドラ１２５が含まれている。プロキシ信号ハンドラ１２５は、たとえば対象システム・ハンドラに対するシステム・コールが、対象プログラムにおいて検出されるときに、トランスレータ１９によって目的プログラム２１内に登録される。
【００２３】
プロキシ信号ハンドラ１２５は、目的オペレーティング・システム２０によって呼び出されて、目的オペレーティング・システム２０からの信号を遮断し、またトランスレート済み信号ハンドラ１２７が必要とする適切な対象コンテキストを構築する。そしてプロキシ信号ハンドラ１２５は、トランスレータ１９をコールする。そしてトランスレータ１９は、適切な（トランスレート済み）対象信号ハンドラを呼び出す。
【００２４】
あるいは、トランスレータ１９が、デコード時に、特定の対象コード命令が例外信号をもたらすことを検出する場合には、トランスレータ１９は、目的コンテキスト（１３３、図５）を構築する目的コードをプラントして、プロキシ信号ハンドラ１２５を直接呼び出す。この場合も、対象状態は、プロキシ信号ハンドラ１２５によって、複数の供給源を用いて再現される。複数の供給源には、トランスレータ１９が保持する対象プロセッサ状態とプロキシ・ハンドラ１２５に送られる目的プロセッサ状態（１３３）との表現が含まれる。これについては、以下でさらに説明する。この「デコード時に検出する」アプローチによって、目的オペレーティング・システム２０が実際の例外信号をもたらすことが防がれ、したがって動作が簡単になる。
【００２５】
図２に示すのは、プログラムがその対象アーキテクチャ上で実行されているときに行なわれる信号処理の制御フローである。図３に示すのは、本実施形態の目的オペレーティング・システム信号処理メカニズムを用いた、トランスレート済みプログラムに対する信号処理である。
【００２６】
図２の信号処理シナリオでは、信号処理が始まるのは、対象プログラム１０１が例外信号１１１をもたらすときである。例外信号１１１によって、制御がオペレーティング・システム１０３に移される。オペレーティング・システム１０３は、例外信号１１１が発生したときの対象プロセッサの状態を反映するコンテキスト構造１１３を構築する。次に、コンテキスト構造は、特定の例外信号１１１に対して登録された信号ハンドラ１０５に送られる。信号ハンドラ１０５がその動作を終了するときに、コンテキスト構造１１３’が、オペレーティング・システム１０３に戻される。次に、オペレーティング・システム１０３は、コンテキスト１１３’からプロセッサ状態を復元して、制御をプログラム１０１に戻す。信号ハンドラ１０５が起こす、コンテキスト構造１１３（たとえば、レジスタ値）に対するいかなる変化も、プログラム１０１が実行を再開するときに、プロセッサ状態に反映される。図２では、コンテキスト構造の記号「１１３」の末尾のアポストロフィは、コンテキスト構造のコンテンツが変更されている場合があることを示す。
【００２７】
図３に例示するのは、目的プロセッサ１３が実行するトランスレート済みプログラム２１における、例外信号処理メカニズム２２を用いた信号処理の制御フローである。信号処理をエミュレートするために、トランスレータ１９は最初に、トランスレート済みプログラム１２１に対してプロキシ信号ハンドラ機能１２５を登録する。トランスレート済みプログラム１２１において例外信号１３１が発生すると、目的オペレーティング・システム２０は、プロキシ信号ハンドラ１２５を呼び出して、それに目的コンテキスト１３３を送る。プロキシ信号ハンドラ１２５では、目的コンテキスト１３３および対象レジスタ・バンク１４１を用いて、対象コンテキスト１３５を構築する。
【００２８】
次に、トランスレータ１９は、対応する対象プログラム信号ハンドラ１２７を識別し、トランスレートし、実行することを、再構築された対象状態１３５を用いて行なう。特に、例示的な実施形態においては、トランスレータ１９は、ハンドラ１２７の対象状態を調整して、ハンドラ１２７が実行を開始したときに、そのパラメータが、再構築された対象状態１３５を指し示すようにする。対象信号ハンドラ１２７がその動作を終了するときに、対象コンテキスト１３５’がプロキシ信号ハンドラ１２５に戻される。プロキシ信号ハンドラ１２５は、その動作を終了すると、目的コンテキスト１３３’を目的オペレーティング・システム２０に戻す。次に、目的オペレーティング・システム２０は、目的コンテキスト１３３’を用いて目的プロセッサ状態を復元し、トランスレート済み対象コード１２１の実行を再開する。
【００２９】
対象レジスタ・バンク１４１（その他の場合にはグローバル・レジスタ記憶装置と言われる）は、抽象レジスタに対するリポジトリであるメモリ領域である。抽象レジスタはそれぞれ、特定の対象レジスタまたは他のアーキテクチャ特徴の値に対応し、これをエミュレートする。トランスレート済みコード２１の実行の間には、対象レジスタ・バンク１４１または目的レジスタ１５（図１）に、抽象レジスタ値が、代わりに記憶される。トランスレート済みコード２１の実行の間には、抽象レジスタは、命令に関与しても良いように、目的レジスタ１５に一時的に保持される。対象レジスタ値は、目的レジスタ１５に保持されていないときには、対象レジスタ・バンク１４１に保存される。たとえば、対象コードの特定のブロックに対するレジスタ割り当てが、対象レジスタ値をスピルすること（すなわち、目的レジスタを解放するためにメモリに保存すること）を必要とする場合には、その特定の対象レジスタに対応する対象レジスタ・バンク１４１内の予約箇所に、値をスピルする。同様に、対象コードの各ブロックの終わりに、すべての対象レジスタ値を対象レジスタ・バンク１４１に戻して保存する。何故なら、目的レジスタ値は、連続的なブロック間に上書きしても良いからである。対象レジスタ・バンク１４１またはグローバル・レジスタ記憶装置の形成および使用に付随する種々の特徴が、前述の同時継続中の特許出願ＧＢ０３０９０５６．０（２００３年４月２２日出願）、発明の名称「プログラム・コード変換に対するブロック・トランスレーション最適化」に詳細に説明されている。  トランスレート済み対象信号ハンドラ１２７が対象コンテキスト１３５を変更している場合には、プロキシ信号ハンドラ１２５は、変更された値を対象レジスタ・バンク１４１に保存する。図３では、対象コンテキストの記号「１３５’」の末尾のアポストロフィは、コンテントが変更されている場合があることを示す。例外信号がもたらされたときに、それらの対象レジスタ値のいずれかが目的レジスタ内で生存していたならば、プロキシ信号ハンドラ１２５は、目的コンテキスト１３３における対応するエントリも更新する。図１では、目的コンテキストの符号「１３３’」の末尾のアポストロフィはやはり、コンテンツが変更されている場合があることを示す。
【００３０】
後でさらに詳しく述べるように、対象信号ハンドラ１２７が必要とする正確度のレベルに依存して、トランスレータ１９は、例外をもたらす命令の直前において目的コードをプラントしても良い。目的コードは、すべての対象レジスタ値を修正して、対象レジスタ・バンク１４１にスピルする。この結果、プロキシ信号ハンドラ１２５が対象レジスタ・バンク１４１から取り出す値は正確であること、かつトランスレート済み対象信号ハンドラ１２７に送られる対象コンテキスト１３５は正確であることが保証される。
【００３１】
図４に例示するのは、信号ハンドラ１０５が対象コンテキスト１１３を変更しない場合に、プログラムがその対象アーキテクチャ上で実行されているときの信号処理である。図４の対象アーキテクチャ信号処理シナリオでは、信号処理が始まるのは、対象プログラム１０１が例外信号１１１をもたらして、例外信号１１１が、制御をオペレーティング・システム１０３に移すときである。オペレーティング・システム１０３では、例外信号１１１が発生したときのプロセッサの状態を反映するコンテキスト構造１１３を構築する。そして、コンテキスト構造１１３は、特定の例外信号１１１に対して登録された信号ハンドラ１０５に送られる。信号ハンドラ１０５は、その動作を終了すると、制御をオペレーティング・システム１０３に戻す。そして、オペレーティング・システム１０３は、制御をプログラム１０１に戻す。
【００３２】
図５に例示するのは、トランスレート済みプログラム１２１に対する信号処理の制御フローである。この制御フローでは、目的コードによるプロキシ信号ハンドラ１２５の直接呼び出しを用いており、またトランスレート済み対象信号ハンドラ１２７は、対象コンテキスト１３５を変更しない。トランスレート済みプログラム１２１における、例外信号が発生したであろう時点において、目的コード２１は、目的コンテキスト１３３を構築し、またプロキシ信号ハンドラ１２５を呼び出して、このプロキシ信号ハンドラ１２５に目的コンテキスト１３３を送る。プロキシ信号ハンドラ１２５では、目的コンテキスト１３３および対象レジスタ・バンク１４１を用いて、対象状態１３５を、対象コンテキスト構造として構築する。次に、トランスレータ１９は、対応する対象プログラム信号ハンドラ１２７を識別し、トランスレートし、および実行することを、やはり、再構築された対象コンテキスト（状態）１３５を用いて行なう。対象信号ハンドラ１２７は、その動作を終了すると、制御をプロキシ信号ハンドラ１２５に戻す。プロキシ信号ハンドラは、その動作を終了すると、制御を、トランスレート済み対象コード１２１に戻し、対象コード１２１は実行を再開する。
【００３３】
前述したように、対象プロセッサ状態を再現することは、困難でありかつ高価となる可能性がある。第１に、対象状態を計算して収集することに付随する実際の費用が存在する。たとえば、遅延評価などのトランスレータ最適化を行なうと、対象レジスタ値の計算が先送りされることがある。先送りは、それらの値を計算するために必要なその下のデータを記憶することによってなされる。信号に応答して対象状態を再現するためには、それらの値を即座に修正（すなわち計算）する必要がある。たとえ対象レジスタが以前に計算されていても、対象レジスタを、メモリから（たとえば対象レジスタ・バンクから）取り出さなければならない。
【００３４】
第２に、対象プログラムの任意の時点で対象状態を計算する能力に付随する機会費用が存在する。動的なバイナリ・トランスレータにおける主要な最適化の多くは、バイナリ互換性の厳密なモデルから逸脱することを伴う。バイナリ互換性は、トランスレータが対象アーキテクチャの正確な状態を再現できることを意味する。厳密なモデルは、トランスレート済みプログラムの任意の時点で（すなわち、任意の対象命令において）、対象状態を再現できるモデルである。実行の任意の時点で対象状態を再現するために必要な情報を保持するためには、トランスレータは、著しい最適化を見合わせなければならない。このような最適化を用いていると、トランスレータは、対象コンテキストを正確に再現することはできない。このように、例外の実際の費用は、例外が発生するときの状態を生成していることではなく、状態を生成できることにある。
【００３５】
このような問題に対処するために、好ましいトランスレータ１９では、可変正確度の例外処理メカニズム２２を用いて例外をエミュレートする。それによって、対象コンテキスト、たとえば１３５が、特定の例外の要求に依存して、異なる例外に対して、異なるレベルの詳細で再構築される。トランスレータ１９は、対象例外を、デコード時にまたはトランスレーションの間に直面したときに検出し、特定の例外に対する対象コンテキストに対して必要な正確度を決定し、適切なフラッグを設定する。一般に、トランスレータ１９は、デコード時に、どのレベルの正確度が必要であるかを決定することができる。比較すると、簡単なトランスレータの場合は、非効率的であり、完全で正確な対象コンテキストがいつの時点でも必要とされ得ることを考慮して、最も堅実な解決方法を実施するであろう。
【００３６】
一実施形態においては、可変正確度の例外処理メカニズム２２によって、例外処理が、対象コンテキスト正確度の４つのレベルで提供される。すなわち（０）状態なし、（１）最新の既知の整合性のあるスタック・フレーム、（２）正確なプログラム・カウンタ、（３）完全に修正された対象レジスタである。前述したように、すべての対象レジスタを修正するコストは非常に高く、したがって可能ならば回避される。それ故、トランスレータ１９は、必要な正確度の最も低いレベルで、各例外を処理する。可変正確度の例外処理メカニズム２２のこの実施形態では、対象コンテキスト正確度の４つのレベルについて説明しているが、可変正確度の例外処理メカニズム２２は、正確度の任意の数の可能なレベルから正確度の任意のレベルを選択することができる。さらに、正確度の各レベルに対して、捕捉されている対象コンテキストの特定のコンポーネントの選択も、可変とすることができる。
【００３７】
表２には、４つの例外処理正確度レベル（レベル０〜レベル３）のそれぞれに対して、異なるトランスレータ・コンポーネントが行なう動作を、例示的な実施形態について示す。以下、各レベルに対する特定の動作について、さらに詳細に説明する。
【００３８】
【表２】
2007525737.tif 000004
レベル・ゼロ：状態なし
場合によっては、トランスレータ１９は、対象状態なしが、例外処理に必要であると決定する。これらの場合には、トランスレート済み信号ハンドラ１２７に送られる対象コンテキスト１３５は、正確なプロセッサ状態データを含む必要はまったくない。たとえば、Ｌｉｎｕｘ（登録商標）オペレーティング・システムでは、例外信号数３１が、「Ｐｔｈｒｅａｄ」スレッディング・ライブラリに対して予約される。この信号は、新たに形成される子スレッドからその親に送られて、形成が成功したことを示す。Ｐｔｈｒｅａｄライブラリを実施するということは、ハンドラ１２７がどんな状態も必要としてはおらず、むしろ、例外を送る動作自体が唯一の必要とするデータであることを示している。
【００３９】
レベル１：最新の既知のスタック・フレーム
正確度の他のレベルは、最新の既知のスタック・フレームを与えることである。最新の既知のスタック・フレームの意味は、スタック・ポインタ、ベース・ポインタ、およびプログラム・カウンタ（ＰＣ：Program Counter ）レジスタの最新の既知の整合性のある値である。ほとんどの状況において、最も効率的なのは、最新の既知のスタック・フレームを、正確度のデフォルト・レベルにすることである。対象コンテキスト１３５における残りの未定義の値に、特別な値、たとえば「Ｏｘｄｅａｄｂｅｅｆ」を、デバッギング目的で入力する。
【００４０】
これらの値は、対象プログラムの最新の既知の整合性のある状態を示しているが、現在の状態を正確に反映してはいない場合があるという点で、不正確である。トランスレータ１９の一実施形態においては、最新の既知の整合性のある状態は、最後の基本ブロック境界に対応する。何故なら、一般的にすべての対象レジスタは、修正されて、基本ブロック間の対象レジスタ・バンクに保存されるからである。正確度の「最新の既知のスタック・フレーム」レベルは、対象レジスタ値の修正は必要ではない。
【００４１】
レベル２：正確なプログラム・カウンタ
レベル２の正確度が適用されるのは、トランスレータ１９がデコード時に、（ａ）特定の対象命令が例外信号をトリガすること、（ｂ）対象信号ハンドラが正確なプログラム・カウンタ値を必要とすることを、決定する場合である。たとえば、ｘ８６プロセッサ上では、ＩＲＥＴ命令は、ある特定の特権レベルでのみ実行することができる。トランスレータ１９がこの命令に、対象特権レベルが低すぎるときに直面する場合には、適切なエミュレーションを行なうためには、対応する対象信号ハンドラを呼び出す必要があるとともに、対象プログラム・カウンタに対する正確な値を信号ハンドラに送る必要がある。
【００４２】
トランスレータ１９は、このような命令をエミュレートすることを、正しい例外を意図的にもたらすことによって、または適切な箇所において対象信号ハンドラを直接呼び出すことによって行なう。トランスレーションの間に、トランスレータ１９は、例外を起こす命令の対象アドレスを、一時的な抽象レジスタに記録する。またトランスレータ１９は、例外処理正確度レベルを示すようにフラッグを設定する。その結果、プロキシ信号ハンドラ１２５は、後で呼び出されるときにどの程度コンテキストを構築するべきかについて知ることになる。レベル２の場合には、「正確なプログラム・カウンタ」フラッグによって、プロキシ信号ハンドラ１２５に、正確なプログラム・カウンタ値を取り出すことが知らされる。次に、トランスレータ１９は、目的コードをプラントして、適切な例外（普通はＬｉｎｕｘを含むＵｎｉｘシステム上のＳＩＧＩＬＬ）をもたらすか、あるいは対象信号ハンドラ１２７を直接呼び出す。プロキシ信号ハンドラ１２５は、呼び出されると、「正確なプログラム・カウンタ」フラッグが設定されていることを検出して、プログラム・カウンタ値ＰＣをその記憶箇所から取り出す。
【００４３】
レベル３：正確な対象レジスタ
レベル３は、説明している実施形態の最も高い正確度レベルである。レベル３が使用されるのは、トランスレータ１９がデコード時に、命令によって例外が発生することおよびプログラム・カウンタＰＣの値を超えるコンテキストが必要となることを、検出する場合である。場合によっては、トランスレータ１９は、デコード時に、対象コード１７における特定の命令によって例外が発生すること、例外処理にはプログラム・カウンタを超える何らかの状態が必要であることを判断する。この場合には、デコード時にトランスレータ１９は、除外された命令の正確なプログラム・カウンタ値ＰＣ（対象アドレス）を記録すること、および除外された命令の前のすべての対象レジスタ値を強制的に修正するためのコードを生成することの両方を行なう。この結果、トランスレータ１９は、例外がもたらされたときに、完全な対象コンテキストをもたらすことができる。加えて、ブロック・トランスレーション・モードで動作するシステムの場合には、トランスレータ１９は、例外を含むコードのブロックをマークして、コード生成の間にある特定の最適化が適用されることがないようにする。言い換えれば、コード移動を伴ういくつかの最適化においては、対象レジスタ値を、一時的に（すなわち、目的コードにおけるある特定の時点で）対象状態と、たとえ修正されても、整合性がないようにすることができる。これらの最適化は、例外を含むブロックの場合には停止される。これは、トランスレート済み対象信号ハンドラ１２７に送られる対象状態の正確度を保証するためである。
【００４４】
たとえば、いくつかの対象プログラムは、ｘ８６ＩＮＢ命令を用いて、ハードウェア・アクセスをエミュレートする。対象例外信号ハンドラは、この場合、すべての対象レジスタに対して正確な値（すなわち、完全なコンテキスト）を必要とする。トランスレーション（デコーディング）の間にｘ８６ＩＮＢ命令に直面すると、トランスレータ１９は、目的コード（またはＩＲ、これは後で目的コードとして出される）を挿入して、すべての遅延または待ち状態の対象レジスタ値を修正した後、それらを対象レジスタ・バンク１４１にスピルする。こうして、トランスレート済みブロックには、修正コード、スピル・コード、および例外生成目的命令が含まれる。後でトランスレート済みブロックを実行する間に、例外がもたらされる前に対象状態を修正およびスピルして、プロキシ信号ハンドラ１２５が呼び出されるときに、対象レジスタ・バンク１４１における値が整合性があって正確であるようにする。
【００４５】
プロキシ信号ハンドラ１２５は、対象レジスタ・バンク１４１における修正された値を用いて対象コンテキスト１３５を構築し、信号をもたらした命令の記憶されたアドレスからｓｉｇｉｎｆｏ構造を構築する。次に、プロキシ信号ハンドラ１２５は、対象信号ハンドラ１２７をトランスレートして、それを、ｓｉｇｉｎｆｏ構造およびコンテキスト構造１３５とともに呼び出す。対象信号ハンドラ１２７は、実行を終了すると、制御をプロキシ信号ハンドラ１２５に戻す。プロキシ信号ハンドラ１２５が実行を終了すると、制御は、トランスレート済みプログラム１２１に戻る。
【００４６】
まれであるが、対象信号ハンドラ１２７は、コンテキスト構造１３５における対象レジスタの一部を変更する。この場合には、プロキシ信号ハンドラ１２５が、これらの変更された値をコピーして、対象レジスタ・バンク１４１内に戻すことを制御に戻る前に行なう。これによって、変更されたいかなる対象レジスタ値も、トランスレート済みプログラム１２１内に伝搬されることが保証される。このような場合の例は、「ゼロ除算」例外をすべて検出して、応答を、結果をゼロに設定して「除算」命令を飛び越えることによって行なう対象信号ハンドラである。
【００４７】
例示的な実施形態においては、トランスレータ１９は、例外信号の供給源、信号数、および使用中の特定のオペレーティング・システム２１に基づいて、正確度のレベルを決定する。このコンテキストでは、例外信号の「供給源」は３つ存在する。すなわち、（１）デコード時に検出される場合、（２）目的コードの実行によって生じる場合、および（３）外部のイベントによって生じる場合、の３つである。例示的な実施形態においては、非同期の外部イベントを含む外部イベントには常に、デフォルト・レベルのレベル１が割り当てられる。またレベル１は、供給源（１）および（２）に対する処理のデフォルト・レベルとしても機能する。
【００４８】
使用する正確度レベルにかかわらず、例外信号がメモリ・アクセスの結果である場合には、トランスレータ１９は、例外を発生させた対応する対象アドレスにも入力する。この値は、プロキシ・ハンドラ１２５に送られる目的状態から得られるか、あるいは対象信号ハンドラ１２７を呼び出す目的コードにエンコードされる。対象コード１７および目的コード２１のメモリ・モデルに依存して、トランスレータ１９は、対応する対象アドレスを得るために、メモリ・アクセスの目的アドレスをデマングル（demangle）する必要があっても良い。
【００４９】
いくつかの好ましい実施形態について図示して説明してきたが、当業者であれば理解するように、添付の請求項において規定されている本発明の範囲から逸脱することなく、種々の変形および変更を行なっても良い。
【００５０】
本出願に関連して本明細書と同時にまたは以前に出願され、本明細書とともに公衆の便覧に公開されているすべての論文および文献に注意を払うものであり、このような論文および文献はすべて、その内容が本明細書において参照により取り入れられている。
【００５１】
本明細書（任意の添付の請求項、要約、および図面を含む）で開示されるすべての特徴、および／または同様に開示されるいずれかの方法またはプロセスのすべてのステップは、このような特徴および／またはステップの少なくとも一部が互いに相容れない組み合わせを除いて、任意の組み合わせで組み合わせても良い。
【００５２】
本明細書（任意の添付の請求項、要約、および図面を含む）で開示される各特徴は、特にことわらない限り、同じ、同等、または類似の目的を満たす代替的な特徴と取り替えても良い。したがって、特にことわらない限り、開示される各特徴は、同等または類似の特徴の包括的な組の１つの例に過ぎない。
【００５３】
本発明は、前述の実施形態の詳細に制限されない。本発明は、本明細書（任意の添付の請求項、要約、および図面を含む）で開示される特徴の任意の新しい１つまたは任意の新しい組み合わせに及ぶか、または同様に開示される任意の方法またはプロセスのステップの任意の新しい１つまたは任意の新しい組み合わせに及ぶ。
【図面の簡単な説明】
【００５４】
【図１】本発明の実施形態を利用する装置を例示するブロック・ダイアグラム。
【図２】第１の例外信号処理プロセスを示す概略的なダイアグラム。
【図３】本発明の例示的な実施形態による例外信号処理プロセスを示すのに有用な概略的なダイアグラム。
【図４】第２の例外信号処理プロセスを示す概略的なダイアグラム。
【図５】本発明の例示的な実施形態による例外信号処理プロセスを示すのに有用な概略的なダイアグラム。
【図１】
2007525737.tif 000005
【図２】
2007525737.tif 000006
【図３】
2007525737.tif 000007
【図４】
2007525737.tif 000008
【図５】
2007525737.tif 000009
【手続補正書】
【提出日】平成19年6月21日(2007.6.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
対象プログラム・コード（１７）を目的コード（２１）にトランスレーションする間に直面する例外を処理する方法であって、
例外の発生を検出すること、
前記検出された例外に対して必要とされる対象コンテキスト正確度のレベルを、正確度の少なくとも二つの可能なレベルから選択すること、
信号ハンドラ（２２）を呼び出して、前記選択された正確度のレベルを用いて、前記検出された例外を処理すること、
を備え、前記正確度の少なくとも２つの可能なレベルのそれぞれは、対象コンテキストのコンポーネントを含む、方法。
【請求項２】
請求項１に記載の方法において、前記例外の発生を検出するステップは、前記対象プログラム・コード（１７）のトランスレーションの間に例外信号の発生を検出することを含む、方法。
【請求項３】
請求項１または２に記載の方法において、前記トランスレーションによって生成される目的コード（２１）が、プロキシ信号ハンドラ（１２５）を呼び出して、前記検出された例外を処理する、方法。
【請求項４】
請求項１、２、または３に記載の方法において、前記例外の発生を検出するステップは、目的コード（２１）の実行の間に例外信号の発生を検出することを含む、方法。
【請求項５】
請求項４に記載の方法において、目的オペレーティング・システムが、プロキシ信号ハンドラ（１２５）を呼び出して、前記検出された例外を処理する、方法。
【請求項６】
請求項１〜５のいずれか一項に記載の方法において、対象コンテキスト正確度のデフォルト・レベルが、最新の既知のスタック・フレームである、方法。
【請求項７】
請求項６に記載の方法において、前記最新の既知のスタック・フレームは、最新の既知のスタック・ポインタ値、ベース・ポインタ値、およびプログラム・カウンタ・レジスタ値を含む、方法。
【請求項８】
請求項６または７に記載の方法において、前記対象コンテキスト正確度のデフォルト・レベルは、対象レジスタ値の修正を必要としない、方法。
【請求項９】
請求項１〜８のいずれか一項に記載の方法において、対象コンテキスト正確度の前記可能なレベルのうちの１つは、対象状態なしである、方法。
【請求項１０】
請求項１〜９のいずれか一項に記載の方法において、対象コンテキスト正確度の前記可能なレベルのうちの１つは、正確なプログラム・カウンタ値を含む正確なプログラム・カウンタ状態である、方法。
【請求項１１】
請求項１〜１０のいずれか一項に記載の方法において、対象コンテキスト正確度の前記可能なレベルのうちの１つは、修正された対象レジスタと正確なプログラム・カウンタ値とを含む正確な対象レジスタ状態である、方法。
【請求項１２】
トランスレータ（１９）を用いて対象コードを目的コード（２１）にトランスレートするトランスレーション・システムにおいて使用される請求項１〜１１のいずれか一項に記載の方法であって、前記方法は、さらに、
目的コンテキストを生成するステップと、
前記目的コンテキストを用いて対象コンテキストを再構築することにより、再構築された対象コンテキストを生成するステップと、
前記再構築された対象コンテキストを用いて、特定の前記例外に付随する対象信号ハンドラのトランスレート済みバージョンを実行するステップと、
を備える方法。
【請求項１３】
請求項１２に記載の方法において、前記対象コンテキストを再構築するステップは、全体の対象プロセッサ状態よりも少なく再構築することを含む、方法。
【請求項１４】
請求項１２または１３に記載の方法において、前記対象正確度のレベルが、前記トランスレート済み対象信号ハンドラに送られる対象状態がないゼロ・レベルである、方法。
【請求項１５】
請求項１２、１３または１４に記載の方法において、前記レベルが、前記トランスレート済み対象信号ハンドラに最新の既知のスタック・フレームのみが送られるレベルである、方法。
【請求項１６】
請求項１２、１３、１４、または１５に記載の方法において、前記レベルが、前記トランスレート済み対象信号ハンドラに正確なプログラム・カウンタ値のみが送られるレベルである、方法。
【請求項１７】
請求項１２、１３、１４、１５、または１６に記載の方法において、前記正確度のレベルが、前記トランスレート済み対象信号ハンドラに正確な対象コンテキストが送られるレベルである、方法。
【請求項１８】
請求項１２、１３、１４、１５、１６、または１７に記載の方法において、前記対象コンテキストを再構築するステップが、プロキシ信号ハンドラ・コードによって行なわれる、方法。
【請求項１９】
請求項１８に記載の方法において、前記プロキシ信号ハンドラ・コードが、前記トランスレータ（１９）によって前記目的コード（２１）に登録され、前記トランスレータ（１９）はさらに、前記特定の例外に応答して前記複数の対象コンテキスト正確度レベルのうちのどれを用いるべきかを表示するフラッグを、前記プロキシ信号ハンドラ（１２５）に対して示す、方法。
【請求項２０】
請求項１８または１９に記載の方法において、前記特定の例外は、前記トランスレータ（１９）による対象コードのデコーディングの間に検出される、方法。
【請求項２１】
請求項２０に記載の方法において、前記トランスレータが、デコーディングの間の前記特定の例外の検出に応答して、前記目的コンテキストを生成するとともに、前記プロキシ信号ハンドラ・コードの動作を呼び出す目的コード（２１）を、プラントする、方法。
【請求項２２】
請求項１８〜２１のいずれか一項に記載の方法において、前記特定の例外は、前記目的コード（２１）の実行の間に生じる、方法。
【請求項２３】
請求項２２に記載の方法において、目的オペレーティング・システムが、前記目的コード（２１）の実行の間の前記特定の例外の発生に応答して、前記プロキシ信号ハンドラ・コードに目的コンテキストを送る、方法。
【請求項２４】
請求項２３に記載の方法において、前記目的コンテキストを受け取った後に、前記プロキシ信号ハンドラ・コードが、前記トランスレータ（１９）をコールし、次に、前記トランスレータ（１９）が、選択されたトランスレート済み対象信号ハンドラを呼び出す、方法。
【請求項２５】
請求項１２〜２４のいずれか一項に記載の方法において、前記例外が、複数の非同期の外部イベントのうちの１つによって生じ、前記例外が、すべての非同期イベントに割り当てられた正確度の選択されたデフォルト・レベルを用いて処理される、方法。
【請求項２６】
請求項２５に記載の方法において、前記選択されたデフォルト・レベルは、最新の既知のスタック・フレームである、方法。
【請求項２７】
請求項１８〜２６のいずれか一項に記載の方法において、前記プロキシ信号ハンドラ・コードは、対象レジスタ・バンクと相互作用するように構成されている、方法。
【請求項２８】
請求項１〜２７のいずれか一項に記載の方法を行なうように構成されているトランスレータ装置。
【請求項２９】
請求項１〜２７のいずれか一項に記載の方法を行なうためのコンピュータによって実施可能な命令が記録されているコンピュータ可読媒体。
【国際調査報告】
2007525737.tif 000010
2007525737.tif 000011
2007525737.tif 000012