(57)【特許請求の範囲】
【請求項１】
ターゲット命令セットアーキテクチャを備えたターゲット装置に、前記ターゲット装置上で実行されるアプリケーションの提供中、前記ターゲット装置のライブラリのライブラリサービスが前記ライブラリのバーチャルファンクションをコールすることを実行するための命令セットアーキテクチャブリッジングレイヤを前記ターゲット装置に提供させるための命令であって、
前記ライブラリサービスは、前記ターゲット命令セットアーキテクチャのために実現され、前記アプリケーションは、少なくとも部分的にソース命令セットアーキテクチャのために実現され、前記バーチャルファンクションをオーバライドした実装を備えたクラスを含み、
前記命令セットアーキテクチャブリッジングレイヤは、実行のため前記アプリケーションをロードし、前記アプリケーションのロードの一部として、前記バーチャルファンクションをオーバライドした実装を検出し、前記コールに応答して、実行制御が前記ソース及びターゲット命令セットアーキテクチャを介し前記バーチャルファンクションをオーバライドした実装に移転されることを可能にするように前記クラスのバーチャルファンクションテーブルを変更するよう構成されるローダを有する命令。
【請求項２】
前記ローダは、前記バーチャルファンクションをオーバライドした実装を検出するため、前記アプリケーションのリロケーションテーブルをトラバースするよう構成される、請求項１記載の命令。
【請求項３】
前記ローダは、前記バーチャルファンクションをオーバライドした実装を、前記バーチャルファンクションをオーバライドした実装へのポインタを含む前記バーチャルファンクションをオーバライドした実装の対応するラッパファンクションにより置換するよう前記バーチャルファンクションテーブルを変更するよう構成される、請求項１記載の命令。
【請求項４】
前記命令セットアーキテクチャブリッジングレイヤは更に、前記ソース及びターゲット命令セットアーキテクチャを介した前記ライブラリへの前記クラスの移転の実行を含む、前記ソース及びターゲット命令セットアーキテクチャを介した前記バーチャルファンクションの無効化実装への実行制御の移転を実行するため連係するよう構成されるライブラリエミュレータとソース命令セットアーキテクチャエミュレータとを含む、請求項３記載の命令。
【請求項５】
前記ソース命令セットアーキテクチャエミュレータは、前記ソース命令セットアーキテクチャの実行コンテクストを維持するよう構成され、
前記ライブラリエミュレータは、ライブラリ実行コンテクストを維持するよう構成される、請求項４記載の命令。
【請求項６】
前記ライブラリエミュレータは更に、前記コールを処理し、前記ソース命令セットアーキテクチャの実行コンテクストに前記コールを設定し、前記コールを対応するゲートにリダイレクトするため、前記コールを前記バーチャルファンクションをオーバライドした実装の対応するラッパファンクションにリダイレクトするよう構成される、請求項５記載の命令。
【請求項７】
前記ライブラリエミュレータは更に、前記コールを前記ソース命令セットアーキテクチャエミュレータにリダイレクトするよう構成される対応するゲートを有する、請求項６記載の命令。
【請求項８】
前記ソース命令セットアーキテクチャエミュレータは更に、前記コールを前記バーチャルファンクションをオーバライドした実装にリダイレクトするよう構成される、請求項７記載の命令。
【請求項９】
前記ソース命令セットアーキテクチャと前記ターゲット命令セットアーキテクチャとは、同一の命令セットアーキテクチャである、請求項１乃至８何れか一項記載の命令。
【請求項１０】
バーチャルファンクションサポートによってソース命令セットアーキテクチャをターゲット命令セットアーキテクチャにブリッジする方法であって、
計算装置により実行される命令セットアーキテクチャブリッジングレイヤのローダが、実行のためアプリケーションをロードするステップであって、前記アプリケーションは、前記計算装置のライブラリのバーチャルファンクションをオーバライドした実装を有するクラスを少なくとも含むソース命令セットアーキテクチャのために少なくとも部分的に実現され、前記計算装置は、前記ターゲット命令セットアーキテクチャを実現する、ロードするステップと、
前記ローダが、前記ロードの一部として、前記バーチャルファンクションをオーバライドした実装を検出するステップと、
前記ローダが、前記クラスを変更後に前記バーチャルファンクションをコールしたライブラリにわたすと、前記バーチャルファンクションをコールしたライブラリのライブラリサービスに応答して、実行制御が前記ソース及びターゲット命令セットアーキテクチャを介し前記バーチャルファンクションをオーバライドした実装に移転することを可能にするよう前記クラスのバーチャルファンクションテーブルを変更するステップと、
を有する方法。
【請求項１１】
前記検出するステップは、前記ローダが前記バーチャルファンクションをオーバライドした実装を検出するため、前記アプリケーションのリロケーションテーブルをトラバースすることを含む、請求項１０記載の方法。
【請求項１２】
前記変更するステップは、前記バーチャルファンクションをオーバライドした実装を前記バーチャルファンクションをオーバライドした実装へのポインタを含む対応するラッパファンクションにより置換するように前記バーチャルファンクションテーブルを変更することを含む、請求項１０記載の方法。
【請求項１３】
前記命令セットアーキテクチャブリッジングレイヤのソース命令セットアーキテクチャエミュレータが、ソース命令セットアーキテクチャ実行コンテクストを維持するステップと、
前記命令セットアーキテクチャブリッジングレイヤのライブラリエミュレータが、ライブラリ実行コンテクストを維持するステップと、
前記クラスを前記ライブラリにわたすと、前記ライブラリのライブラリサービスによる前記バーチャルファンクションのコールに応答して、前記ソース及びターゲット命令セットアーキテクチャを介し前記バーチャルファンクションをオーバライドした実装への実行制御の移転を実行するように前記ソース命令セットアーキテクチャエミュレータと前記ライブラリエミュレータとの間で連係するステップと、
を更に有する、請求項１２記載の方法。
【請求項１４】
前記ライブラリエミュレータが、前記コールを処理し、前記コールを前記ソース命令セットアーキテクチャの実行コンテクストに設定するため、前記バーチャルファンクションをオーバライドした実装に対応する前記ライブラリエミュレータのラッパファンクションに前記コールをリダイレクトするステップを更に有する、請求項１３記載の方法。
【請求項１５】
前記バーチャルファンクションをオーバライドした実装のラッパファンクションに対応する前記ライブラリエミュレータのゲートが、前記コールを前記ソース命令セットアーキテクチャエミュレータにリダイレクトするステップを更に有する、請求項１４記載の方法。
【請求項１６】
前記ソース命令セットアーキテクチャエミュレータが、前記バーチャルファンクションをオーバライドした実装に前記コールをリダイレクトするステップを更に有する、請求項１５記載の方法。
【請求項１７】
前記ソース命令セットアーキテクチャと前記ターゲット命令セットアーキテクチャとは、同一の命令セットアーキテクチャである、請求項１０乃至１６何れか一項記載の方法。
【請求項１８】
ソース命令セットアーキテクチャにおいて少なくとも部分的に実現されるアプリケーションを実行する装置であって、
ターゲット命令セットアーキテクチャを有するプロセッサメモリ構成と、
実行のためアプリケーションをロードするよう構成されるローダを有する命令セットアーキテクチャブリッジングレイヤであって、前記アプリケーションは、ソース命令セットアーキテクチャのために少なくとも部分的に実現され、前記ターゲット命令セットアーキテクチャのために実現されるライブラリのバーチャルファンクションをオーバライドした実装を有するクラスを有し、前記ローダは、前記アプリケーションをロードする一部として、前記バーチャルファンクションをオーバライドした実装を検出し、前記クラスを前記ライブラリにわたした後に前記ライブラリのライブラリサービスによる前記バーチャルファンクションのコールに応答して、実行制御が前記ソース及びターゲット命令セットアーキテクチャを介し前記バーチャルファンクションをオーバライドした実装に移転されることを可能にするよう前記クラスのバーチャルファンクションテーブルを変更するよう構成される、命令セットアーキテクチャブリッジングレイヤと、
を有する装置。
【請求項１９】
前記ローダは、前記バーチャルファンクションをオーバライドした実装を検出するため、前記アプリケーションのリロケーションテーブルをトラバースするよう構成される、請求項１８記載の装置。
【請求項２０】
前記ローダは、前記バーチャルファンクションをオーバライドした実装を、前記バーチャルファンクションをオーバライドした実装へのポインタを含む対応するラッパファンクションにより置換するように前記バーチャルファンクションテーブルを変更するよう構成される、請求項１８記載の装置。
【請求項２１】
前記命令セットアーキテクチャブリッジングレイヤは更に、前記クラスを前記ライブラリにわたした後に前記ライブラリサービスによる前記バーチャルファンクションのコールに応答して、前記ソース及びターゲット命令セットアーキテクチャを介した前記バーチャルファンクションをオーバライドした実装への実行制御の移転を実行するため連係するよう前記プロセッサメモリ構成により実行されるよう構成されるソース命令セットアーキテクチャエミュレータとライブラリエミュレータとを有する、請求項２０記載の装置。
【請求項２２】
前記ソース命令セットアーキテクチャエミュレータは、前記ソース命令セットアーキテクチャの実行コンテクストを維持するよう構成され、
前記ライブラリエミュレータは、ライブラリ実行コンテクストを維持するよう構成される、請求項２１記載の装置。
【請求項２３】
前記ライブラリエミュレータは更に、前記コールを処理し、前記コールを前記ソース命令セットアーキテクチャの実行コンテクストに設定し、前記コールを対応するゲートにリダイレクトするよう構成される前記バーチャルファンクションをオーバライドした実装に対応するラッパファンクションを含む、請求項２２記載の装置。
【請求項２４】
前記ライブラリエミュレータは更に、前記コールを前記ソース命令セットアーキテクチャエミュレータにリダイレクトするよう構成される対応するゲートを有する、請求項２３記載の装置。
【請求項２５】
前記ソース命令セットアーキテクチャエミュレータは更に、前記バーチャルファンクションをオーバライドした実装に前記コールをリダイレクトするよう構成される、請求項２４記載の装置。
【請求項２６】
前記ソース命令セットアーキテクチャと前記ターゲット命令セットアーキテクチャとは、同一の命令セットアーキテクチャである、請求項１８乃至２５何れか一項記載の装置。
【請求項２７】
当該装置は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、ＰＤＡ、ゲームコンソール又はインターネット機器の選ばれた１つである、請求項２６記載の装置。
【請求項２８】
前記プロセッサは、マルチコアプロセッサである、請求項２６記載の装置。
【請求項２９】
前記サービスのライブラリを有するオペレーティングシステムを更に有する、請求項２６記載の装置。
【請求項３０】
命令セットアーキテクチャから独立したアプリケーション実行環境を更に有し、
前記アプリケーションは更に、前記命令セットアーキテクチャから独立したアプリケーション実行環境の少なくとも１つの他のサービスを利用する、請求項２６記載の装置。
【請求項３１】
請求項１乃至９何れか一項記載の命令を記憶するためのコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、“ＩＳＡ  Ｂｒｉｄｇｉｎｇ  ｗｉｔｈ  Ｃａｌｌｂａｃｋ”というタイトルにより２０１２年１月１０日に出願された特許協力条約出願ＰＣＴ／ＣＮ２０１２／０７０１６３に技術的に関連する。
【背景技術】
【０００２】
ここに提供される背景は、本開示のコンテクストを全体的に提供するためのものである。特段の断りがない場合、本セクションに説明される題材は本出願の請求項に対する従来技術でなく、本セクションに含めることによって従来技術であることを自認するものでない。
【０００３】
計算装置は、それの命令セットアーキテクチャ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ：ＩＳＡ）によって特徴付け可能である。典型的には、計算装置はオペレーティングシステム（ＯＳ）サービスを含み、ＯＳサービスはアプリケーション開発者が計算装置上で実行されるアプリケーションを開発することを容易にするため、計算装置のＩＳＡに対して開発されたランタイムライブラリサービス（ＬＩＢ）を含むものであってもよい。例えば、各種スマートフォンは、ＡＲＭプロセッサとそれのＩＳＡとを利用することによって特徴付けされてもよい。これらのスマートフォンは、各スマートフォンについて開発された各種アプリケーションのサポートにおけるｉＯＳやＡｎｄｒｏｉｄなどのＯＳを含むかもしれない。ある計算装置は、Ｊａｖａ（登録商標）又はＡｎｄｒｏｉｄアプリケーションフレームワークなどのＩＳＡから独立した実行環境を提供する。しかしながら、多数のアプリケーションは、ＩＳＡに依存したランタイムライブラリのサービスを呼び出すＩＳＡに依存した部分を含む。さらに、これらのＩＳＡに依存した部分は、ＩＳＡに依存したランタイムライブラリからのコールバックを求めるコールバックファンクションをしばしば含み、このようなコールバックはしばしばランタイムまで発見されず、バイナリ変換などの従来のアプローチをニーズに対処するのに不適切なものにする。さらに、これらのＩＳＡに依存した部分はまた、バーチャルファンクションがコールされるときに適切にコールされる必要があるＩＳＡに依存したランタイムライブラリの継承可能なバーチャルファンクションの実装を無効にすることを含むかもしれない。バイナリ変換などの従来のアプローチは、同様にニーズに対処するのに不適切である。
【図面の簡単な説明】
【０００４】
本発明の実施例は、限定することなく、同様の参照が同様の要素を示し、全てが本開示の実施例による構成される添付図面に示される一例となる実施例により説明される。
【図１】図１は、コールバック及びバーチャルファンクションサポートとのＩＳＡブリッジングが搭載される一例となる計算装置を示す。
【図２】図２は、図１のＩＳＡブリッジングレイヤを更に詳細に示す。
【図３】図３は、ソースＩＳＡのアプリケーションとターゲットＩＳＡのライブラリサービスとの間のコール及びコールバックをブリッジングするための方法を示す。
【図４】図４は、ソースＩＳＡのアプリケーションとターゲットＩＳＡのライブラリサービスとの間のコール及びコールバックをブリッジングするための方法を示す。
【図５】図５は、図３及び４の方法の全ての又は選択された態様を実践するのに構成される命令を有する一例となる非一時的なコンピュータ可読記憶媒体を示す。
【発明を実施するための形態】
【０００５】
コールバック及びバーチャルファンクションサポートとのＩＳＡブリッジングに関連する方法、装置及び記憶媒体が開示される。各種実施例では、少なくとも１つのコンピュータ可読記憶媒体は、命令の実行に応答して、ターゲットＩＳＡを有するターゲット装置が、アプリケーションの提供中にターゲット装置のライブラリのライブラリサービスがライブラリのバーチャルファンクションをコールすることを容易にするためのＩＳＡブリッジングレイヤをターゲット装置に提供することを可能にするよう構成される命令を含むものであってもよい。ライブラリサービスはターゲットＩＳＡのために実現されてもよく、アプリケーションはターゲットＩＳＡと異なってよいソースＩＳＡのために少なくとも部分的に実現されてもよく、バーチャルファンクションの無効化実装を備えるクラスを含む。ＩＳＡブリッジングレイヤは、実行のためアプリケーションをロードし、当該ロード処理の一部としてバーチャルファンクションを検出し、コールに応答して、バーチャルファンクションの無効化実装にソース及びターゲットＩＳＡを介し移転される実行制御を遊行するようにアプリケーションのバーチャルファンクションテーブルを修正するよう構成されるローダを含むものであってもよい。実施例において、ＩＳＡブリッジングレイヤは更に、ライブラリサービスをコールするためのアプリケーションとコールバックファンクションをコールバックするためのライブラリサービスと共に、コールに応答してＩＳＡ間の実行制御移転を有効にするよう連係するよう構成されるソースＩＳＡエミュレータとライブラリエミュレータとを含むものであってもよい。
【０００６】
例示的な実施例の各種態様は、他の当業者に自らの研究の本質を伝えるために当業者により通常用いられる用語を用いて説明される。しかしながら、他の実施例が説明される特徴の一部のみにより実現されてもよいことは当業者に明らかであろう。説明のため、具体的な数字、物質及び構成が例示的な実施例の完全な理解を提供するため与えられる。しかしながら、他の実施例は具体的な詳細なしに実現されてもよいことが当業者に明らかであろう。他の例では、周知の特徴は例示的な実施例を不明瞭にしないように省略又は簡単化される。
【０００７】
各種処理は、例示的な実施例を理解するのに最も役立つ方法により複数の個別の処理として説明されるが、説明の順序はこれらの処理が順序に依存する必要があることを意味するものとして解釈されるべきでない。特に、これらの処理は提示される順序により実行される必要はない。さらに、別々の処理としての各処理の説明は、当該処理が独立して及び／又は別々のエンティティとして実行される必要があることを求めるものとして解釈されるべきでない。別々のモジュールとしてのエンティティ及び／又はモジュールの説明もまた、当該モジュールが別々であり、及び／又は別々の処理を実行することを求めるものとして解釈されるべきでない。各種実施例では、図示及び／又は説明された処理、エンティティ、データ及び／又はモジュールは、マージ、更なるサブパーツへの分割及び／又は省略されてもよい。
【０００８】
“一実施例では”又は“実施例では”というフレーズが繰り返し利用される。当該フレーズは、一般に同一の実施例を参照しないが、そうであってもよい。“有する”及び“含む”という用語は、コンテクストがそうでないことを示さない場合、同義的である。“Ａ／Ｂ”というフレーズは“Ａ又はＢ”を意味する。“Ａ及び／又はＢ”というフレーズは、“（Ａ）、（Ｂ）又は（Ａ及びＢ）”を意味する。“Ａ、Ｂ及びＣの少なくとも１つ”というフレーズは、“（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ａ及びＣ）、（Ｂ及びＣ）又は（Ａ、Ｂ及びＣ）”を意味する。
【０００９】
図１は、本開示の各種実施例によるコールバック及びバーチャルファンクションサポートとのＩＳＡブリッジングが搭載された一例となる計算装置を示す。図示されるように、図示された実施例について、計算装置１０２は、図示されるように互いに接続され、オペレーティングシステム（ＯＳ）１２２、ＩＳＡブリッジングレイヤ１２３及びアプリケーション１２０を実行するよう構成されるプロセッサメモリ構成１０４、グラフィクス処理ユニット（ＧＰＵ）１０６、ディスプレイユニット１０８及びネットワーキングインタフェース１１０を有してもよい。ＯＳ１２２はサービスのライブラリ１２４を有してもよい。さらに、計算装置１０２はまた、アプリケーション１２０とＯＳ１２２との間の任意的なミドルウェア１２１を有してもよい。以下においてより詳細に説明されるように、ＩＳＡブリッジングレイヤ１２３は、ＯＳ１２２（ライブラリサービス１２４を含む）がソースＩＳＡと異なるターゲットＩＳＡにおいて実現される間、（例えば、ＩＳＡから独立したミドルウェア１２１がまた利用されるときなど）アプリケーション１２０がソースＩＳＡにおいて全体的に又は部分的に実現されることを可能にするための各種アプリケーションロード及びランタイム機能又はサービス（限定することなく、ダイナミックバインディングなどを含む）により構成されてもよい。さらに、アプリケーション１２０は、各種条件下においてアプリケーション１２０の各種コールバックファンクション１２５をコールバックすることを各種ライブラリサービス１２４に要求するライブラリサービス１２４の利用特性を含むアプリケーション（特に、ソースＩＳＡを用いて実現される部分）であってもよい。
【００１０】
実施例では、アプリケーション１２０はオブジェクト指向であってもよいし、又はクラス１２６を含むものであってもよい。これらの実施例について、アプリケーション１２０は、ターゲットＩＳＡライブラリサービス１２４から継承したバーチャルファンクション１２７の１以上の無効化実装を有するオブジェクト／クラス１２６を含むものであってもよい。さらに、アプリケーション１２０は、ターゲットＩＳＡライブラリサービス１２４から継承したバーチャルファンクション１２７のこれらの無効化実装（以降、単に無効化実装１２７）を格納するための１以上のバーチャルファンクションテーブル１２９を含むものであってもよい。１以上のバーチャルファンクションテーブル１２９は更に、無効化実装１２７を記述する関連するメタデータを含むものであってもよい。実施例では、アプリケーション１２０は更に、コンパイル時には未決定な部分のランタイム決定を容易にするシンボル名及び他の情報を含むリロケーションテーブル１３１を含むものであってもよい。
【００１１】
実施例では、ＩＳＡブリッジングレイヤ１２３は、各種ライブラリサービス１２４がバーチャルファンクションをコールするとき、これらの無効化実装１２７に異なるＩＳＡを介し適切に移転されるべき実行制御のためのサポートを含むものであってもよい。ＩＳＡブリッジングレイヤ１２３の各種実施例が更に後述される。ＩＳＡブリッジングレイヤ１２３はまた、プロセスバーチャルマシーン（ＰＶＭ）として参照されてもよい。
【００１２】
計算装置１０２は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、ゲームコンソール、インターネット機器又は同様の他の計算装置であってもよい。計算装置１０２の具体例は、限定することなく、カリフォルニア州Ｐａｌｏ  ＡｌｔｏのＨｅｗｌｅｔｔ  Ｐａｃｋａｒｄから利用可能なサーバ、テキサス州ＡｕｓｔｉｎのＤｅｌｌ  Ｃｏｍｐｕｔｅｒから利用可能なデスクトップ若しくはラップトップコンピュータ、カリフォルニア州ＣｕｐｅｒｔｉｎｏのＡｐｐｌｅ  Ｃｏｍｐｕｔｅｒから利用可能なスマートフォン及び計算タブレット、日本の東京の任天堂から利用可能なゲームコンソールなどを含むものであってもよい。
【００１３】
プロセッサメモリ構成１０４は、限定することなく、各種実行速度及び電力消費のシングル若しくはマルチコアプロセッサと、１以上のレベルのキャッシュ及びダイナミックランダムアクセス、ＦＬＡＳＨなどの各種タイプの各種アーキテクチャのメモリとを含む広範なプロセッサメモリ構成を表すことが意図される。各種実施例では、ＧＰＵ１０６は、ＯＳ１２２にビデオ復号化及び／又はグラフィック処理ファンクションを提供するよう構成され、ディスプレイユニット１０８は、ＨＤビデオなどのマルチメディアコンテンツが再生されることを可能にするよう構成されてもよい。同様に、ＧＰＵ１０６及びディスプレイユニット１０８は、当該分野において知られる広範なグラフィックプロセッサ及びディスプレイエレメントを表すことが意図される。同様に、ネットワーク１３４は、当該分野において知られる広範なネットワークを表すことが意図される。ネットワーク１３４の具体例は、有線若しくは無線、ローカル若しくはワイドエリア、プライベート若しくはインターネットを含むパブリックネットワークを含むものであってもよい。
【００１４】
ＯＳ１２２（ライブラリサービス１２４を含む）は、ライブラリサービス１２４の起動を定義するアプリケーションプログラミングインタフェース（ＡＰＩ）を除き、当該技術において知られる広範なオペレーティングシステムエレメントを表すことが意図される。ＯＳ１２２は、メモリリソースを管理し、タスク実行をスケジューリングするよう構成されるカーネル、各種デバイスリソースを管理するよう構成されるデバイスドライバなどの従来のコンポーネントを含むものであってもよい。実施例では、ＯＳ１２２は、ＡｎｄｒｏｉｄアプリケーションフレームワークのサポートにおけるＡｎｄｒｏｉｄのバーチャルマシーンなど、（利用される場合）ミドルウェア１２１のサポートにおけるバーチャルマシーンを有してもよい。実施例について、アプリケーション１２０のコールバックファンクション１２５の起動を容易にするためライブラリサービス１２４の起動を定義することに加えて、ライブラリサービス１２４のＡＰＩはまた、アプリケーション１２０のコールバックファンクション１２５の対応するスタブ及びシグネチャを有してもよい。ＯＳ１２２の具体例は、限定することなく、ワシントン州ＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎから利用可能なＷｉｎｄｏｗｓ（登録商標）オペレーティングシステム、ノースカロライナ州ＲａｌｅｉｇｈのＲｅｄ  Ｈａｔ（登録商標）などから利用可能なＬｉｎｕｘ（登録商標）、Ｏｐｅｎ  Ｈａｎｄｓｅｔ  Ａｌｌｉａｎｃｅにより開発されたＡｎｄｒｏｉｄＴＭ、又はカリフォルニア州ＣｕｐｅｒｔｉｎｏのＡｐｐｌｅ（登録商標）  Ｃｏｍｐｕｔｅｒから利用可能なｉＯＳを含むものであってもよい。
【００１５】
同様に、ミドルウェア１２１は、限定することなく、ＩＳＡから独立したミドルウェアを含む当該分野において知られる広範なミドルウェアエレメントを表すことが意図される。ミドルウェア１２１の具体例は、限定することなく、Ａｎｄｒｏｉｄアプリケーションフレームワーク、Ｊａｖａ（登録商標）、他のアプリケーションフレームワーク又はＩＳＡから独立した実行環境を含むものであってもよい。
【００１６】
同様に、アプリケーション１２０（コールバックファンクション１２５、無効化実装１２７などを含む）は、当該分野において知られる広範なアプリケーションを表すことが意図される。アプリケーション１２０の具体例は、限定することなく、カレンダ、ワープロ、スプレッドシート、Ｔｗｉｔｔｅｒ、Ｆａｃｅｂｏｏｋなどのパーソナルアシスタント、プロダクティビティ若しくはソーシャルネットワーキングアプリケーション、又はブラウザなどの汎用的なアプリケーションエージェントを含むものであってもよい。ブラウザの具体例は、限定することなく、ワシントン州ＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎから利用可能なインターネットエクスプローラ、又はカリフォルニア州Ｍｏｕｎｔａｉｎ  ＶｉｅｗのＭｏｚｉｌｌａから利用可能なＦｉｒｅｆｏｘを含むものであってもよい。
【００１７】
図２を参照して、本開示の各種実施例による一例となるＩＳＡブリッジングレイヤ１２３が示される。図示されるように、実施例について、ＩＳＡブリッジングレイヤ１２３は、限定することなく、ダイナミックバインディングサービスを含む各種ランタイム機能及びサービスを提供するよう構成されるＩＳＡブリッジングローダ２０２、ソースＩＳＡエミュレータ２０４及びターゲットＩＳＡライブラリエミュレータ２０６（以降、単にＬＩＢエミュレータ）を含むものであってもよい。ソースＩＳＡエミュレータ２０４は、ソースＩＳＡコンテクスト２１２及びバイナリ変換エンジン２１５を含むものであってもよい。ソースＩＳＡエミュレータ２０４は、限定することなく、現在の実行命令ポインタ（ＩＰ）などを含むソースＩＳＡアーキテクチャの実行コンテクストをソースＩＳＡコンテクスト２１２において維持してもよい。バイナリ変換エンジン２１５は、ソースＩＳＡ命令をターゲットＩＳＡ命令に変換するよう構成されてもよい。ＬＩＢエミュレータ２０６は、ターゲットＩＳＡライブラリ（ＬＩＢ）コンテクスト２２２、ゲート２２４及びラッパファンクション２２６を含むものであってもよい。ＬＩＢエミュレータ２０６は、ターゲットＩＳＡライブラリの実行コンテクストをターゲットＩＳＡライブラリ（ＬＩＢ）コンテクスト２２２において維持してもよい。各種実施例では、ソース及びターゲットＩＳＡアーキテクチャにおいてアプリケーション１２０によるライブラリサービス１２４のコール処理を容易にするよう構成されるライブラリサービス１２４毎のラッパファンクション２２６及びゲート２２４の１つの対応するペアがあってもよい。同様に、ターゲット及びソースＩＳＡアーキテクチャにおけるライブラリサービス１２４によるコールバックファンクション１２５のコールバックと、バーチャルファンクションがコールされるとき、ターゲット及びソースＩＳＡアーキテクチャにおける無効化実装１２７への実行制御の移転とを容易にするよう構成されるコールバックファンクション１２５毎及び無効化実装１２７毎のゲート２２４及びラッパファンクション２２６の１つの対応するペアがあってもよい。
【００１８】
ＩＳＡブリッジングローダ２０２は、アプリケーション１２０をロードするよう構成されてもよい。アプリケーション１２０をロードする際、ＩＳＡブリッジングローダ２０２は、ライブラリサービスのコールに関連するアプリケーション１２０の何れか未決定のシンボル名をライブラリサービス１２４の適切なものに決定するよう構成されてもよい。実施例では、ＩＳＡブリッジングローダ２０２は、ライブラリサービスのコールに関連するアプリケーション１２０の何れか未決定のシンボル名をライブラリサービス１２４の対応するゲート２２４のアドレスに決定するよう構成されてもよい。さらに、ＩＳＡブリッジングローダ２０２は、コールバックファンクション１２５に対するシンボル名又はリファレンスを内部的な名前に変更し、コールバックファンクション１２５に対するシンボル名又はリファレンスを対応するラッパファンクション２２６に関連付けるよう構成されてもよい。
【００１９】
さらに、ＩＳＡブリッジングローダ２０２は更に、実行のためアプリケーション１２０をロードする際に各種無効化実装１２７を決定するよう構成される擬似リンカファンクションを有してもよい。実施例では、ＩＳＡブリッジングローダ２０２は、ロード処理の一部として、リロケーションテーブル１３１の情報を利用して無効化実装１２７を特定してもよい。実施例では、ＩＳＡブリッジングローダ２０２は更に、適切である場合、ライブラリサービス１２４がバーチャルファンクションをコールするとき、バーチャルファンクションテーブル１２９を変更し、バーチャルファンクションテーブル１２９のエントリを対応するラッパファンクションにより置換することによって、実行制御が無効化実装１２７にＩＳＡを介し移転することを可能にするよう構成されてもよい。実施例では、ラッパファンクションは無効化実装１２７へのポインタを含んでもよい。
【００２０】
ＩＳＡブリッジングローダ２０２は、複数の既知の方法の何れか１つによりＯＳ１２２（又は利用される場合、ミドルウェア１２１）のローダからのロード処理の制御を取得してもよい。このような既知の方法の具体例は、ＯＳ１２２又はミドルウェア１２１によりサポートされるとき、バイナリフォーマットベースの制御移転又はロード／プリロード変数の利用を含むものであってもよい。他の実施例では、ＯＳ１２２（又は利用される場合、ミドルウェア１２１）のローダは、ＩＳＡブリッジングローダ２０２への制御の移転を容易にするよう修正されてもよい。
【００２１】
上述されたように、ソースＩＳＡエミュレータ２０４は、ソースＩＳＡ実行コンテクスト２１２を維持するよう構成されてもよい。ソースＩＳＡエミュレータ２０４は、アプリケーション１２０の実行中にソースＩＳＡ  ＩＰ（命令ポインタ）をトラッキングするよう構成されてもよい。アプリケーション１２０がライブラリサービス１２４を呼び出すことを試みるとき、ソースＩＳＡの実行をモニタリングするソースＩＳＡエミュレータ２０４は、ＬＩＢエミュレータ２０６への実行制御の呼び出し及び移転を行ってもよい。各種実施例では、ソースＩＳＡエミュレータ２０４は、ライブラリサービス１２４の対応するゲート２２４への実行制御の呼び出し及び移転を行ってもよい。
【００２２】
ＬＩＢエミュレータ２０６はまた、ターゲットＩＳＡライブラリ（ＬＩＢ）実行コンテクスト２２２を維持するよう構成されてもよい。
【００２３】
ライブラリサービス１２４に対応するゲート２２４はそれぞれ、コールを処理及び設定するため、ライブラリサービス１２４に対するコールを対応するラッパファンクション２２６にリダイレクトするよう構成されてもよい。一方、コールバックファンクション１２５又は無効化実装１２７に対応するゲート２２４は、対応するラッパファンクション２２６からソースＩＳＡエミュレータ２０４に、バーチャルファンクションに対するコールバック又はコールの実行制御を移転するよう構成されてもよい。各種実施例では、各ゲート２２４は、対応するラッパファンクション２２６又はソースＩＳＡエミュレータ２０４へのリダイレクトを実行するよう構成される命令を有してもよい。各種実施例では、各ゲート２２４の命令は、実行制御リダイレクションを実行するため、バイナリ変換エンジン２１５と連係するよう構成されるソースＩＳＡ命令であってもよい。各種実施例では、各ゲート２２４は更に、対応するラッパファンクション２２６を特定するインジケータを有してもよい。
【００２４】
各種実施例では、対応するライブラリサービス１２４に対するコールを処理及び設定するため、ライブラリサービス１２４に対応する各ラッパファンクション２２６は、ソースＩＳＡコンテクスト２１２からコールの関連するパラメータ値を抽出し、当該コールをソースＩＳＡアプリケーションバイナリインタフェース（ＡＢＩ）フォーマットからターゲットＩＳＡ  ＡＢＩフォーマットに変換し、変換したコールをパラメータ値と共にＬＩＢコンテクスト２２２に保存するよう構成されてもよい。
【００２５】
コールバックファンクション１２５に対するコールバック又はオーバライドされるバーチャルファンクションに対するコールに対して、実行制御はコールバックファンクション１２５又はオーバライド実装１２７の対応するラッパファンクション２２６に移転されてもよい。各種実施例では、コールバックファンクション１２５に対するコールバック又はアプリケーション１２０のオーバライド実装１２７への実行制御の移転を処理及び設定するため、コールバックファンクション１２５又はオーバライド実装１２７に対応する各ラッパファンクション２２６は、オーバライドされるバーチャルファンクションに対するコールバック又はコールをターゲットＩＳＡ  ＡＢＩフォーマットからソースＩＳＡ  ＡＢＩフォーマットに変換し、コールバック又はコールの関連するパラメータ値をオーバライドされたバーチャルファンクションに付属し、オーバライドされるバーチャルファンクションに対する変換されたコールバック又はコールをパラメータ値と共にソースＩＳＡコンテクスト２１２に保存するよう構成されてもよい。
【００２６】
コールバックファンクション１２５又は無効化実装１２７に対応するゲート２２４は、ターゲットＩＳＡ上のソースＩＳＡフォーマットに提供されるコールバックファンクション１２５又は無効化実装１２７をエミュレートするため、コールバックファンクション１２５又は無効化実装１２７に対応するラッパファンクション２２６により準備されるソースＩＳＡコンテクストによりソースＩＳＡエミュレータ２０４を呼び出すよう構成されてもよい。
【００２７】
図３〜４を参照して、本開示の各種実施例によるコールバック及びバーチャルファンクションサポートによる一例となるＩＳＡブリッジング方法が示される。図示されるように、方法３００は、コールを（ソースＩＳＡの）アプリケーション１２０から（ターゲットＩＳＡの）ライブラリサービス１２４にブリッジするためのパート３００ａと、（ターゲットＩＳＡの）ライブラリサービス１２４から（ソースＩＳＡの）アプリケーション１２０のコールバックファンクションにコールバック又は無効化実装１２７への実行制御の適切な移転をブリッジするためのパート３００ｂとの２つのパートを含むものであってもよい。
【００２８】
パート３００ａは、ブロック３０２から開始される。ブロック３０２において、ＩＳＡブリッジングローダ２０２はアプリケーション１２０をロードする。アプリケーション１２０をロードする際、ＩＳＡブリッジングローダ２０２は、ライブラリサービス１２４に対するアプリケーション１２０のシンボル名又はリファレンスを決定し、コールバックファンクション１２５のシンボル名又はリファレンスを修正してもよい。さらに、ＩＳＡブリッジングローダ２０２は、リロケーションテーブル１３１を用いて無効化実装１２７を検出／特定し、上述されるように、バーチャルファンクションテーブル１２９を修正してもよい。当該処理は、図６において更に詳細に示される。
【００２９】
図６を参照して、図示されるように、処理６００はブロック６０２から開始される。ブロック６０２において、ローダ２０２は、リロケーションテーブル１３１の現在のエントリを抽出する。ブロック６０２から、処理６００はブロック６０４に移行する。ブロック６０４において、ローダ２０２は、抽出されたエントリのフィックスアップアドレスがバーチャルファンクションテーブル１２９に属するか判断する。当該判定の結果が肯定的である場合、処理６００はブロック６０６に移行する。ブロック６０６において、ローダ２０２は更に、フィックスアップアドレスがバーチャルファンクションに関連するか判断する。当該判定の結果が肯定的である場合、処理６００はブロック６０８に移行する。ブロック６０８において、ローダ２０２は更に、バーチャルファンクションが無効化されたか判断する。当該判定の結果が再び肯定的である場合、処理６００はブロック６１０に移行する。ブロック６０８において、ローダ２０２は、バーチャルファンクションテーブル１２９のエントリを無効化実装１２７へのポインタを含む対応するラッパファンクションにより置換する。
【００３０】
ブロック６０４、６０６又は６０８の判定の結果が否定的である場合、処理６００はブロック６１２に移行する。ブロック６１２において、ローダ２０２は、リロケーションテーブル１３１の他のエントリが利用可能であるか判断してもよい。当該判定の結果が肯定的である場合、処理６００はブロック６１４に移行する。ブロック６１４において、ローダ２０２は、リロケーションテーブル１３１の次のエントリに移動する。ブロック６１４から、処理６００はブロック６０２に移行し、上述した処理が繰り返される。
【００３１】
ブロック６１２における判定の結果が否定的である場合、処理６００は終了する。
【００３２】
図３を参照して、ブロック３０２から、パート３００ａはブロック３０４に移行する。ブロック３０４において、実行中に、アプリケーション１２０はライブラリサービス１２４の１つをコールする。各種実施例では、アプリケーション１２０は、コールされたライブラリサービス１２４によるコールバックファンクション１２５の１つに対するコールバックを要求してもよい。実施例では、アプリケーション１２０は、コールされたライブラリサービス１２４に対するコールの一部として、コールバックされるべきコールバックファンクション１２５へのポインタを含むものであってもよい。コールバックファンクション１２５にポインタをわたす代わりに、ライブラリサービス１２４のラッパファンクション２２６は、コールバックファンクション１２５の対応するラッパファンクション２２６をわたしてもよい。
【００３３】
一部のコールについて、上述されたように修正された無効化実装１２７及びバーチャルファンクションテーブル１２９を有するオブジェクト／クラスが、ライブラリサービス１２４を有するライブラリにわたされてもよい。
【００３４】
ブロック３０４から、パート３００ａはブロック３０６に移行する。ブロック３０６において、ソースＩＳＡエミュレータ２０４は、ソースＩＳＡ  ＩＰをモニタリングし、当該ＩＰがターゲットライブラリのアドレス範囲内のアドレスを参照していることを判断することなどを介したコールの検出によって、当該コールをリダイレクトし、ＬＩＢエミュレータ２０６のライブラリサービス１２４の対応するゲート２２４に実行制御を移転してもよい。ブロック３０６から、パート３００ａはブロック３０８に移行する。ブロック３０８において、ゲート２２４は更に、コールをリダイレクトし、コールされたライブラリサービス１２４の対応するラッパファンクション２２６に実行制御を移転する。ブロック３０８から、パート３００ａはブロック３１０に移行する。ブロック３１０において、コールされたライブラリサービス１２４のラッパファンクション２２６はコールを処理し、上述されたように、コールされたライブラリサービス１２４による実行のためＬＩＢコンテクスト２２２にコールを設定する。ブロック３１０から、パート３００ａはブロック３１２に移行する。ブロック３１２において、コールされたライブラリサービス１２４のゲート２２４は、ＬＩＢコンテクスト２２２からコールのリターン値を収集し、ソースＩＳＡコンテクスト２１２を更新し、アプリケーション１２５に対するライブラリサービスのコールのリターン値を返すため、ソースＩＳＡエミュレータ２０２に実行制御を移転する。
【００３５】
図４を参照して、パート３００ｂがブロック４０４から開始される。ブロック４０４において、コールされたライブラリサービス１２４の実行中又は終了時、ライブラリサービス１２４は、例えば、アプリケーション１２０によりわたされたコールバックポインタをコールするなどによって、アプリケーション１２０のコールバックファンクション１２５をコールバックするか、又はアプリケーション１２０の実現により無効化されたライブラリのバーチャルファンクションをコールする。ブロック４０４から、パート３００ｂは、コールバック／コールポインタがコールバックファンクション１２５又は無効化実装１２７に対応するラッパファンクション２２６であるとき、ブロック４０６に移行する。ブロック４０６において、実行制御は、変更されたリファレンスに従ってコールバックファンクション１２５又は無効化実装１２７の対応するラッパファンクション２２６に移転される。ブロック４０６から、パート３００ｂはブロック４０８に移行する。ブロック４０８において、ラッパファンクション２２６は、上述されたように、コールバック／コールを処理し、アプリケーション１２０のコールバックファンクション１２５又は無効化実装１２７による実行のため、ソースＩＳＡコンテクスト２１２にコールバック／コールを設定し、その後、コールバックファンクション１２５又は無効化実装１２７の対応するゲート２２４に実行制御を移転する。ブロック４０８から、パート３００ｂはブロック４１０に移行する。ブロック４１０において、コールバックファンクション１２５又は無効化実装１２７に対応するゲート２２４は、コールバック／コールをリダイレクトし、ラッパファンクション２２６により準備されたソースＩＳＡコンテクストによりＩＳＡエミュレータに実行制御を移転する。
【００３６】
さらに、ブロック４１２において、ソースＩＳＡ  ＩＰをモニタリングし、当該ＩＰがコールバックファンクション１２５又は無効化実装１２７に対応するゲートのアドレス範囲内のアドレスを参照していると判断するなどによりコールを検出すると、ソースＩＳＡエミュレータ２０４は、エミュレーションを継続するため、ソースＩＳＡ  ＩＰをコールバックファンクション１２５又は無効化実装１２７にリダイレクトする。ブロック４１２から、パート３００ｂはブロック４１４に移行する。ブロック４１４において、コールバックファンクション１２５又は無効化実装１２７のゲート２２４は、ソースＩＳＡコンテクスト２１２からコールバック又はコールのリターン値を収集し、ＬＩＢコンテクスト２２２を更新し、ライブラリサービス１２４にコールバックファンクション１２５又は無効化実装１２７のリターン値を返すため、ＬＩＢエミュレータ２０６に実行制御を移転する。
【００３７】
図５は、本開示の各種実施例による図３及び４の方法の全ての又は選択された特徴を実践するよう構成される命令を有する一例となる非一時的なコンピュータ可読記憶媒体を示す。図示されるように、非一時的なコンピュータ可読記憶媒体５０３は複数のプログラミング命令５０４を有してもよい。プログラミング命令５０４は、プログラミング命令の実行に応答して、計算装置１０２などの計算装置が、図３及び４を参照して上述されたように、方法３００のＩＳＡブリッジング処理の全ての又は選択された特徴を実行することを可能にするよう構成されてもよい。他の実施例では、プログラミング命令５０４は、複数の非一時的なコンピュータ可読記憶媒体５０２に配置されてもよい。
【００３８】
図１を再び参照して、一実施例について、プロセッサメモリ構成１０４の少なくとも１つのプロセッサは、図３及び４の方法３００の処理（又はその一部）を実践するよう構成されるＩＳＡブリッジングレイヤ１２３の計算ロジック（又はその一部）と共にパッケージ化されてもよい。一実施例について、プロセッサメモリ構成１０４の少なくとも１つのプロセッサは、ＳｉＰ（Ｓｙｓｔｅｍ  ｉｎ  Ｐａｃｋａｇｅ）を形成するため、図３及び４の方法３００の処理（又はその一部）を実践するよう構成されるＩＳＡブリッジングレイヤ１２３の計算ロジック（又はその一部）と一緒にパッケージ化されてもよい。一実施例について、プロセッサメモリ構成１０４の少なくとも１つのプロセッサは、図３及び４の方法３００の処理（又はその一部）を実践するよう構成されるＩＳＡブリッジングレイヤ１２３の計算ロジック（又はその一部）と共に同一のダイ上に統合されてもよい。一実施例について、プロセッサメモリ構成１０４の少なくとも１つのプロセッサは、ＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）を形成するため、図３及び４の方法３００の処理（又はその一部）を実践するよう構成されるＩＳＡブリッジングレイヤ１２３の計算ロジック（又はその一部）と共に同一のダイ上に統合されてもよい。少なくとも１つの実施例について、ＳｏＣは、デスクトップコンピュータ、ラップトップコンピュータ、スマートフォン、計算タブレット、インターネット機器、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、ポータブルゲーム再生装置、サーバ又は他の計算装置において利用されてもよい。
【００３９】
図１を更に参照して、理解を容易にするため、本開示は１つのソースＩＳＡを１つのターゲットＩＳＡにブリッジする１つのＩＳＡブリッジングレイヤ１２３により説明された。しかしながら、本開示はこれに限定されるものでない。実施例では、複数の異なるＩＳＡブリッジングレイヤ１２３が、複数の異なるソースＩＳＡをターゲットＩＳＡにブリッジするため備えられてもよい。これらの実施例のいくつかでは、ディスパッチャが更に、要求されるブリッジングを検出するため備えられてもよく、要求されるＩＳＡブリッジングを提供するため、適切なＩＳＡブリッジングレイヤ１２３をインスタンス化する。
【００４０】
さらに、各種実施例では、本開示は、必要とされるブリッジング量を低下させるため、（ソースＩＳＡにおける）アプリケーション１２０の一部について（ターゲットＩＳＡにおける）置換されたバイナリにより実践されてもよい。他の実施例では、ラッパファンクションの一部などのブリッジングに利用されるリソースの一部は、ＩＳＡブリッジングレイヤ１２３にアクセス可能なリモートサーバに配置されてもよい。
【００４１】
さらに、理解を容易にするため、ＩＳＡブリッジングレイヤ１２３は、異なるソースＩＳＡとターゲットＩＳＡとをブリッジするよう構成されるものとして説明された。しかしながら、本開示はこれに限定されるものでない。各種アプリケーションについて、ＩＳＡブリッジングレイヤ１２３は、同一のソースＩＳＡとターゲットＩＳＡとをブリッジするのに利用されてもよいことが想定される。このようなアプリケーションでは、バイナリ変換エンジン２１５などの説明された要素の１以上は必要でなくてもよい。このようなアプリケーションの一例は、計算装置１０２にエンハンスされた動作セキュリティを提供するためのものであってもよい。他のアプリケーションがまた、このようなブリッジングを利用してもよい。
【００４２】
従って、特定の実施例がここで図示及び説明されたが、他の及び／又は等価な広範な実現形態が図示及び説明される特定の実施例のために置換されてもよいことが当業者に理解されるであろう。
【００４３】
従って、本開示は他のＩＳＡのために開発されたアプリケーションをサポートする１つのＩＳＡによって計算装置の技術的問題に対する解法であってもよいことが理解されるであろう。ここで、アプリケーションは、ときにはコールされたライブラリサービスからのコールバック又はアプリケーションによる無効化実装によるライブラリのバーチャルファンクションに対するコールを要求する利用特性を有する。本開示の効果は、限定することなく、計算装置のＩＳＡにおいてアプリケーションを完全に変換又は再実現する必要を回避することを含むものであってもよい。
【００４４】
本開示は計算装置にエンハンスされたセキュリティを提供する技術的問題に対する解法であることが理解されるであろう。本開示の効果は、限定することなく、提供される隔離のロウバスト性を含むものであってもよい。
【００４５】
特に、開示されたものは、限定することなく、命令の実行に応答して、ターゲット命令セットアーキテクチャを備えたターゲット装置が、ターゲット装置上で実行されるアプリケーションの提供中、ターゲット装置のライブラリのライブラリサービスがライブラリのバーチャルファンクションをコールすることを実行するための命令セットアーキテクチャブリッジングレイヤをターゲット装置に提供することを可能にするよう構成される命令を有する少なくとも１つのコンピュータ可読記憶媒体を含む。ライブラリサービスは、ターゲット命令セットアーキテクチャのために実現され、アプリケーションは、少なくとも部分的にソース命令セットアーキテクチャのために実現されてもよく、バーチャルファンクションの無効化実装を備えたクラスを含む。さらに、命令セットアーキテクチャブリッジングレイヤは、実行のためアプリケーションをロードし、アプリケーションのロードの一部として、バーチャルファンクションの無効化実装を検出し、コールに応答して、実行制御がソース及びターゲット命令セットアーキテクチャを介しバーチャルファンクションの無効化実装に移転されることを可能にするようにクラスのバーチャルファンクションテーブルを変更するよう構成されるローダを有してもよい。
【００４６】
実施例では、ローダは、バーチャルファンクションの無効化実装を検出するため、アプリケーションのリロケーションテーブルをトラバースするよう構成されてもよい。実施例では、ローダは、バーチャルファンクションの無効化実装を、バーチャルファンクションの無効化実装へのポインタを含むバーチャルファンクションの無効化実装の対応するラッパファンクションにより置換するようバーチャルファンクションテーブルを変更するよう構成されてもよい。
【００４７】
実施例では、命令セットアーキテクチャブリッジングレイヤは更に、ソース及びターゲット命令セットアーキテクチャを介したライブラリへのクラスの移転の実行を含む、ソース及びターゲット命令セットアーキテクチャを介したバーチャルファンクションの無効化実装への実行制御の移転を実行するため連係するよう構成されるライブラリエミュレータとソース命令セットエミュレータとを含むものであってもよい。
【００４８】
実施例では、ソース命令セットエミュレータは、ソース命令セットアーキテクチャの実行コンテクストを維持するよう構成され、ライブラリエミュレータは、ライブラリ実行コンテクストを維持するよう構成される。ライブラリエミュレータは更に、コールを処理し、ソース命令セットアーキテクチャの実行コンテクストにコールを設定し、コールを対応するゲートにリダイレクトするため、コールをバーチャルファンクションの無効化実装の対応するラッパファンクションにリダイレクトするよう構成されてもよい。さらに、ライブラリエミュレータは更に、コールをソースＩＳＡ命令エミュレータにリダイレクトするよう構成される対応するゲートを有してもよい。ソースＩＳＡ命令エミュレータは更に、コールをバーチャルファンクションの無効化実装にリダイレクトするよう構成されてもよい。ソース命令セットアーキテクチャとターゲット命令セットアーキテクチャとは、同一の命令セットアーキテクチャであってもよい。
【００４９】
さらに、バーチャルファンクションサポートによってソース命令セットアーキテクチャをターゲット命令セットアーキテクチャにブリッジする方法が開示された。本方法は、計算装置により実行される命令セットアーキテクチャブリッジングレイヤのローダが、実行のためアプリケーションをロードするステップを有し、アプリケーションは、計算装置のライブラリのバーチャルファンクションの無効化実装を有するクラスを少なくとも含むソース命令セットアーキテクチャのために少なくとも部分的に実現され、計算装置は、ターゲット命令セットアーキテクチャを実現する。さらに、本方法は、ローダが、ロードの一部として、バーチャルファンクションの無効化実装を検出するステップと、ローダが、クラスを変更後にバーチャルファンクションをコールしたライブラリにわたすと、バーチャルファンクションをコールしたライブラリのライブラリサービスに応答して、実行制御がソース及びターゲット命令セットアーキテクチャを介しバーチャルファンクションの無効化実装に移転することを可能にするようクラスのバーチャルファンクションテーブルを変更するステップとを有してもよい。
【００５０】
実施例では、検出するステップは、ローダがバーチャルファンクションの無効化実装を検出するため、アプリケーションのリロケーションテーブルをトラバースすることを含むものであってもよい。変更するステップは、バーチャルファンクションの無効化実装をバーチャルファンクションの無効化実装へのポインタを含む対応するラッパファンクションにより置換するようにバーチャルファンクションテーブルを変更することを含むものであってもよい。
【００５１】
実施例では、本方法は更に、命令セットアーキテクチャブリッジングレイヤのソース命令セットアーキテクチャエミュレータが、ソースＩＳＡアーキテクチャ実行コンテクストを維持するステップと、命令セットアーキテクチャブリッジングレイヤのライブラリエミュレータが、ライブラリ実行コンテクストを維持するステップと、クラスをライブラリにわたすと、ライブラリのライブラリサービスによるバーチャルファンクションのコールに応答して、ソース及びターゲット命令セットアーキテクチャを介しバーチャルファンクションの無効化実装への実行制御の移転を実行するように命令セットアーキテクチャエミュレータとライブラリエミュレータとの間で連係するステップとを有してもよい。
【００５２】
実施例では、本方法は更に、ライブラリエミュレータが、コールを処理し、コールをソース命令セットアーキテクチャの実行コンテクストに設定するため、バーチャルファンクションの無効化実装に対応するライブラリエミュレータのラッパファンクションにコールをリダイレクトするステップ、バーチャルファンクションの無効化実装のラッパファンクションに対応するライブラリエミュレータのゲートが、コールをソースＩＳＡ命令エミュレータにリダイレクトするステップ、及び／又はソースＩＳＡ命令エミュレータが、バーチャルファンクションの無効化実装にコールをリダイレクトするステップを有してもよい。
【００５３】
さらに、ソース命令セットアーキテクチャにおいて少なくとも部分的に実現されるアプリケーションを実行する装置が開示された。本装置は、ターゲット命令セットアーキテクチャを有するプロセッサメモリ構成と、実行のためアプリケーションをロードするよう構成されるローダを有する命令セットアーキテクチャブリッジングレイヤとを有してもよく、アプリケーションは、ソース命令セットアーキテクチャのために少なくとも部分的に実現され、ターゲット命令セットアーキテクチャのために実現されるライブラリのバーチャルファンクションの無効化実装を有するクラスを有する。ローダは、アプリケーションをロードする一部として、バーチャルファンクションの無効化実装を検出し、クラスをライブラリにわたした後にライブラリのライブラリサービスによるバーチャルファンクションのコールに応答して、実行制御がソース及びターゲット命令セットアーキテクチャを介しバーチャルファンクションの無効化実装に移転されることを可能にするようクラスのバーチャルファンクションテーブルを変更するよう構成されてもよい。
【００５４】
実施例では、ローダは、バーチャルファンクションの無効化実装を検出するため、アプリケーションのリロケーションテーブルをトラバースするよう構成されてもよい。ローダは、バーチャルファンクションの無効化実装を、バーチャルファンクションの無効化実装へのポインタを含む対応するラッパファンクションにより置換するようにバーチャルファンクションテーブルを変更するよう構成されてもよい。命令セットアーキテクチャブリッジングレイヤは更に、クラスをライブラリにわたした後にライブラリサービスによるバーチャルファンクションのコールに応答して、ソース及びターゲット命令セットアーキテクチャを介したバーチャルファンクションの無効化実装への実行制御の移転を実行するため連係するようプロセッサメモリ構成により実行されるよう構成される命令ソースアーキテクチャエミュレータとライブラリエミュレータとを有してもよい。
【００５５】
実施例では、ソース命令セットエミュレータは、ソース命令セットアーキテクチャの実行コンテクストを維持するよう構成され、ライブラリエミュレータは、ライブラリ実行コンテクストを維持するよう構成される。ライブラリエミュレータは更に、コールを処理し、コールをソース命令セットアーキテクチャの実行コンテクストに設定し、コールを対応するゲートにリダイレクトするよう構成されるバーチャルファンクションの無効化実装に対応するラッパファンクションを含むものであってもよい。ライブラリエミュレータは更に、コールをソースＩＳＡ命令エミュレータにリダイレクトするよう構成される対応するゲートを有してもよい。ＩＳＡ命令エミュレータは更に、バーチャルファンクションの無効化実装にコールをリダイレクトするよう構成されてもよい。
【００５６】
実施例では、本装置は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、ＰＤＡ、ゲームコンソール又はインターネット機器の選ばれた１つであってもよい。プロセッサは、マルチコアプロセッサであってもよい。本装置は、サービスのライブラリを有するオペレーティングシステムを更に有してもよい。本装置は、命令セットアーキテクチャから独立したアプリケーション実行環境を更に有し、アプリケーションは更に記命令セットアーキテクチャから独立したアプリケーション実行環境の少なくとも１つの他のサービスを利用する。
【図１】
0005976930.tif 000002
【図２】
0005976930.tif 000003
【図３】
0005976930.tif 000004
【図４】
0005976930.tif 000005
【図５】
0005976930.tif 000006
【図６】
0005976930.tif 000007