(57)【要約】目標計算システム（１０）は、対象計算アーキテクチャ（１）が実行可能な対象コード（１７）から、目標計算システムが実行可能な目標コード（２１）にプログラムコード変換し、目標コードを実行する。目標計算システムは、ネイティブコードに結合中に例外処理する。ネイティブコード結合は、対象ライブラリ機能を目標コードに変換する代わりに、ネイティブライブラリ機能を実行する。ネイティブコード（２８）の実行中に例外発生したら、目標計算システムは、ネイティブコードの実行の現在地点を表す目標ステート（Ｔ´）を保存し、対象計算アーキテクチャでエミュレートされた実行地点を表す対象ステート（Ｓ´）を生成する。対象例外処理装置（１７０）は、対象ステートを基準に例外処理する。対象ステートを使用して例外から実行再開すると、保存された目標ステートは復元され、ネイティブコードにおいて実行再開する。
2009541834.tif 000002
【特許請求の範囲】
【請求項１】
目標処理装置（１３）、記憶装置（１８）、変換器（１９）、例外処理装置（１９１）、対象例外処理装置（１７０）、および復元装置（１９２）を備える計算システムとしての例外処理システム（１０）であって、
前記目標処理装置（１３）は第１タイプであり、
前記記憶装置（１８）は、ネイティブコード部分（２８）と複数の対象コード部分（１７）とを保存し、前記ネイティブコード部分は、前記目標処理装置（１３）によって実行可能であり、前記対象コード部分は、第２タイプの対象処理装置（３）を含む対象計算アーキテクチャ（１）上で実行可能であり、
前記変換器（１９）は、複数の前記対象コード部分（１７）の少なくとも幾つかを目標コード（２１）に変換して、前記目標処理装置（１３）上で前記目標コード（２１）の実行を制御し、少なくとも１個の前記対象コード部分（１７）を前記目標コード（２１）に変換する代わりに、少なくとも１個の前記対象コード部分（１７）を前記ネイティブコード部分（２８）に結合することによって前記目標処理装置（１３）上で前記ネイティブコード部分（２８）の実行を起動させることを含み、
前記例外処理装置（１９１）は、前記目標処理装置（１３）上で前記ネイティブコード部分（２８）を実行中に生じる例外信号に応答して、（ｉ）前記記憶装置（１８）に目標ステートデータ構造を保存し、そして（ｉｉ）前記記憶装置（１８）内で対象ステートデータ構造を生成することであって、前記目標ステートデータ構造は、前記ネイティブコード部分（２８）に関して前記目標処理装置（１３）における実行の現在地点を表す目標ステートを含み、前記対象ステートデータ構造は、対象計算アーキテクチャ（１）上でエミュレートされた実行地点を表す対象ステートを含むことと；
前記対象例外処理装置（１７０）は、前記記憶装置（１８）内の前記対象ステートデータ構造において提供された前記対象ステートを基準にして例外信号を処理し、
前記復元装置（１９２）は、前記対象例外処理装置（１７０）による例外信号処理後に前記対象ステートデータ構造を使用することによって、前記記憶装置（１８）内の前記目標ステートデータ構造から、前記目標ステートを前記目標処理装置（１３）に復元することによって実行再開し、次いで前記目標処理装置（１３）に前記目標ステートに応じて前記ネイティブコード部分（２８）を実行再開させることを特徴とする、例外処理システム（１０）。
【請求項２】
前記例外処理装置（１９１）は、前記目標ステートデータ構造とのリンクを含む前記対象ステートデータ構造を生成し、
前記復元装置（１９２）は、前記対象ステートデータ構造におけるリンクを使用することによって、前記記憶装置（１８）内の前記目標ステートデータ構造の場所を特定する、請求項１記載の例外処理システム（１０）。
【請求項３】
前記復元装置（１９２）は、前記目標処理装置（１３）に復元ルーチンを実行させることによって、前記目標ステートを前記目標処理装置（１３）に復元する、請求項１記載の例外処理システム（１０）。
【請求項４】
前記例外処理装置（１９１）は、修正後の対象プログラムカウンタを含む前記対象ステートデータ構造を生成し、
前記復元装置（１９２）は、修正後の前記対象プログラムカウンタに応じて実行制御を渡し、よって前記目標処理装置（１３）は復元ルーチンを実行し、前記目標ステートをロードすることによって実行制御を前記ネイティブコード部分（２８）に戻す、請求項１記載の例外処理システム（１０）。
【請求項５】
修正後の前記対象プログラムカウンタは、所定値を有し、
前記復元装置（１９２）は前記所定値を検出することによって、前記復元ルーチンを実行するように前記目標処理装置（１３）を切替える、請求項４記載の例外処理システム（１０）。
【請求項６】
前記対象ステートデータ構造は、修正後の対象プログラムカウンタを含み、
前記記憶装置（１８）は更に、指定場所を含み、
前記指定場所は、修正後の前記対象プログラムカウンタによって識別されるアドレスによって、前記対象コードの部分として扱われる、請求項１記載の例外処理システム（１０）。
【請求項７】
前記記憶装置（１８）において前記指定場所は対象コード命令を含み、
前記復元装置（１９２）は、前記変換器（１９）に前記対象コード命令を、前記目標処理装置（１３）による実行のための前記目標コード（２１）に変換させ、よって前記目標ステートを復元することによって前記ネイティブコード部分（２８）を実行再開する、請求項６記載の例外処理システム（１０）。
【請求項８】
前記指定場所は、対象計算アーキテクチャ（１）の命令セットアーキテクチャの範囲内には存在しない特殊ケース命令を含み、
前記復元装置（１９２）は、前記特殊ケース命令を検出し、前記特殊ケース命令に応答して前記目標処理装置（１３）に復元ルーチンを実行させることによって、保存された前記目標ステートを復元し、そして前記ネイティブコード部分（２８）を実行再開する、請求項６記載の例外処理システム（１０）。
【請求項９】
例外処理後に例外発生地点で前記対象コードの実行再開を試みる時、前記復元装置（１９２）は、前記変換器（１９）に修正後の前記対象プログラムカウンタを復帰アドレスとして使用させ、よって実行制御は前記指定場所に渡される、請求項６記載の例外処理システム（１０）。
【請求項１０】
前記変換器（１９）は、呼出元対象コード部分を呼出元目標コード部分に変換し、よって少なくとも１個の対象プログラムカウンタを含む第１対象ステートを形成し、
前記目標処理装置（１３）上で前記呼出元目標コード部分を実行することによって、前記呼出元目標コード部分から前記ネイティブコード部分（２８）を呼出し、
前記例外処理装置（１９１）は、前記第１対象ステートを複製および修正することによって、前記対象ステートデータ構造に記録するための前記対象ステートを形成する、請求項１記載の例外処理システム（１０）。
【請求項１１】
前記記憶装置（１８）は更に、対象計算アーキテクチャ（１）上で前記対象コード部分（１７）の実行をエミュレートするための対象スタックデータ構造（８１）を含む、請求項１〜１０何れか１項記載の例外処理システム（１０）。
【請求項１２】
前記目標処理装置（１３）は、前記対象スタックデータ構造（８１）を使用することによって、前記ネイティブコード部分（２８）を実行する、請求項１１記載の例外処理システム（１０）。
【請求項１３】
前記例外処理装置（１９１）は、実行処理に先立ち、前記対象スタックデータ構造（８１）に前記対象ステートを保存し、
前記復元装置（１９２）は、前記対象例外処理装置（１７０）による処理実行後に、前記対象スタックデータ構造（８１）から前記対象ステートを取得する、請求項１１記載の例外処理システム（１０）。
【請求項１４】
前記例外処理装置（１９１）は、前記対象例外処理装置（１７０）による例外処理に先立ち、前記対象スタックデータ構造（８１）に前記目標ステートを保存し、
前記復元装置（１９２）は、前記対象例外処理装置（１７０）による例外実行処理後に、前記対象スタックデータ構造（８１）から前記目標ステートを取得する、請求項１１記載の例外処理システム（１０）。
【請求項１５】
前記例外処理装置（１９１）は、前記目標処理装置（１３）のレジスタセットの値を含む前記目標ステートを前記対象スタックデータ構造（８１）に保存し、
前記復元装置（１９２）は、前記目標ステートを前記目標処理装置（１３）に復元するようになっていて、保存された値を前記対象スタックデータ構造（８１）からレジスタセットにロードすることを含む、請求項１４記載の例外処理システム（１０）。
【請求項１６】
前記対象例外処理装置（１７０）は、例外処理するようになっていて、例外発生地点で前記対象ステートを使用することによって実行再開するか、または対象プログラム内の別の地点で前記対象プログラムカウンタを前記対象ステートに変更することによって修正後の前記対象プログラムカウンタを生成することによって実行再開するかを決定することを含む、請求項１記載の例外処理システム（１０）。
【請求項１７】
計算システム（１０）内の例外信号を処理する例外処理方法であって、前記例外処理方法は、
（ａ）対象計算アーキテクチャ（１）によって実行可能な前記対象コード（１７）を、計算システム（１０）によって実行可能な目標コード（２１）に、プログラムコード変換することによって変換するステップａと、
（ｂ）対象コード部分（１７）を前記目標コード（２１）に変換する代わりに、計算システム（１０）に固有であるネイティブコード部分（２８）を実行するステップｂと、
（ｃ）前記ネイティブコード部分（２８）の実行中に発生する例外信号に応答して、（ｉ）目標ステートを保存し、（ｉｉ）対象ステートを生成し、（ｉｉｉ）前記対象ステートを基準にして例外信号を処理するステップｃであって、前記目標ステートは、前記目標処理装置における前記ネイティブコード部分（２８）に関する計算システム（１０）における実行の現在地点を表し、前記対象ステートは、対象計算アーキテクチャ（１）上でエミュレートされた実行地点を表すことと、更に、
（ｄ）前記対象ステートを使用して前記目標ステートを復元することによって、例外信号から実行再開し、次いで前記目標ステートを使用することによって、前記ネイティブコード部分（２８）を実行再開するステップｄと
を備える、例外処理方法。
【請求項１８】
前記対象ステートは、前記目標ステートとのリンクを含む、請求項１７記載の例外処理方法。
【請求項１９】
前記ステップｄは、復元ルーチンを実行することによって前記目標ステートを復元することを含む、請求項１７記載の例外処理方法。
【請求項２０】
前記対象ステートは、修正後の対象プログラムカウンタを含み、
前記例外処理方法は更に、修正後の前記対象プログラムカウンタに実行制御を渡すことによって前記復元ルーチンを実行し、前記目標ステートをロードすることによって実行制御を前記ネイティブコード部分に戻すことを含む、請求項１７記載の例外処理方法。
【請求項２１】
修正後の前記対象プログラムカウンタは、所定値を有し、
前記例外処理方法は更に、前記所定値を検出することによって、前記実行制御を前記復元ルーチンの実行に切替える、請求項２０記載の例外処理方法。
【請求項２２】
前記対象ステートは、修正後の前記対象プログラムカウンタを含み、
前記例外処理方法は更に、指定場所を提供することを含み、
前記指定場所は、修正後の前記対象プログラムカウンタによって識別されるアドレスにおいて、前記対象コードの部分として扱われる、請求項１７記載の例外処理方法。
【請求項２３】
前記指定場所は、対象コード命令を含み、
前記例外処理方法は、前記対象コード命令を前記目標コード（２１）に変換して実行し、よって前記目標ステートを復元することによって前記ネイティブコード部分（２８）を実行再開する、請求項２２記載の例外処理方法。
【請求項２４】
前記指定場所は、対象計算アーキテクチャ（１）の命令セットアーキテクチャの範囲内には存在しない特殊ケース命令を含み、
前記例外処理方法は、前記特殊ケース命令を検出し、これに応答して復元ルーチンを実行し、保存される前記目標ステートを復元して前記ネイティブコード部分を実行再開することを含む、請求項２２記載の例外処理方法。
【請求項２５】
例外処理後に例外発生地点で前記対象コードの実行再開を試みる時、修正後の前記対象プログラムカウンタを復帰アドレスとして使用し、よって実行制御は前記指定場所に渡される、請求項２２記載の例外処理方法。
【請求項２６】
前記例外処理方法は更に、呼出元対象コード（１７）を前記目標コード（２１）に変換し、少なくとも１個の前記対象プログラムカウンタを含む前記第１対象ステートを形成し、
呼出元目標コード部分（２１）から前記ネイティブコード部分（２８）を呼出し、
前記第１対象ステートを複製および修正して前記対象ステートを形成する、請求項１７記載の例外処理方法。
【請求項２７】
前記例外処理方法は更に、対象計算アーキテクチャ（１）上で前記対象コード（１７）の実行をエミュレートするために、目標計算システム（１０）のメモリに前記対象スタックデータ構造（８１）を提供することを含む、請求項１７記載の例外処理方法。
【請求項２８】
前記例外処理方法は更に、前記対象スタックデータ構造（８１）を使用することによって前記ネイティブコード部分（２８）を実行することを含む、請求項２７記載の例外処理方法。
【請求項２９】
前記例外処理方法は更に、実行処理に先立ち前記対象スタックデータ構造（８１）に前記対象ステートを保存することを含み、よって実行処理後に前記対象スタックデータ構造（８１）から、保存された前記対象ステートは得られる、請求項２８記載の例外処理方法。
【請求項３０】
前記例外処理方法は更に、例外処理に先立ち前記対象スタックデータ構造（８１）に前記目標ステートを保存することを含み、よって実行処理後に前記対象スタックデータ構造（８１）から前記目標ステートは得られる、請求項２８記載の例外処理方法。
【請求項３１】
前記目標ステートを保存するステップは、目標計算システム（１０）の前記目標処理装置（１３）のレジスタセットの値を前記対象スタックデータ構造（８１）に保存することを含み、
前記例外処理方法は更に、前記目標ステートを復元して、前記対象スタックデータ構造に保存された値をレジスタセットにロードすることを含む、請求項２９記載の例外処理方
法。
【請求項３２】
前記例外処理方法は更に、例外信号を処理して、例外発生地点で前記対象ステートを使用して前記対象コード（１７）を実行再開するか、または前記対象コード（１７）内の別の地点で前記対象プログラムカウンタを前記対象ステートに変更することによって対象プログラムを実行再開するか否か判定することを含む、請求項１７記載の例外処理方法。
【請求項３３】
目標計算プラットフォーム（１０）において例外信号を処理する例外処理方法であって、前記例外処理方法は、
対象計算プラットフォーム（１）によって実行可能な対象コード（１７）を、前記目標計算プラットフォーム（１０）によって実行可能な前記目標コード（２１）に変換することによって、呼出元対象コード部分（１７）を呼出元目標コード部分（２１）に変換することと、
前記呼出元目標コード部分（２１）を実行することによって、前記目標計算プラットフォーム（１０）上で前記目標コード（２１）に関して第１目標ステートを生成することと、
対象計算プラットフォーム（１）上で、前記呼出元対象コード部分の実行を表す第１対象ステートをエミュレートすることと、
前記呼出元目標コード部分（２１）から、前記目標計算プラットフォーム（１０）に固有のネイティブコード部分（２８）を実行することと、
前記目標計算プラットフォーム（１０）上で前記ネイティブコード部分（２８）を実行することによって、第２目標ステートを生成することと、そして
前記ネイティブコード部分（２８）の実行中に例外が生じた場合、前記第２目標ステートを保存し、前記第１対象ステートを基準にして第２対象ステートを生成することであって、前記第２対象ステートは前記第２目標ステートへのリンクを含むことと、
前記第２対象ステートを基準にして例外処理することと、
前記第２対象ステートを使用して前記第２目標ステートにリンクすることによって、前記ネイティブコード部分（２８）で実行再開することと
を含む、例外処理方法。
【請求項３４】
前記例外処理方法は更に、例外から実行再開する時、復元ルーチンを実行することによって、前記第２目標ステートを復元するステップを含む、請求項３３記載の例外処理方法。
【請求項３５】
前記第２対象ステートは、修正後の対象プログラムカウンタを含み、
前記例外処理方法は更に、実行制御を修正後の前記対象プログラムカウンタに渡し、前記復元ルーチンを実行することによって、保存された前記第２目標ステートをロードし、よって実行制御を前記ネイティブコード部分（２８）に戻す、請求項３３記載の例外処理方法。
【請求項３６】
修正後の前記対象プログラムカウンタは所定値を有し、
前記例外処理方法は更に、前記所定値を検出して、実行制御を前記復元ルーチンに切替える、請求項３５記載の例外処理方法。
【請求項３７】
前記第２対象ステートは、修正後の前記対象プログラムカウンタを含み、
前記例外処理方法は更に、指定場所を提供することを含み、
前記指定場所は、修正後の前記対象プログラムカウンタによって識別されるアドレスによって、前記対象コード部分として扱われる、請求項３３記載の例外処理方法。
【請求項３８】
前記指定場所は、対象コード命令を含み、
前記例外処理方法は、前記対象コード命令を前記目標コード（２１）に変換して実行し、よって保存された前記目標ステートを復元させて前記ネイティブコード部分（２８）は実行再開する、請求項３７記載の例外処理方法。
【請求項３９】
前記指定場所は、対象計算プラットフォーム（１）の命令セットアーキテクチャの範囲内には存在しない特殊ケース命令を含み、
前記例外処理方法は前記特殊ケース命令を検出し、これに応答して復元ルーチンを実行することによって、保存された前記第２目標ステートを復元し、よって前記ネイティブコード部分（２８）を実行再開できるようにすることを含む、請求項３７記載の例外処理方法。
【請求項４０】
例外処理後に例外発生地点で実行再開を試みる時、修正後の前記対象プログラムカウンタを復帰アドレスとして使用し、よって実行制御は前記指定場所に渡されることを含む、請求項３７記載の例外処理方法。
【請求項４１】
前記第１対象ステートは、少なくとも１個の前記対象プログラムカウンタを含み、
前記第２対象ステートを生成することは、前記第１対象ステートを複製することによって前記対象ステートを形成し、その結果、前記対象プログラムカウンタを修正値に修正することを含む、請求項３７記載の例外処理方法。
【請求項４２】
前記例外処理方法は更に、対象計算プラットフォーム（１）上で前記対象コード（１７）の実行をエミュレートするために、前記目標計算プラットフォーム（１０）に前記対象スタックデータ構造（８１）を提供することを含む、請求項３３記載の例外処理方法。
【請求項４３】
前記例外処理方法は更に、前記対象スタックデータ構造（８１）を基準にして前記ネイティブコード部分（２８）を実行することを含む、請求項４２記載の例外処理方法。
【請求項４４】
前記例外処理方法は更に、実行処理に先立ち、前記対象スタックデータ構造（８１）に少なくとも前記第２対象ステートを保存する第２対象ステート保存ステップを含み、よって実行処理後に前記対象スタックデータ構造（８１）から保存された前記第２対象ステートは得られる、請求項４２記載の例外処理方法。
【請求項４５】
前記例外処理方法は更に、例外処理に先立ち、前記対象スタックデータ構造（８１）に前記第２目標ステートを保存する第２目標ステート保存ステップを含み、よって実行処理後に前記対象スタックデータ構造（８１）から前記目標ステートは得られる、請求項４２記載の例外処理方法。
【請求項４６】
前記第２目標ステート保存ステップは、前記目標計算プラットフォーム（１０）の前記目標処理装置（１３）の目標レジスタセットの値を、前記対象スタックデータ構造に保存することを含み、
前記例外処理方法は更に、前記目標ステートを復元することによって保存された値を、前記対象スタックデータ構造から前記レジスタセットにロードすることを含む、請求項４５記載の例外処理方法。
【請求項４７】
前記例外処理方法は更に、例外処理して、例外発生地点で前記対象ステートを使用して実行再開するか、または前記対象コード（１７）内の別の地点で対象プログラムカウンタを前記対象ステートに変更することによって対象プログラムを実行再開するか否か判定することを含む、請求項３３記載の例外処理方法。
【請求項４８】
ネイティブコードに結合中に例外信号を処理する変換装置であって、前記変換装置は変
換器（１９）、例外処理装置（１９１）、対象例外処理装置（１７０）、および復元装置（１９２）を有し、
前記変換器（１９）は、対象計算プラットフォーム（１）によって実行可能な前記対象コード（１７）を、目標計算プラットフォーム（１０）によって実行可能な前記目標コード（２１）に変換し、そして前記対象コード部分（１７）を前記目標コード（２１）に変換する代わりに、前記目標計算プラットフォーム（１０）に、前記目標計算プラットフォーム（１０）に固有の前記ネイティブコード部分（２８）を実行させ、
更に前記変換器（１９）は、呼出元対象コード（１７）を、前記目標計算プラットフォーム（１０）が実行するために前記呼出元目標コード（２１）に変換することによって、第１目標ステートと第１対象ステートを提供し、そして前記呼出元目標コード（２１）から前記ネイティブコード部分（２８）に呼出す時に、少なくとも前記第１対象ステートは保存され、
前記例外処理装置（１９１）は、前記ネイティブコード（２８）の実行中に発生した例外信号を検出し、第２目標ステートを保存させ、そして第２対象ステートを提供し、前記第２目標ステートは、前記ネイティブコード部分（２８）に対する、前記目標計算プラットフォーム（１０）における実行の現在地点を表し、前記第２対象ステートは、前記第２目標ステートとのリンクを含み、
前記対象例外処理装置（１７０）は、前記第２対象ステートを基準にして例外処理し、
前記復元装置（１９２）は、前記目標計算プラットフォーム（１０）に、前記第２対象ステートから前記第２目標ステートにリンクすることによって、前記ネイティブコード（２８）を実行再開させることを特徴とする、変換装置。
【請求項４９】
コンピュータに例外信号処理方法を遂行させるために、前記コンピュータが実行可能な命令を記録したコンピュータ読取可能な記憶媒体であって、前記命令は、
（ａ）対象計算アーキテクチャ（１）によって実行可能な前記対象コード（１７）を、目標計算アーキテクチャ（１０）によって実行可能な目標コード（２１）に、プログラムコード変換することによって変換するステップａと、
（ｂ）前記対象コード部分（１８）を前記目標コード（２１）に変換する代わりに、前記目標計算アーキテクチャ（１０）に固有のネイティブコード部分（２８）を実行するステップｂと、
（ｃ）前記ネイティブコード部分（２８）の実行中に発生する例外信号に応答して、（ｉ）目標ステートを保存し、（ｉｉ）対象ステートを生成し、（ｉｉｉ）前記対象ステートを基準にして例外信号を処理するステップｃであって、前記目標ステートは、前記ネイティブコード部分（２８）に関して目標計算アーキテクチャにおける実行の現在地点を表し、前記対象ステートは、前記対象計算アーキテクチャ（１）上の実行のエミュレートされた地点を表すことと、
（ｄ）前記対象ステートを使用して前記目標ステートを復元することによって、例外から実行再開し、次いで前記目標ステートを使用して前記ネイティブコード部分（２８）を実行再開するステップｄと
を備える、コンピュータ読取可能な記憶媒体。
【請求項５０】
コンピュータに例外処理方法を遂行させるために、前記コンピュータが実行可能な命令を記録したコンピュータ読取可能な記憶媒体であって、前記命令は、
対象計算プラットフォーム（１）によって実行可能な対象コード（１７）を、目標計算プラットフォーム（１０）によって実行可能な目標コード（２１）に変換することであって、前記変換は、呼出元対象コード部分（１７）を、呼出元目標コード部分（２１）に変換することを含み、
前記呼出元目標コード部分（２１）を実行することによって、前記目標計算プラットフォーム（１０）上で、前記目標コード（２１）の実行に関して第１目標ステートを生成することと、
前記対象計算プラットフォーム（１）上で、前記呼出元対象コード部分（１７）の実行を表す第１対象ステートをエミュレートすることと、
呼出元目標コード部分（２１）から、前記目標計算プラットフォーム（１０）に固有の前記ネイティブコード部分（２８）を呼出すことと、
前記目標計算プラットフォーム（１０）上で、前記ネイティブコード部分（２８）を実行することによって、前記第２目標ステートを生成することと、そして
前記ネイティブコード部分（２８）の実行中に例外が生じた場合、前記第２目標ステートを保存して、前記第１対象ステートに基づき第２対象ステートを生成することであって、前記第２対象ステートは前記第２目標ステートとのリンクを含むことと、
前記第２対象ステートを基準にして例外処理し、前記第２対象ステートを使用することによって前記第２目標ステートにリンクし、よって前記ネイティブコード部分（２８）における実行再開することと
を備える、コンピュータ読取可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にはコンピュータおよびコンピュータシステムの分野、より具体的には例外信号の処理に関する。
【背景技術】
【０００２】
中央処理装置（ＣＰＵ）またはプロセッサは、現代のすべての計算システム（コンピューティングシステム）の心臓部に存在する。処理装置は、コンピュータプログラムの命令を実行し、よってコンピュータは、有用な仕事を行うことを可能にする。ＣＰＵは、現代生活においてあらゆる形態のデジタルデバイスに普及し、パーソナルコンピュータ、ラップトップ、ＰＤＡ等の専用計算マシンに限定されない。マイクロ処理装置は、自動車から携帯電話、子供の玩具に至るまですべてに見られる。
【０００３】
問題は、１つのタイプの処理装置によって実行可能なプログラムコードは、往々にして他のタイプの処理装置では実行できないことである。なぜならば各々のタイプのプロッセッサは、それぞれ固有の命令セットアーキテクチャ（ＩＳＡ）を有するからである。それゆえプログラムコード変換は、開発されて或るタイプの処理装置用に書かれたプログラムコードを、他のタイプの処理装置によって実行可能なコードに自動的に変換するか、またはコードの古く非効率的な部分を、同じタイプの処理装置の新しくより高速のバージョンに最適化するようになった。すなわち内蔵ＣＰＵおよび非内蔵ＣＰＵのいずれにおいても、主要な命令セットアーキテクチャには性能は「加速」され、またはより良いコストパフォーマンスを提供する他の処理装置に「翻訳」（変換，トランスレート）され得るソフトウェアは、既に多数存在する。一方、優勢なＣＰＵアーキテクチャは、或る時それらの命令セットアーキテクチャに固定されて、性能または市場範囲の点で発展できない例も見られる。この問題は、計算産業のすべてのレベル、すなわちポケットサイズの自立型計算デバイスから、数十または数百の強力なサーバを有する巨大ネットワークに至るまで該当する。
【０００４】
プログラムコード変換の分野に関する背景情報として、特許文献１の「プログラムコード変換」、特許文献２の「プログラムコード変換中にインタプリタ最適化を実行するための方法および装置」、特許文献３の「プログラムコード変換に対する中間表現を生成するための方法および装置」、特許文献４の「調節可能な精密例外処理を実行するための方法および装置」、特許文献５の「プログラムコード変換中に例外を精密に処理するための方法および装置」は、すべて参照によってこれに組入れられる。これらは、プログラムコード変換能力を助長する方法および装置を開示し、ここで論じられる実施形態に採用されてよい。
【０００５】
１つの具体的な問題領域は、例外信号の処理に関する。例外とは、プログラムにおける通常の制御の流れを変化させる条件である。例外信号は、システム内のどこかで発生した条件を示し、処理装置の注意を促して、通常は、プロセスを続行する前に処理される必要はある。例外は、種々異なるタイプ、たとえばインタラプト、フォールト、トラップまたは異常終了に細分できる。用語は、異なるアーキテクチャによって様々であり、特定のタイプまたはカテゴリの例外は、特定のアーキテクチャに固有であり得る。
【０００６】
例外信号（しばしば単に「信号」または「例外」と呼ぶ）は、ハードウェアまたはソフトウェアによって惹起され得る。ハードウェアによる例外信号は、リセット、インタラプトまたはメモリ管理ユニットからの信号を含む。たとえば例外は、算術論理演算ユニット
または浮動小数点演算ユニットによってゼロで割る等の数値エラー、オーバーフローまたはアンダーフロー、または命令復号誤り、たとえば特権命令、予約命令、トラップ命令または未定義命令に対して生成され得る。ソフトウェアによる例外は、種々異なるソフトウェアプログラムによって極めて多様であるが、一般的には、プログラムの正常な挙動を変化させるどのような種類のエラーチェックにも該当する。
【０００７】
信号処理は、プログラムの実行中に例外信号が発生した時に呼出される特殊なユニットである。この時信号処理は、何であれ例外を発生される状況に対処しようとし、可能であれば、プログラムの実行を継続する。プログラムは、与えられた信号に対して信号処理を提供しなければ、既定値システム信号処理が呼出される。
【０００８】
例外信号を引き起こす最も普通の事象としては、プロセスが（ｉ）マッピングされていない領域にアクセスしようとするか、（ｉｉ）正しい許可なく記憶領域を操作しようとする時に生じる。例外信号を惹起する他の普通の事象は、（ｉｉｉ）他のプロセスから送られた信号を受取ること、（ｉｖ）現在のプロセスが実行するための特権的レベルを持たない命令を実行すること、または（ｖ）ハードウェアにおける入力／出力事象である。
【０００９】
表１は、幾つかの代表的な例外信号を示す。計算システムの視点から、各々のタイプの信号は対応する信号番号、すなわち通常は整数の＃１、＃２、＃３等を有する。表に示すように、各々の信号は記憶しやすい識別名を持っているのは普通である。
【００１０】
【表１】
2009541834.tif 000003
【００１１】
例外信号の発生源は、次の２つである。（１）直接実行プログラムから、または（２）オペレーティングシステム若しくはその他のプロセスから発生する。幾つかの例外信号は、プログラムによって実行される命令の直接的な結果として生成される。たとえばプログ
ラムは、不当なオペレーションコードを実行したら、ＳＩＧＩＬＬは現れる。同様に、プログラムは、不当なメモリアクセスを試みたら、ＳＩＧＳＥＧＶは現れる。これらは帯域内信号と呼ばれる。例外信号は、外部でオペレーティングシステムまたは他のプロセスによって生成されることもある。ＳＩＧＨＵＰおよびＳＩＧＡＬＲＭはその例である。これらの外部で生成された例外信号は、帯域外信号と呼ばれる。
【００１２】
プログラムの観点で見ると、例外信号は常時発生し得る。例外信号が発生したら、オペレーティングシステムは前記プログラムの実行を中断し、信号処理を読出す。オペレーティングシステムは、通常すべての例外に対してデフォルト信号処理を定義する。デフォルト信号処理は、デフォルトによって例外信号を受取り、所定アクションを取るか、または単に信号を無視する。しかしオペレーティングシステムは、プロセス固有の処理テーブルを維持し、よって各々のタイプの信号を登録された信号処理に割当てる。たとえばユニックスでは、プログラムは、ｓｉｇａｃｔｉｏｎ（）システムコールを起動させることによってデフォルト信号処理を上書きできる。ｓｉｇａｃｔｉｏｎ（）によってプログラムは、特定の例外信号を受取った時にオペレーティングシステムがどのようなアクションを取るべきか規定できる。アクションは、次のいずれかであり得る。（１）例外信号を無視する、（２）デフォルト信号処理を呼出す、または（３）プログラムによってアドレスを提供された信号処理機能を呼出す。ｓｉｇａｃｔｉｏｎ（）コールを起動させた時に規定され得る他のオプションは、信号処理の実行中にどの信号がブロックされるかを含む。これは、ＣＰＵが特定の中断をマスクするのとほぼ同じ方法で行われる。
【００１３】
ユニックス信号ハンドは、典型的に２個のプロトタイプの1個が提供される。第１信号
処理プロトタイプは、“ｖｏｉｄ  ｓｉｇＨａｎｄｌｅｒ（ｉｎｔ  ｓｉｇＮｕｍ）“である。第１引数は例外信号の数であり、複数の信号を処理するために１個の機能が登録され得る。プログラムは、ＳＡ＿ＳＩＧＩＮＦＯフラッグでｓｉｇａｃｔｉｏｎ（）を呼出すことによってより多くの情報が信号処理に提供するように要求できる。この場合、ユニックス信号処理プロトタイプは、“ｖｏｉｄ  ｓｉｇＨａｎｄｌｅｒ（ｉｎｔ  ｓｉｇＮｕｍ，ｓｉｇｉｎｆｏ＿ｔ  ｓｉｇＩｎｆｏ，ｖｏｉｄ＊ｃｏｎｔｅｘｔ）”になる。
【００１４】
第２パラメータ（“ｓｉｇｉｎｆｏ”）は、信号に関する情報を含む構造であり、何が原因で信号が発生したか、および信号はどこから来たかを示すものを含む。たとえばＳＩＧＩＬＬ信号の場合、ｓｉｇｉｎｆｏ構造は、不当命令のアドレスを含む。このデータは、プロセスに信号特性を処理させるために不可欠なものであり得る。第３パラメータ（“ｃｏｎｔｅｘｔ”）は、信号が現れた時に処理装置ステート（すべてのレジスタを含む）へのアクセスを提供する。このデータもまた信号の正しい処理をさせるために不可欠なものであり得る。信号処理は、このｃｏｎｔｅｘｔを修正させることが可能であり、実行は再開されると、レジスタは、修正後のｃｏｎｔｅｘｔの値に復元される。
【００１５】
オリジナルプログラムコード（ここでは「対象コード」（subject code）と呼ぶ）は、特定タイプの処理装置（「対象処理装置」）に従って書かれている場合、この対象コードは特定のタイプの実行環境を要求し、例外信号を処理するためには相応のメカニズムによってサポートされなければならない。しかしプログラムコード変換においては、それに代えて対象コードは目標コードに変換されて、目標計算システム上で実行される。このとき例外が発生すると、例外信号を処理するための相応のメカニズムを提供することは困難になる。
【００１６】
プログラムコード変換の分野では、命令は目標処理装置上で実行され、例外信号は報告された時、この命令は、一般に例外を対象コードで書かれた信号処理に報告するための条件を満たさないことが明白である。命令は、ほとんど常に目標処理装置上で、対象コードの対応するブロックにおける命令の順序とは異なる順序で実行される。その理由は、第１
に対象コードは、書かれた対象処理装置の命令セットと、目標コードが実行される目標処理装置との相違によるものであり、第２に典型的にプログラムコード変換中に発生する最適化による。それゆえ、目標ステートを信号処理に提供するのは比較的容易であるが、オリジナル対象コードの実行の等価地点を表す正確な対象ステートを確保するのは、困難でコストがかかる。
【００１７】
更に事態を複雑にするのは、現実世界の多数の対象プログラムが多重ユニットの対象コードのユニットを含むことである。単一の対象プログラムは、実行可能な主要対象を含んでよく、多数の対象ライブラリを利用してもよく、その幾つかはプロプライエタリであり、他の幾つかは、典型的に対象オペレーティングシステムの一部として提供される。対象プログラムが実行されると、対象ライブラリ内部で特定の機能に対して機能呼出がなされるので、制御フローは、対象コードの種々のユニットを通過する。
【００１８】
参照によって組入れられる特許文献６（パテントファミリーとして特許文献７）は、対象コードを目標コードに変換中にネイティブコードの特定部分、特にネイティブ機能の呼出を挿入して、対象プログラムにおける対象コード機能の機能呼出は、目標コードにおいて同じ機能のネイティブ等価物の呼出に置き換えられるようにしたネイティブ結合技術を開示する。これによってこれらの機能の対象バージョンを目標コードに変換する際のオーバーヘッドは、回避される。更に、ネイティブバージョンは、対象アーキテクチャでは利用できない目標アーキテクチャのアーキテクチャ特性をより有効に活用できるので、ネイティブバージョンは、同じ機能を遥かに効率的に実行できる。
【特許文献１】国際公開ＷＯ２０００／０２２５２１号
【特許文献２】国際公開ＷＯ２００４／０９５２６４号
【特許文献３】国際公開ＷＯ２００４／０９７６３１号
【特許文献４】国際公開ＷＯ２００５／００６１０６号
【特許文献５】国際公開ＷＯ２００６／１０３３９５号
【特許文献６】国際公開ＷＯ２００５／００８４７８号
【特許文献７】米国特許出願公開ＵＳ２００５／００１５７８１号明細書
【発明の開示】
【発明が解決しようとする課題】
【００１９】
このネイティブ結合技術が非常に有用であるのは、ネイティブコードが直接目標処理装置用に書かれ、またはコンパイルされていて、目標処理装置上で非常に効率的に実行されるからである。しかしネイティブコード、たとえば一般的ライブラリ機能は、正確な対象ステートを維持するワーク等の変換プロセスにおいてしばしばオーバーヘッドを維持しない。すなわちネイティブコードは高速であるが、一般的に変換プロセスと関連した有用なタスクを実行しない。これらのタスク、たとえば対象例外処理に報告するための正確な対象ステートを維持することは、通常トランスレータによって生み出される目標コードによって行われよう。
【００２０】
更に発明者は、例外処理後に対象プログラムを実行再開することに関連した困難を特定した。ネイティブコードを実行再開することは、所望される場合は、特に困難である。
【課題を解決するための手段】
【００２１】
本発明に従い、添付の請求項に記載された装置および方法は提供される。本発明の代替的な特徴は、従属請求項および以下の詳細な説明に記載される。
以下に本発明の実施形態に従って実現可能な種々の側面および利点の概要を記す。これは当業者が後続の詳細な設計議論をより迅速に理解するのを助けるための序文として提供され、添付された請求項の範囲を限定するものではなく、そのような意図もない。
【００２２】
本発明の１つの側面において提供される計算システムは、（第１タイプの）目標処理装置と記憶装置（記憶ユニット）を有し、この記憶装置は、目標処理装置によって実行可能なネイティブコード部分と、（第２タイプの）対象処理装置を含む対象計算アーキテクチャ上で実行可能な複数の対象コード部分を保存する。また、計算システムは、トランスレータとしての変換器を有し、この変換器は、複数の対象コード部分の少なくとも幾つかを目標コードに変換して、目標処理装置上で目標コードの実行を制御し、少なくとも１個の対象コード部分を目標コードに変換する代わりに、少なくとも１個の対象コード部分をネイティブコード部分に結合して目標処理装置上でネイティブコード部分の実行を起動させることを含む。更に、例外処理装置は、目標処理装置上でネイティブコード部分を実行中に生じる例外信号に応答して、（ｉ）ネイティブコード部分に関して目標処理装置における実行の現在地点を表す目標ステートを含む記憶装置に目標ステートデータ構造を保存し、（ｉｉ）対象計算アーキテクチャ上でエミュレート（模倣）された実行地点を表す対象ステートを含む記憶装置内で対象ステートデータ構造を生成する。対象例外処理装置は、記憶装置内の対象ステートデータ構造において提供された対象ステートを基準にして例外信号を処理する。復元装置は、対象例外処理装置による例外信号処理後に、対象ステートデータ構造を使用して目標ステートを記憶装置内の目標ステートデータ構造から目標処理装置に復元することによって実行再開し、次いで目標処理装置に目標ステートに応じてネイティブコード部分を実行再開させる。
【００２３】
本発明の他の側面において、ネイティブ結合中に対象計算アーキテクチャによって実行可能な対象コードから、目標計算アーキテクチャによって実行可能な目標コードへプログラムコード変換することによって例外処理する方法が提供される。ネイティブ結合を行うことによって、通常対象コード部分を目標コードに変換する場所でネイティブコードは、実行される。ネイティブ結合コードの実行中における例外発生時は、この方法は、ネイティブコード結合コードに対する目標計算アーキテクチャにおける実行の現在地点を表す目標ステートを保存し、対象ステートを提供し、そして対象ステートを基準にして例外処理することを含み、よって対象ステートを使用して例外から実行再開し、目標ステートは、復元されてネイティブ結合コードを実行再開する。
【００２４】
実施形態において、対象ステートは、対象計算アーキテクチャにおける実行地点を表し、これは目標計算プラットフォームによってエミュレートされる。特に対象ステートは、対象アーキテクチャのプロシージャスタック（または制御スタック）をエミュレートするために使用される、目標計算プラットフォームのメモリ内の対象スタックデータ構造に対するスタックポインタを含むことができる。慣用的に目標ステートは、対象スタックに保存されて、対象スタックポインタは、保存された目標スタックとリンクする。更に、実施形態において、ネイティブ結合コードの実行は、対象スタックを使用する。更に別の実施形態において、対象ステートは、例外処理から復帰する時に実行制御に切替えるために使用される修正後の対象プログラムカウンタを含む。幾つかの実施形態において復元ルーチンは実行されて、対象ステートを保存された目標ステートにリンクする。
【００２５】
実施形態は、プログラムコード変換を行う計算システムを対象とし、特に対象プログラムから目標コードへの動的バイナリ変換を提供するランタイムトランスレータと組合わせると有用である。
【００２６】
本発明は、ここで論じられる発明の実施形態を遂行するようにした変換装置（トランスレータ装置）に拡張される。また、本発明は、ここに定義されるいずれかの方法を遂行するためにコンピュータによって実行可能な命令を記録したコンピュータ読取可能な記憶媒体にも拡張される。
【００２７】
本発明の少なくとも幾つかの実施形態は、一部または全部、専用ハードウェアを使用す
るように設計されてよい。たとえば実施形態の計算システムは、機能別の専用変換器を包含する。ここで用いる「モジュール」または「ユニット」等の用語は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、または特定のタスクを遂行する特定用途集積回路（ＡＳＩＣ）等のハードウェア装置を含んでよいが、これに限定されるものではない。
【００２８】
代替として、本発明の要素は、アドレス指定可能な記憶媒体上に滞在して、１個以上の処理装置上で実行されるように構成されてよい。このようにして本発明の機能的要素は、幾つかの実施形態において、一例を挙げるならば、コンポーネント、たとえばソフトウェアコンポーネント、プロセス、機能、属性、プロシージャ、サブルーチン、プログラムコードのセグメント、ドライバ、ファームウェア、マイクロコード、回路、データ、データベース、データ構造、テーブル、アレイ、および変数を含んでよい。更に、好適な実施形態は、以下に論じるコンポーネント、モジュールおよびユニットに関して説明されるが、それらの機能要素は、より少数の要素に結合されても、または分離されて追加の要素をなしてもよい。
【発明を実施するための最良の形態】
【００２９】
明細書に組入れられ、その一部を構成する添付の図面は、現在選好される実施形態を表し、以下に説明する。
以下の説明は、当業者が本発明を作成および利用できるようにすることを目的とし、発明者によって考案された本発明の最良の態様の実施について述べる。しかしここでは本発明の一般的原理は定義されるので、当業者は容易に種々の変化例を思いつくであろう。
【００３０】
図１は、以下に詳細に説明するユニット、コンポーネントおよび要素を紹介するために、本発明の実施形態を応用できるシステムおよび環境の概観を示す。図1に基づき、対象
プログラム１７は、少なくとも１個の対象処理装置３を有する対象計算プラットフォーム１上で実行されることは意図される。しかしそれに代えて対象プログラム１７を実行するために、プログラムコード変換を行う変換器１９を介して目標計算プラットフォーム１０は、使用される。変換器１９は、対象コード１７から目標コード２１へのコード変換を行い、よって目標コード２１は、目標計算プラットフォーム１０上で実行可能である。
【００３１】
当業者に熟知されるように、対象処理装置３は、1組の対象レジスタ５を有する。対象
メモリ１８は、とりわけ対象コード１７および対象オペレーティングシステム２を保持する。同様に、図１に例示する目標計算プラットフォーム１０は、複数の目標レジスタ１５を有する目標処理装置１３と、目標オペレーティングシステム２０、対象コード１７、変換コード１９および変換後の目標コード２１を含む複数のオペレーションコンポーネントを保存するメモリ１８を包含する。目標計算プラットフォーム１０は、典型的にマイクロ処理装置をベースとしたコンピュータまたは他の相応のコンピュータである。
【００３２】
一実施形態において、変換コード１９は、対象命令セットアーキテクチャ（ＩＳＡ）を、他の命令セットアーキテクチャの目標コードに変換するためのエミュレータであり、その際に最適化を行い、または行わない。他の実施形態では、トランスレータとしての変換器１９は、プログラムコードの最適化を行うことによって、いずれも同一の命令セットアーキテクチャである対象コードから目標コードへの変換を加速するアクセラレータとして機能する。
【００３３】
トランスレータコードとしての変換コード１９は、好ましくはトランスレータを実装するソースコードのコンパイルされたバージョンであり、目標処理装置１３上でオペレーティングシステム２０と組合わせて実行される。図１に示す構造は一例に過ぎず、たとえば本発明の実施形態は、目標プラットフォームのオペレーティングシステム２０の内部または下方に実装されてよいことは理解されよう。対象コード１７、変換コード１９、オペレ
ーティングシステム２０、およびメモリ１８の記憶メカニズムは、当業者に公知の多様なタイプのいずれであってもよい。
【００３４】
図１に従う装置例において、プログラムコード変換は、ランタイムに目標アーキテクチャ１０上で、目標コード２１の実行中に動的に行われる。すなわち変換器１９は、変換後の目標コード２１とインラインで実行される。変換器１９を介して対象プログラム１７を実行することは、交互に実行される２種類のタイプのコード、すなわち変換コード１９と目標コード２１を包含する。それゆえ目標コード２１は、ランタイムを通して、変換されるプログラムの保存された対象コード１７に基づき変換コード１９によって生成される。
【００３５】
一実施形態において、変換器１９は、対象アーキテクチャ１の関連部分、たとえば対象処理装置３および特に対象レジスタ５をエミュレートして、実際には、目標処理装置１３上で対象プログラム１７を目標コード２１として実行する。好適な実施形態において、少なくとも１個のローバスレジスタ記憶装置２７（対象レジスタバンク２７または抽象的レジスタバンク２７とも呼ぶ）は、設けられている。代替としてマルチ処理装置環境では、対象処理装置のアーキテクチャに応じて１個以上の抽象的レジスタバンク２７は、設けられている。対象ステートの表現は、変換器１９と目標コード２１のコンポーネントによって提供される。すなわち変換器１９は、対象ステートを変数および／またはオブジェクト等の多様な明示的言語デバイスに保存する。変換後の目標コード２１は、比較によって、対象処理装置ステートを非明示的に目標レジスタ１５および記憶場所１８に提供し、これらは目標コード２１の目標命令によって操作される。たとえばローバスレジスタ記憶装置２７の低レベル表現は、単に割当てられたメモリの１領域である。しかし変換器１９のソースコードにおいて、ローバスレジスタ記憶装置２７は、高レベルでアクセスおよび操作できるデータアレイまたはオブジェクトである。
【００３６】
「基本ブロック」という用語は、当業者には熟知されるであろう。基本ブロックとは、正確に１個の入口点と正確に１個の出口点を持ったコードの１区画であり、ブロックコードを単一の制御パスに限定する。この理由で、基本コードは、制御フローの有用な基本的ユニットである。好ましくは変換器１９は、対象コード１７を複数の基本ブロックに分割し、そこにおいて各基本ブロックは、単一の入口点における最初の命令と単一の出口点における最後の命令との間の順次的なセットである（たとえばジャンプ命令、呼出命令または分岐命令）。変換器１９は、これらの基本ブロックの１個のみ選択するか（ブロックモード）、または基本ブロックのグループ（グループブロックモード）を選択できる。グループブロックは、好ましくは２個以上の基本ブロックを含み、これらは、まとめて単一ユニットとして扱われる。更に、トランスレータは、対象コードの同一の基本ブロックを異なるエントリ条件で表すｉｓｏブロックを形成してよい。
【００３７】
好適な実施形態において、オリジナル対象プログラム１７から目標コード２１を生成するプロセスの一部として、対象命令シーケンスに基づき中間表現（ＩＲ）のツリーは、生成される。ＩＲツリーは、対象プログラムによって計算され実行される表現および動作を抽象的に表した。後で目標コード２１は、ＩＲツリーに基づき生成される。ＩＲノードの集合は、正確には有向非巡回グラフ（ＤＡＧ）であるが、口語的に「ツリー」と呼ばれる。
【００３８】
当業者は理解するであろうように、一実施形態において変換器１９は、Ｃ＋＋等のオブジェクト指向プログラミング言語を用いて実装される。たとえばＩＲノードは、Ｃ＋＋オブジェクトとして実装され、他のノードのリファレンスは、それら他のノードに対応するＣ＋＋オブジェクトに対するＣ＋＋リファレンスとして実装される。それゆえＩＲツリーは、互いに種々のリファレンスを含むＩＲノードオブジェクトの集合として実装される。
【００３９】
更にこの実施例においてＩＲ生成は、対象プログラム１７が実行されることになっている対象アーキテクチャの固有の特徴に対応する１組の抽象的レジスタ定義を使用する。たとえば対象アーキテクチャ上の各々の物理的レジスタに対する固有の抽象的レジスタ定義が、存在する（たとえば図１の対象レジスタ５）。そのようなものとしてトランスレータにおける抽象的レジスタ定義は、ＩＲノードオブジェクトへのリファレンスを含むＣ＋＋オブジェクト（すなわちＩＲツリー）として実装されてよい。抽象的レジスタ定義のセットによって参照されるすべてのＩＲツリーの集合体は、ワーキングＩＲフォレストとして参照される（「フォレスト」と呼ぶのは各々は、他のＩＲツリーを参照する抽象的レジスタのルーツを含むためである）。これらのＩＲツリーおよび他のプロセスは、好ましくは変換器１９の部分を形成する。
【００４０】
図１は更に、目標アーキテクチャ１０のメモリ１８内のネイティブコード２８を示す。ここでは対象コード１７をランタイムに変換した結果である目標コード２１と、直接目標アーキテクチャのために書かれまたはコンパイルされたネイティブコード２８とは、互いに区別される。ネイティブコード２８は、変換器１９の外部で生成される。つまり変換器１９は、ネイティブコード２８を動的に生成せず、変換器１９は、ネイティブコード２８を修正または最適化する機会を持たない。
【００４１】
図２は、本発明の実施形態で用いられるネイティブ結合メカニズムを図解するより詳細な概念図である。
対象プログラムの制御フローは、対象コード１７の区画、たとえば対象コードのネイティブバージョンが存在する対象ライブラリに入るのを変換器１９が検出すると、変換器１９によってネイティブ結合は、実行される。変換器１９は、対象コードを変換する代わりに、むしろ目標処理装置１３で実行される等価のネイティブコード２８を生じさせる。実施形態では、変換器１９は、定義されたインタフェース、たとえばネイティブコードコールスタブまたは目標コードコールスタブを使用して、生成された目標コード２１をネイティブコード２８に結合する。このようなインタフェースは、前述の特許文献６（パテントファミリーとして前述の特許文献７）によって詳細に論じられている。
【００４２】
対象プログラム１７は通常、目標コード２１ａに変換される１個以上の対象実行可能ファイル１７ａを含む。逆に対象実行可能ファイル１７ａは、プロプライエタリライブラリおよび／またはシステムライブラリを含む多数の対象ライブラリを参照および利用できる。個々では、第１対象ライブラリ機能１７ｂと第２対象ライブラリ機能１７ｃを示す。変換器１９は、ネイティブ結合を用いて特定の対象ライブラリ機能を、ネイティブコード２８において提供されるネイティブライブラリ内の等価の機能と置き換える。この例では、変換器１９は、第１対象ライブラリ機能Ａを目標コード２１ｂに変換し、第２対象ライブラリ機能Ｂは、ネイティブコード２８におけるネイティブライブラリ機能とネイティブ結合される。これらのネイティブライブラリは、典型的に目標オペレーティングシステム２０の一部であるが、変換器１９と一緒に目標システムに提供されてよい。
【００４３】
具体例として、変換器１９は、ＭＩＰＳのｘ８６変換を実行する。ここではｘ８６目標システムライブラリ“ｌｉｂｃ”は、高度なネイティブｍｅｍｃｐｙ（）（メモリコピー）ルーチンを定義する。これは、ＳＳＥ２ベクトルオペレーションを利用して極めて高速のバイトコピーを実行する。ネイティブ結合を使用すると、ＭＩＰＳ対象コードにおける対象ｍｅｍｃｐｙ機能の呼出は、ネイティブｍｅｍｃｐｙ（）に結合される。これはｍｅｍｃｐｙ（）機能の対象（ＭＩＰＳ）バージョンの変換コストを取り除く。加えて、ｍｅｍｃｐｙ（）のネイティブ（ｘ８６）バージョンは、ネイティブハードウェアの複雑さに適合され、前記ハードウェアにとって最も効率的な方法で機能の所望の効果を達成できる。
【００４４】
ネイティブ結合は、一次的にはライブラリ機能に応用可能であるが、目標アーキテクチャにおいてネイティブコード等価物が得られる対象コードのいずれかの特定区画に対して実行されてもよい。すなわち目標システムライブラリ呼出に加えて、ネイティブ結合は、コードのより任意の置換に、たとえば非ライブラリ機能のネイティブにコンパイルされたバージョンの置換として使用されてよい。更に、ネイティブ結合は、ネイティブアーキテクチャ上で対象システム呼出を実行するために使用でき、対象システム機能のすべての呼出を、対象システム機能の呼出と同じ機能を実行するか、または目標システム呼出周辺のコールスタブとして働く代用ネイティブ機能と置換する。ネイティブ結合は、機能呼出サイトを超えて任意の対象コードの場所で応用されてもよく、任意のコードシーケンス（目標コードまたはネイティブコード）および／または対象プログラムにおける特定地点で挿入または置換された機能呼出を可能にする。
【００４５】
図３は、図１の目標計算プラットフォーム１０のより詳細な概念図であり、本発明の実施形態によって遂行される例外処理に関連して使用されるコンポーネントを示す。
典型的には、対象プログラム１７の実行中に発生する例外処理する１個以上の対象例外処理装置１７０が提供される。プログラムコード変換との関連で、対象例外処理装置１７０の挙動を目標システム上で正確に模倣することが望ましい。図３は、１組の対象例外処理装置１７０を示すが、これは特定タイプの例外に固有の特定対象例外処理および／または特定対象例外処理は、登録されていない場合に使用されるデフォルトシステム例外処理を含んでよい。好都合なのは、対象例外処理装置１７０は、目標プラットフォーム上で対象コード１７の部分として利用できることである。
【００４６】
変換器１９も、目標処理装置１３上で実行するために変換後の対象例外処理の対応するセット１７０´を目標コード２１において提供し、対象例外処理装置１７０をエミュレートする。特定の実施形態において、対象例外処理装置１７０は、必要に応じて実行可能な目標コードバージョンに動的に変換される。以下の説明において対象例外処理装置１７０と言うときは、該当する場合は、対象例外処理の変換後の目標コードバージョンを含むことは理解されるであろう。
【００４７】
図４は、対象ライブラリ機能を呼出してライブラリ機能の実行中に例外処理する時の目標計算プラットフォームにおける実行を示す概念図である。
例外が発生すると、現在の対象ステートは、所定場所（例：スタック）に保存され、実行制御は、相応の対象例外処理装置１７０に渡される。対象例外処理装置１７０は、例外処理するためにこの保存された対象ステート情報を頻繁に使用するであろう。また、例外処理は、決定すれば、例外が発生したのと同じ地点か、または対象プログラムのどこか別の場所で対象プログラムを実行再開するために対象ステートは、使用される。対象例外処理は、例外処理の一部として、たとえば保存されたプログラムカウンタを変更することによって、可能された対象ステートを変更してよい。それゆえプログラムコード変換との関連で、対象例外処理装置１７０の期待される挙動に正確に従うことが望ましい。
【００４８】
当業者は熟知するように、プロシージャ呼出のためのスタックを使用するアーキテクチャにおいて、対象スタック８１は、対象ブログラムによって呼出されたアクティブなサブルーチンまたはライブラリ機能に関する情報を保存する。通常、対象スタック８１は、対象プラットフォーム１のメモリ１８において提供され、多くの処理装置は、そのようなメモリ内のスタックデータ構造を操作するために特別のハードウェアを提供する。対象スタック８１の主要な役割は、例外終了時に各々のアクティブな機能が復帰する地点の経路を保持することであるが、スタックは、他の目的、たとえば機能パラメータや結果を渡し、およびローカルデータを保存するために使用されてもよい。典型的には各々の機能呼出は、復帰アドレスを含む情報とスタック上でリンクさせる。この種のスタックは、例外スタック、制御スタックまたは機能スタックとしても知られている。通常１個のスタックは、
実行される各プログラムまたはプロセスの各タスクと結付いている。スタックの正確な詳細は、多くの要因、たとえば対象ハードウェア、対象オペレーティングシステム、および対象プラットフォームの命令セットアーキテクチャに依存する。
【００４９】
図４では、第１対象ステートＳは、対象レジスタの少なくとも幾つかの内容等の情報を含む。具体的には、第１対象ステートＳは、何よりも対象スタックポインタ（ＳＰ＿Ｓ）および対象プログラムカウンタ（ＰＣ＿Ｓ）の現在値等の情報を含んでよい。呼出元対象プログラム１７ａは、第１対象ライブラリ機能１７ｂを呼出すと、対象レジスタの内容を対象スタック８１に押すことによって第１対象ステートＳは保存されて、対象スタックポインタＳＰ＿Ｓは、更新されて対象スタック８１のトップを指す。呼出された第１対象ライブラリ機能１７ｂを実行する間、ローカルデータは対象スタック８１に保存でき、新しい第２対象ステートＳ´は形成される。例外が発生したら、新しい第２対象ステートＳ´は対象スタック８１に保存されて、実行は対象例外処理装置１７０に渡される。例外処理した後、対象プラットフォームは第３ステートＳ´´にある。この例では、保存された第２ステートＳ´は、例外処理後にスタックから復元されて、第１対象ライブラリ機能１７ｂ内の例外発生地点で実行は再開する。その後、例外は、第１対象ライブラリ機能１７ｂから呼出元プログラム１７ａに復帰すると、保存された第１対象ステートＳは復元される。
【００５０】
図５は、本発明の実施形態において用いられる、ネイティブ結合を行う時、およびネイティブ結合コードにおいて例外処理する時の目標計算プラットフォームにおける実行のステートを示す概念図である。特に、図５は、有用な第２対象ステートＳ´を対象例外処理装置１７０に報告することを可能にし、およびネイティブ結合コード２８で実行再開することを可能にする本発明の実施形態を示す。
【００５１】
ここで論じられているプログラムコード変換のために、変換器１９は、目標プラットフォーム１０上に、対象プラットフォーム１上の要素と一般的な用語で機能的に等価である要素を提供する。この例では、変換器１９は、目標メモリ１８に対象スタック８１の表現を提供し、抽象的レジスタバンク２７を使用して対象レジスタ５を表す。それゆえ、対象コード１７ａは、第１対象ライブラリ機能１７ｂを呼出す時、および対象例外処理装置１７０で例外は処理される時、変換器１９は、図４に示されたすべての構造をエミュレートできる。しかしネイティブ結合を行っている時、変換器１９は、もはやネイティブ結合コード２８を厳密に制御せず、変換器１９は、対象プラットフォームで第２対象ライブラリ機能１７ｃを実行する間正確に対象ステートと等価である第２対象ステートＳ´を維持できない。しかしここに論じる実施形態は、変換器１９は、対象例外処理装置１７０に第２対象ステートＳ´に対する相応の等価物を提供することを可能にする。更に、ここに論じる実施形態によって、例外処理後にネイティブ結合コード２８に復帰するための実行制御は可能となる。
【００５２】
図５において、目標プラットフォーム１０は、目標プログラムカウンタ、目標スタックポインタ、および目標処理装置１３内の目標レジスタ１５の現在のステート等の情報を表す第１目標ステートＴを有する。最初に、第１目標ステートＴは、変換器１９によって呼出元対象コード１７ａから作られた目標コード２１の実行を反映する。目標コード２１を実行すると、上に論じたように目標プラットフォーム上に第１対象ステートＳは提供される。
【００５３】
ネイティブ結合技術は、ネイティブコードライブラリ機能Ｂを実行するために用いられ、ネイティブ結合コード２８を実行中に第１目標ステートＴは、第２目標ステートＴ´に発展する。ネイティブ結合コード２８を実行中に例外が発生すると、（目標ＯＳ２０によって）例外信号は出され、登録された例外処理に渡される。例外処理の一部として、第２
目標ステートＴ´は、目標システム内の相応の記憶場所、この場合は対象スタック８１に保存される。この第２目標ステートＴ´は、ネイティブ結合コード２８に対する目標処理装置１３における実行の現在地点を、例外発生時の地点で表す。また、変換器１９の例外処理装置１９１は、実行制御を対象例外処理装置１７０に渡す前に第２対象ステートＳ´を生成して保存する。対象例外処理装置１７０は起動されて、生成された第２対象ステートＳ´を基準にして例外処理する。ここで第２対象ステートＳ´は、保存された第２目標ステートＴ´の上に位置する対象スタック８１を指す、少なくとも１個の対象スタックポインタ（ＳＰ＿Ｓ）を含む。慣用的に先に保存された第１対象ステートＳは、第２対象ステートＳ´に対する基礎として使用され、対象スタックポインタ（ＳＰ＿Ｓ）の要求された新しい値を含むように修正される。
【００５４】
対象例外処理装置１７０を実行する結果、第３対象ステートＳ´´と、（例外処理するために目標プラットフォーム上で作業は行われるので）第３目標ステートＴ´´は生じる。
【００５５】
しかし、このとき対象例外処理装置１７０は、保存された第２対象ステートＳ´を参照して、例外発生地点でネイティブ結合コード２８における実行再開できる。すなわち保存された第２対象ステートＳ´は、保存された第２目標ステートＴ´を所有し、保存された第２対象ステートＳ´で対象コードを実行再開することによってネイティブ結合コード２８の実行は再開される。
【００５６】
ここで指摘すべきは、図示された実施形態において第１目標ステートＴと第３目標ステートＴ´´は、関連する対象コード１７から変換器１９によって生成された目標コード２１の実行を参照することである。この実施形態では、目標コード２１の実行は、別途に対象スタック８１から、やはり目標プラットフォームのメモリに提供される目標スタック（図示せず）を使用する。対照的に、第２目標ステートＴ´は、対象スタック８１を使用したネイティブコード２８の実行を参照する。それゆえ第２目標ステートＴ´は、対象スタック８１を指すスタックポインタ（ここでは矢印で示す）を含むことは示すが、第１と第２目標ステートはそうではない。
【００５７】
図５に示すように、本発明の実施形態は、ネイティブ結合コード２８の実行のために対象スタック８１を使用する。上述したように、対象スタック８１は、メモリ１８の指定された領域であり、変換器１９は、これを対象コード１７の代わりに対象コードの部分として目標コード変換に用いる。ネイティブコード２８の実行のために対象スタック８１を使用することによって、このネイティブ結合コードを実行中に例外を使用可能にした結果としてネイテイブコンテクストＴ´は、失われることは防がれる。特に、対象例外処理装置１７０の変換後のバージョンを実行する時に対象スタック８１は、保護される。別の利点として、ネイティブ結合の実行に対象スタック８１を使用すると、たとえば“ｌｏｎｇｉｍｐ”機能に類似したライブラリ呼出を実行することによって、対象コード１７における環境は、トランスペアレントに処理されるように変更できる。“ｌｏｎｇｉｍｐ”機能は、ｓｅｔｉｍｐを呼びだすことによって、対象スタックおよび以前に保存された対象ステートを復元する。これは非ローカルな“ｇｏ  ｔｏ”タイプ命令を実行する方法を提供し、典型的には、実行を対象例外処理装置１７０からの復元コードに渡すために使用される。それゆえネイティブ結合に対象スタック８１を使用することによって、対象コード１７は、ｌｏｎｇｉｍｐを呼出せば、資源をトランスペアレントに再請求できる。対象ｌｏｎｇｉｍｐ機能の変換の一部として、変換後のコードは、対象スタックポインタＳＰ＿Ｓをリセットして、ネイティブ結合メカニズムによって割当てられたスタックスペースを再請求する。
【００５８】
本発明の幾つかの代替的な実施形態において、ネイティブコード２８の実行は、対象ス
タック８１の代わりに、目標プラットフォーム１０のメモリ１８内のどこか別の場所にある異なるスタック、たとえば変換器１９のスタック（トランスレータスタック）または別途割当てられたネイティブスタック（図示せず）を使用してよい。
【００５９】
図６は、本発明の実施形態において用いられる、ネイティブ結合コードにおいて例外処理する時の実行制御の流れを示す。
図６において、呼出元対象コード１７ａ（呼出元目標コード２１ａとして実行）は、ネイティブ結合コード２８を呼出し、相応の第１対象ステートＳは、対象スタック８１に保存されて、呼出元目標コード２１ａに復帰することを許す。上記のように第２目標ステートＴ´を提供するネイティブ結合コード２８の間に例外が発生する。ネイティブ結合メカニズムは、制御を変換器１９に戻し、第２目標ステートＴ´は保存される。
【００６０】
上述したように変換器１９は、第２対象ステートＳ´を生成する。本発明のこの側面において、第２対象ステートは、とりわけ変換器１９によって特別に修正後の少なくとも１個の対象プログラムカウンタＰＣ＿Ｓ´を含む。具体的には、対象例外処理装置１７０に渡された特別に修正後の対象プログラムカウンタ値ＰＣ＿Ｓ´は、対象プログラム１７のプログラムアドレスとは対応していない。しかし、対象例外処理装置１７０（対象例外処理装置１７０´として変換されて実行）は、例外発生地点で実行再開しようと試みる時に、この対象プログラムカウンタ値ＰＣ＿Ｓ´を復帰アドレスとして使用してよい。
【００６１】
図６に示す第１実施形態において、変換器１９は、復元装置１９２を含む。これは第２目標ステートＴ´を復元する働きをして、ネイティブ結合コードにおいて実行再開する。一実施形態では、復元装置は、指定場所１７１（図７参照）、たとえばトランスレータのアドレススペース内部のメモリページを提供することによって形成される。変換器１９は、これを対象コード１７の一部として扱う。こうして、変換後の対象例外処理装置１７０´は、特別に修正後の対象プログラムカウンタ値ＰＣ＿Ｓ´によって識別されるプログラムの場所に制御を渡すと、変換器１９は、指定場所１７１に切替えられる。この第１実施形態では、指定場所１７１は、対象コード命令を含み、それらは目標コードとして変更され実行されると第２目標ステートＴ´を復元させて、ネイティブ結合コード２８は、実行再開する。ここで、第２目標ステートＴ´を適切に復元させることは、目標レジスタをそれらの以前の保存されたバージョンで満たすこと、たとえば対象スタック８１から取出すことを含む。
【００６２】
図６に示す第２実施形態において、指定場所１７１は、対象アーキテクチャの命令セットアーキテクチャの範囲内には存在しない特殊ケース命令を含む。この代わりに、変換器１９は、これらの特殊ケース命令を検出し、これに応答して復元ルーチンを実行することによって、保存された第２目標ステートＴ´を復元し、ネイティブコード２８の再開を可能にする。ここでチカバリルーチンは、変換コード１９の一部として提供されることは好都合である。
【００６３】
他の実施形態では、第２対象ステートＳ´に渡されたプログラムカウンタＰＣ＿Ｓ´は所定概念値（例：０Ｘ００００００）であり、目標アーキテクチャのメモリ内の現実の場所とは対応しない。変換器１９は、特別のプログラムカウンタを認識するように構成され、制御を識別された場所に渡す代わりに、実行のフローを切替えて復元ルーチン１７１を実行して、保存された第２目標ステートＴ´を復元し、ネイティブコード２８の再開を可能にする。この具体的な実施形態は、変換器１９に依拠して、対象プログラムカウンタは、所定値になる時を検出して、異なる動作を行う。
【００６４】
再び図５と図６に基づき、ここで論じる実施形態において、第１対象ステートＳは、第２対象ステートＳ´の生成において用いられる。好ましくは、ネイティブコード２８が呼
出された時に第１対象ステートＳは保存されるので、例外発生時に第２対象ステートＳ´を投入するために第１対象ステートＳは利用できる。すなわち古い第１対象ステートＳは、複製されて新しい第２対象ステートＳ´になる。ただし、プログラムカウンタＰＣ＿Ｓは、特別値ＰＣ＿Ｓ´に修正され、および／またはスタックポインタは、対象スタック８１の新しいヘッドに更新される。このメカニズムは、対象例外処理装置１７０に例外処理するのに十分な動作可能な第２対象ステートＳ´を提供する。対象例外処理装置１７０は、たとえば対象プログラムカウンタ値ＰＣ＿Ｓを調べて、対象プログラムのどこで例外が発生したか決定する。次に対象例外処理装置１７０は、どのようにして例外処理するか否か判定する。対象例外処理装置１７０は、通常対象コードプログラム１７のプログラムアドレススペースおよび動的に割当てられたメモリについて何らかの推測をするように記載されている。しかし、対象例外処理装置１７０は、通常システムの他のコンポーネント、たとえばライブラリ機能は滞在するであろうメモリ領域を推測できない。対象例外処理装置１７０に報告された対象プログラムカウンタ値ＰＣ＿Ｓ´は、対象コード１７に割当てられたアドレスレンジ外にある場合、対象例外処理装置１７０は、対象プラットフォームの仮定されたステートに基づき詳細な決定を行うことができず、それゆえ対象プラットフォーム上で処理したであろう類似の方法で例外処理するであろう。
【００６５】
図７は、目標プラットフォームのメモリ部分の概念図である。図７に示すように、対象プログラム１７は、目標メモリ１８内の対象プログラムエリア１７５に、変換コード１９および目標コード２１と並んで割当てられている。対象プログラムエリア１７５は、典型的に仮想アドレスの線形範囲を含み、これらのアドレスは、当業者に公知の仕方で物理的記憶場所の１段階または数段階にマッピングされる。対象例外処理装置１７０に渡された修正後のプログラムカウンタ値ＰＣ＿Ｓ´は、好ましくは対象プログラムエリア１７５の外部にある。更に、対象プログラムは、たとえば作業用記憶領域のために１個以上の動的に割当てられたメモリエリア１７６を有してよく、修正後のプログラムカウンタ値ＰＣ＿Ｓ´も動的に割当てられた対象エリア１７６の外部にあることは好都合である。
【００６６】
図８は、本発明の実施形態によって用いられる、ネイティブ結合コードに対する例外処理方法を示す図式的なフローチャートである。
上述したように、ネイティブ結合コードの実行中に例外が発生する（ステップＳ８０１）。現在の実行ステート（第２目標ステートＴ´）は、保存されて（ステップＳ８０２）、目標プラットフォーム上にネイティブ結合コードの実行を反映する。また、対象ステート（Ｓ´）は、生成されて（ステップＳ８０３）、あたかも例外は、対象プラットフォーム上で対象コードの実行中に発生したかのように、対象プラットフォーム上にエミュレートされた実行地点を反映する。具体的には、生成された第２対象ステートＳ´は、第２目標ステートＴ´は、便宜上保存される対象スタックに対するスタックポインタＳＰ＿Ｓ´を含む。また、第２対象ステートＳ´は、上述したように特別に修正後のプログラムカウンタＰＣ＿Ｓ´を含む。例外が生成された第２対象ステートＳ´を基準にして処理される（ステップＳ８０４）。対象例外処理装置１７０は、例外発生地点で実行再開すべきか否か（すなわちこの場合は、ネイティブ結合コード内にある以前の実行地点、に戻るか否か）を決定する命令を含む（ステップＳ８０５）。ある状況の下では、対象プログラムの実行は中止され、または制御は、プログラムの異なる部分に渡される（ステップＳ８０９）。しかし、例外発生地点で実行再開することが決定された場合、実行は、生成された第２対象ステートＳ´を使用して再開される（ステップＳ８０６）。第２対象ステートＳ´は、保存された第２目標ステートＴ´にリンクし（ステップＳ８０７）、ネイティブ結合コードを実行再開する（ステップＳ８０８）。
【００６７】
要約すると、上に説明したメカニズムおよび実施形態は多くの利点を有し、これにはネイティブ結合コードにおいて発生した例外は、確実かつ効率的に処理されることも含まれる。実施形態において、第２対象ステートＳ´によってリンクされた第２目標ステートＴ
´を保存することによって、例外処理後にネイティブ結合コード２８を実行再開可能となる。また、上記の方法で対象プログラムカウンタを修正することによって、対象例外処理装置１７０は、復元機能１７１が直接または間接的に保存した第２目標ステートＴ´をロードすることによって、制御をネイティブコード２８に戻すことができる。更に、ネイティブコード２８を実行するために対象スタック８１を使用することによって、対象スタック８１は、正常な状態で維持され、資源を効率的に取出すことができる。これらの他の特徴および利点は、当業者にとって上記の説明から、および／または本発明の上記の実施形態を実施すれば明らかであろう。
【００６８】
以上、少数の実施形態を示し説明したに過ぎないが、添付の請求項に定義された本発明の範囲を逸脱することなく、当業者によって種々の変化および修正は行われてよいことは理解されるであろう。
【００６９】
本出願と関連してこの明細書と同時に、またはこの明細書に先立ち提出され、この明細書と共に公開されるすべての資料および文書に注意は向けられ、そのような資料および文書の内容は参照によってこれに組込まれる。
【００７０】
この明細書（添付の請求項、要約および図面を含む）で開示されたすべての特徴は、および／または開示された方法またはプロセスのすべてのステップは、どのような形で組合わせてもよい。ただし、互いに排除する少なくとも幾つかの特徴および／またはステップは除く。
【００７１】
この明細書（添付の請求項、要約および図面を含む）で開示された個々の特徴は、明示的に別様に述べられている場合を除き、同一、同等または類似の目的に資する代替的な特徴で置き換えられてよい。従って、明示的に別様に述べられている場合を除き、開示された各々の特徴は一連の同等または類似の一般的特徴の一例に過ぎない。
【００７２】
本発明は上記の実施形態の詳細に限定されるものではない。本発明はこの明細書（添付の請求項、要約および図面を含む）で開示された特徴の新規な１つ以上のいかなる組合わせ、または開示された方法またはプロセスのステップの新規な１つ以上のいかなる組合わせにも拡張される。
【図面の簡単な説明】
【００７３】
【図１】本発明の実施形態を応用した、計算システムを示すブロック図。
【図２】本発明の実施形態で用いられる、ネイティブ結合メカニズムを図解する概念図。
【図３】本発明の実施形態によって例外処理するため使用される、コンポーネントを示す概念図。
【図４】対象ライブラリ機能を呼出してライブラリ機能の実行中に例外処理する時の、目標計算プラットフォームにおける実行を示す概念図。
【図５】本発明の実施形態において用いられるネイティブ結合を行う時、およびネイティブ結合コードにおいて例外処理する時の、目標計算プラットフォームにおける実行を示す概念図。
【図６】本発明の実施形態において用いられるネイティブ結合コードにおいて例外処理する時の、実行制御の流れを示す概念図。
【図７】目標計算プラットフォームのメモリ部分の概念図。
【図８】本発明の実施形態によって用いられる、ネイティブ結合コードに対する例外処理方法のフローチャート。
【図１】
2009541834.tif 000004
【図２】
2009541834.tif 000005
【図３】
2009541834.tif 000006
【図４】
2009541834.tif 000007
【図５】
2009541834.tif 000008
【図６】
2009541834.tif 000009
【図７】
2009541834.tif 000010
【図８】
2009541834.tif 000011
【国際調査報告】
2009541834.tif 000012
2009541834.tif 000013