JP5128602B2 - プログラムコード変換に関して動的にリンクされた関数呼び出しを行うための方法及び装置 - Google Patents

プログラムコード変換に関して動的にリンクされた関数呼び出しを行うための方法及び装置 Download PDF

Info

Publication number
JP5128602B2
JP5128602B2 JP2009529783A JP2009529783A JP5128602B2 JP 5128602 B2 JP5128602 B2 JP 5128602B2 JP 2009529783 A JP2009529783 A JP 2009529783A JP 2009529783 A JP2009529783 A JP 2009529783A JP 5128602 B2 JP5128602 B2 JP 5128602B2
Authority
JP
Japan
Prior art keywords
code
function
subject
target
translator
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.)
Active
Application number
JP2009529783A
Other languages
English (en)
Other versions
JP2010506252A5 (ja
JP2010506252A (ja
Inventor
バラクラフ ブラウン、アレクサンダー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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
Priority claimed from GB0619389A external-priority patent/GB2442495B/en
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2010506252A publication Critical patent/JP2010506252A/ja
Publication of JP2010506252A5 publication Critical patent/JP2010506252A5/ja
Application granted granted Critical
Publication of JP5128602B2 publication Critical patent/JP5128602B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、一般に計算機の分野に関し、より詳細には、例えば動的にリンクされた関数呼び出しを含むプログラムコード変換を行うコード変換装置、エミュレータ、及びアクセラレータにおいて有用な、プログラムコード変換の方法及び装置に関する。
組み込みCPU及び非組み込みCPU市場にわたって、有力な命令セットアーキテクチャ(ISA)が知られており、それらのアーキテクチャに対して、多数のソフトウェアが存在し、そのソフトウェアは、性能に関して「加速される」ことが可能であり、またはプロセッサが、その関連するソフトウェアに透過的にアクセスすることが可能な場合に、より一層良好なコスト/性能という利点をもたらすことができる無数の高機能プロセッサへ「変換される」(トランスレートされる)ことが可能である。また、ISAに合わせて固定され、かつ性能又は市場範囲の点において進化が不可能であるが、「合成CPU」共通アーキテクチャの恩恵を享受するであろう、有力なCPUアーキテクチャが存在することも知られている。
第1タイプのコンピュータプロセッサ(“サブジェクト”プロセッサ、対象プロセッサともいう)に関して記述されるプログラムコードを、第2タイプのプロセッサ(“ターゲット”プロセッサ、目的プロセッサともいう)上で実行することが大抵の場合望ましい。この場合、エミュレータまたはトランスレータを使用してプログラムコード変換を実行することにより、サブジェクト・プログラムをターゲット・プロセッサ上で実行することが可能となる。国際公開第WO00/22521号パンフレットには、本発明の実施形態に用い得るようなアクセラレーション、変換、及び共通アーキテクチャ機能を容易にする、プログラムコード変換方法及び装置が開示されている。
変換されるべきサブジェクト・プログラムは大抵、サブジェクト・コードの多数のユニットを備え、サブジェクト・コードはサブジェクト・アプリケーションと多数のサブジェクト・ライブラリを含み、そのいくつかは所有権のあるものである可能性があり、そのいくつかは、サブジェクトOS(“システムライブラリ”)の一部として提供される。サブジェクト・プログラムが実行される際、関数呼び出しとしてのサブジェクト・コードのこれらの異なるユニット間の制御フローのパスがライブラリに対して形成される。
例えばサン マイクロシステムズ Inc.のソラリス(Solaris)のような、特定のオペレーティング・システムにおいては、関数呼び出しを、その関数を実行するライブラリ・コードへリンクするプロセスが実行時に実施されることが可能であり、この手続きは動的リンクとして知られている。動的リンクは、動的リンカー・コードにより実行され、手続きリンクテーブル(PLT)として知られる中間制御構造の使用を含む。
PLTはコンパイルされたプログラムの不可欠な要素であり、そのプログラムに必要とされるライブラリ関数の各々に対するリンク情報を含む入力を備える。プログラムの標準的な実行において、ライブラリ関数への最初の呼び出しが起きた場合、制御フローはその関数に関連したPLT入力へジャンプする。その関数に対するPLT入力は、動的リンカー・コードを含むことによりそのステージのリンクプロセスを制御する。動的リンカー・コードは、当該関数に対するリンク情報を更新させる。リンク情報を更新することにより、動的リンカー・コードは、その関数に対するPLT入力から、その関数を実行するライブラリ・コードへのリンクを形成する。このようにして構築されたリンクは、プログラムの実行の終了まで持続する。
その結果、動的リンカー・コードは、ライブラリにおいてコードの制御フローを渡して関数が実行されるようにすることができる。
プログラムによる関数の後続の呼び出しは、事前にPLT入力に対して行われたように、制御フローを渡す。PLT入力は、関数を実行するライブラリ・コードへのリンクと共に更新されたので、これら後続の呼び出しにおいて、PLTは制御フローをPLTからライブラリへ直接的に渡す。これら後続の呼び出しは、PLT入力の更なる更新も、動的リンカーの更なる呼び出しも必要としない。
特定のオペレーティング・システムにおいて、関数に対するPLT入力と、その関数を実行するためのコードを含むライブラリとの間のリンク形成の実行は、グローバル・オフセット・テーブルのような、PLTに関連するデータを書き換える効果を有する。その結果、書き換えられたグローバル・オフセット・デーブルは、PLT入力においてコードによってランタイムに読み込まれることが可能であり、リンクの形成を可能にする。例えばソラリスのような、特定の別のオペレーティング・システムにおいては、特定の関数に対するPLT入力と、その関数を含むライブラリとの間のリンク形成の実行は、PLT入力自体を形成する実行可能なコードを書き換える別の効果を有する。
上述のような中間制御構造としてのPLTの使用、特に、関数が呼び出される第一の時間においてPLTを備えるコードを書き換えることによる、PLTにおけるリンク情報の書き換えは、動的リンク方法に不可欠な要素としてPLTを用いるサブジェクト・コードに対するプログラムコード変換を複雑にする。
書き換えられたサブジェクト・コード(対象コードともいう)は、既に変換されたターゲット・コード(目的コードともいう)に対応する可能性があるので、ランタイムにおけるコード書き換えは、動的トランスレータに対して問題を提起する。サブジェクト・コードのそのような書き換えが生じた場合、書き換えられたサブジェクト・コードの全てのターゲット・コード変換は、識別され、かつ陳腐化したものとして廃棄されなければならない。従って、トランスレータは、書き換えられている特定のサブジェクト・コード・アドレスに対応する全てのターゲット・コード・シーケンス(すなわち、変換)を識別できなくてはならない。
動的トランスレータにおいて、所与のサブジェクト・アドレスに対応するターゲット・コードを発見して消去することは困難であり、時に不可能ですらある。ある状況においては、変換の間に最適化が適用され、その変換は、それが示すサブジェクト・アドレスの範囲にもはや正確に関連付けることが不可能な変換を生じさせる。これらの状況において、サブジェクト・プログラムが、特定のサブジェクト・アドレスにおいて自身のコードを書き換える場合、トランスレータは、どの個別の変換されたターゲット・コードが無効にされるべきかを識別するすべがない。加えて、マルチスレッド環境における変換されたターゲット・コードの安全な消去は、更なる問題を提起する可能性がある。
コード書き換えに関連する技術は、国際公開第WO05/008487号パンフレットにおいて記載されている。これらの技術は有用であるが、本発明は、ランタイムのPLTにおいて生じるコード書き換えの多数の集中により、国際公開第WO05/008487号パンフレットに記載されているような技術が、PLTの更新を処理する非効率的な方法となり得ることを確認した。このような技術は、無効な変換されたターゲット・コードが実行されないことを保証し得るが、これらの技術を用いてPLTの更新を処理する場合、制御フローの管理はプロセッサ及びメモリ資源の観点で高価であることが分かった。
更に、発明者は、ソラリスオペレーティング・システムにおいて、動的リンカーにより使用されるPLTの更新方法は、ある別のオペレーティング・システムにおける動的リンカーと比較して、標準的な動的リンクされたプログラムを実行するのに必要とされるパーティションの数を顕著に増加させることを確認した。
サブジェクト・プログラム・コードの変換に関して動的にリンクされた関数呼び出しを行う方法が、本方法を活用するコンピュータ装置と共に提供される。好適な実施形態においては、中間制御構造に対応するターゲット・コードを生成することなく、関数リンクテーブルを用いて、サブジェクト・コードにおいて関数呼び出しからサブジェクト・コード関数へリンクを設定することを可能とする。サブジェクト・コードをターゲット・コードへ変換する働きをするトランスレータを含むコンピュータ装置は、サブジェクト・プログラムにおいて動的にリンクされた関数呼び出しが識別されるように構成されても良く、かつ関数を実行するコードとの直接的な関連付けであって、関数を実行するトランスレータによって関数リンクテーブルに集約される情報に基づいた関連付けを特徴付けるターゲット・コードが生成されるように構成されても良い。
動的にリンクされた関数呼び出しを行う技術の好適な実施形態は、サブジェクト・コードにおいて動的にリンクされた関数呼び出しをその関数を実行するコードと都合よく関連付けることを可能とする。好適な実施形態は、コード書き換えに関する国際公開第WO05/008487号パンフレットから知られるような、技術と関連したプロセッシング及びメモリのオーバーヘッドを減少させ得る。
従って、本発明は、例えばプログラムコード変換を行いつつ、コンピュータシステムの性能を改善する。
本発明によれば、添付の特許請求の範囲に記載されているような装置及び方法が提供される。本発明の好適な特徴は、従属する特許請求の範囲及び以下の記載から明らかになるであろう。
一つの側面においては、コンピュータ装置であって、ターゲット・プロセッサ、及びサブジェクト・プロセッサ上での実行のためのサブジェクト・コードを受信し、かつターゲット・プロセッサ上での実行のためのターゲット・コードを生成するように構成されたトランスレータを備え、トランスレータは、(a)サブジェクト・コードにおいて中間制御構造を介してサブジェクト・リンカー・コードへサブジェクト制御フローを渡すように構成された、一つ又は複数の動的にリンクされたサブジェクト関数呼び出しを備えるサブジェクト・コードを受信することここで前記中間構造を介して動的にリンクされた関数呼び出しを、関数を実行するサブジェクト・コードに関連付けることが可能である、(b)受信したサブジェクト・コードにおいてそのような動的リンクされた関数呼び出しを識別して、そのような動的にリンクされた関数呼び出しを、中間制御構造に対応するターゲット・コードを生成することなく、対応する関数を実行するコードに関連付けることを行うように構成されるコンピュータ装置が提供される。
トランスレータは、受信したサブジェクト・コードにおいて、動的にリンクされたサブジェクト関数呼び出しを識別し、受信したサブジェクト・コードの最初の変換において動的にリンクされた関数呼び出しに関するリンク情報を収集し、及び受信したサブジェクト・コードの後続の変換において収集された情報を使用するように構成されても良い。コンピュータ装置は、後続の変換において収集された情報を用いて、識別された関数呼び出しから、対応する関数を実行するコードへ制御フローを受け渡すように構成されても良い。
コンピュータ装置は、トランスレータが、サブジェクト・コードの手続きリンクテーブル(PLT)を介してサブジェクト・リンカー・コードへサブジェクト制御フローを渡すように構成された、一つ又は複数の動的にリンクされたサブジェクト関数呼び出しを含むサブジェクト・コードを受信する場合、これらの関数呼び出しは、PLTに対応するターゲット・コードを生成することなく、受信されたサブジェクト・コードにおいて、トランスレータにより識別され、対応する関数を実行するコードに関連付けられるように構成されても良い。
別の側面においては、ターゲット・プロセッサにおいて実行されるプログラムコード変換の方法が提供され、本方法はサブジェクト・コードを受信することであって、受信されたサブジェクト・コードは、サブジェクト・コードにおいて中間制御構造を介してサブジェクト制御フローをサブジェクト・リンカー・コードへ渡して、それにより関数を実行するサブジェクト・コードに動的にリンクされたサブジェクト関数呼び出しを関連付けるように構成された、一つ又は複数の動的にリンクされたサブジェクト関数呼び出しを含む、前記受信すること、受信されたサブジェクト・コードにおいてこのような動的にリンクされた関数呼び出しを識別すること、及びターゲット・プロセッサにおいて実行するターゲット・コードを生成することであって、ターゲット・プロセッサにおいて、そのような動的にリンクされた関数呼び出しは、中間制御構造に対応するターゲット・コードを生成することなく、対応する関数を実行するコードに関連付けられる、生成することを備える。
更に別の側面においては、コンピュータで読み取り可能なメディアが提供され、メディアは、その上に記録されたコンピュータにより実行可能な、ターゲット・プロセッサ上で実行されるプログラムコード変換の方法を実行するための命令を有し、その方法はサブジェクト・コードを受信することであって、受信されたサブジェクト・コードはサブジェクト・コードにおいて中間制御構造を介してサブジェクト制御フローをサブジェクト・リンカー・コードに渡して、それにより関数を実行するサブジェクト・コードに動的にリンクされたサブジェクト関数呼び出しを関連付けるように構成された、一つ又は複数の動的にリンクされたサブジェクト関数呼び出しを含む、前記受信すること、受信されたサブジェクト・コードにおいてこのような動的にリンクされた関数呼び出しを識別すること、及びターゲット・プロセッサにおいて実行するターゲット・コードを生成することであって、ターゲット・プロセッサにおいて、そのような動的にリンクされた関数呼び出しは、中間制御構造に対応するターゲット・コードを生成することなく、対応する関数を実行するコードに関連付けられる、生成することを備える。
更に別の側面においては、トランスレータが提供され、トランスレータサブジェクト・コードを受信し、かつターゲット・プロセッサ上で実行するターゲット・コードを生成するように構成され、トランスレータサブジェクト・コードを受信するように構成され、受信されたサブジェクト・コードは、サブジェクト・コードにおいて中間制御構造を介してサブジェクト・リンカー・コードをサブジェクト制御フローへ渡して、それにより関数を実行するサブジェクト・コードに動的にリンクされたサブジェクト関数呼び出しを関連付けるように構成された、一つ又は複数の動的にリンクされたサブジェクト関数呼び出しを含み、受信されたサブジェクト・コードにおいて、このような動的にリンクされた関数呼び出しを識別するように構成され、及びターゲット・プロセッサ上で実行するターゲット・コードを生成するように構成され、ターゲット・プロセッサにおいて、そのような動的にリンクされた関数呼び出しは、中間制御構造に対応するターゲット・コードを生成することなく、対応する関数を実行するコードに関連付けられる。
上記は、本発明の実施形態の種々の側面の概要である。これは、当業者がこの後の本発明の詳細な議論をより迅速に理解するように導入として提供されたものであって、本明細書に添付した特許請求の範囲の技術思想を決して限定するものではなく、そのように意図されたものでもない。
本発明の実施形態が適用される装置を示すブロック図である。 本発明の実施形態に用いられる変換ユニットの概略図である。 本発明の実施形態に用いられる装置を示すブロック図である。 関数呼び出しを行う方法の例を説明するフロー概略図である。
本明細書の一部に組み込まれ、そして本明細書の一部を構成する添付の図面は、現時点において好適である実施形態を示す。
以下の記載は、当業者が本発明を実施し、かつ使用することを可能とするよう提供され、本願発明者により意図される、本発明を実施する最良のモードを説明する。しかしながら、本発明の一般的原理が本明細書において詳細に定義され、改良されたプログラムコード変換方法及び装置が提供されているので、当業者には種々の変更が容易に理解されるであろう。
図1を参照すると、サブジェクト・プログラム17は、サブジェクト・プロセッサ3を有するサブジェクト計算プラットフォーム1上で実行されることを意図されている。しかしながら、ターゲット計算プラットフォーム10を代わりに使用して、サブジェクト・プログラム17を、プログラムコード変換を実行するトランスレータ・コード19を介して実行する。トランスレータ・コード19は、サブジェクト・コード17からターゲット・コード21へのコード変換を実行して、ターゲット・コード21をターゲット計算プラットフォーム10上で実行可能にする。
当業者には良く知られているように、サブジェクト・プロセッサ3は一組のサブジェクト・レジスタ5を有する。サブジェクト・メモリ8は、とりわけ、サブジェクト・コード17及びサブジェクト・オペレーティング・システム2を格納する。同様に、図1の例示的ターゲット計算プラットフォーム10は、複数のターゲット・レジスタ15を有するターゲット・プロセッサ13と、ターゲット・オペレーティング・システム20、サブジェクト・コード17、トランスレータ・コード19、及び変換されたターゲット・コード21を含む複数の動作コンポーネントを格納するメモリ18とを含む。ターゲット計算プラットフォーム10は通常、マイクロプロセッサ・ベースのコンピュータ、又は他の適切なコンピュータである。
一実施形態においては、トランスレータ・コード19は、サブジェクト命令セットアーキテクチャ(ISA)のサブジェクト・コードを、別のISAの変換されたターゲット・コードに、最適化を行なって、または最適化を行なうことなく、変換するエミュレータである。別の実施形態においては、トランスレータ・コード19は、プログラムコードの最適化を実行することにより、サブジェクト・コードを各コードが同じISAであるターゲット・コードに変換するアクセラレータとして機能する。
トランスレータ・コード19は、適切には、トランスレータを実装するソースコードのコンパイルされたバージョンであり、オペレーティング・システム20と連動してターゲット・プロセッサ13上で実行される。図1に示す構造は例示に過ぎず、例えば、本発明の実施形態によるソフトウェア、方法、及びプロセスは、オペレーティング・システム20内の、又はオペレーティング・システム20の下位にあるコードとして実装し得ることを理解されたい。サブジェクト・コード17、トランスレータ・コード19、オペレーティング・システム20、及びメモリ18の格納方法は、当業者に既知のような広範囲の種々のタイプの内の任意のものであって良い。
図1による装置においては、プログラムコード変換はランタイムに動的に行なわれ、ターゲット・コード21が実行されている状態で、ターゲット・アーキテクチャ10上で実行される。すなわち、トランスレータ・コード19は、変換されたターゲット・コード21とインラインで実行される。トランスレータ・コード19を介してサブジェクト・プログラム17を実行することは、二つの異なるタイプのコードを含み、トランスレータ・コード19及びターゲット・コード21を交互に実行する。従って、ターゲット・コード21は、変換されているプログラム中の格納されたサブジェクト・コード17に基づいて、トランスレータ・コード19によってランタイムを通して生成される。
一実施形態では、トランスレータ・コード19は、サブジェクト・プログラム17をターゲット・コード21としてターゲット・プロセッサ13上で実際に実行しつつ、サブジェクト・プロセッサ3、及び特にサブジェクト・レジスタ5のような、サブジェクト・アーキテクチャ1の関連部分をエミュレートする。好適な実施形態では、少なくとも一つのグローバル・レジスタ格納部27が設けられる(サブジェクト・レジスタ・バンク27又は抽象レジスタ・バンク27とも表記される)。マルチプロセッサ環境では、任意的に、一つよりも多くの抽象レジスタ・バンク27が、サブジェクト・プロセッサのアーキテクチャに従って設けられる。サブジェクト状態の表現は、トランスレータ・コード19及びターゲット・コード21の構成要素によって提供される。すなわち、トランスレータ・コード19はサブジェクト状態を、変数及び/又はオブジェクトのような種々の明示的なプログラミング言語装置において格納する。これと比較すると、変換されたターゲット・コード21は、ターゲット・レジスタ15及び記憶領域18に暗黙のうちに格納されるサブジェクト・プロセッサ状態を供給し、これらのターゲット・レジスタ15及び記憶領域18は、ターゲット・コード21のターゲット命令によって操作される。例えば、グローバル・レジスタ格納部27の低レベル表現は、割当てられたメモリの単なる領域である。しかしながら、トランスレータ・コード19のソースコードにおいては、グローバル・レジスタ格納部27は、高いレベルでアクセスされ、かつ操作されることが可能なデータアレイまたはオブジェクトである。
「基本ブロック」という用語は、当業者には良く理解されるであろう。基本ブロックは、厳密に一つの入力ポイント、及び厳密に一つの終了ポイントを有するコードセクションであり、このコードセクションは、ブロックコードを単一の制御パスに制限する。この理由で、基本ブロックは有用な基本制御フロー単位である。適切には、トランスレータ・コード19はサブジェクト・コード17を複数の基本ブロックに分割し、各基本ブロックは、単一の入力ポイントにおける先頭命令と、単一の終了ポイントにおける末尾命令との間の連続的な命令セットである(ジャンプ、呼び出し、又は分岐命令のような)。トランスレータ・コード19は、これらの基本ブロックの内の一つの基本ブロックだけを選択しても良く(ブロックモード)、又は1グループの基本ブロックを選択しても良い(グループブロックモード)。一つのグループブロックは適切には、二つ以上の基本ブロックを含み、これらの基本ブロックは一括して単一ユニットとして処理されることになる。更に、トランスレータは、サブジェクト・コードの同じ基本ブロックを異なる入力条件で表現するアイソ・ブロックを形成しても良い。
好適な実施形態では、中間表現ツリーは、ターゲット・コード21を元のサブジェクト・プログラム17から生成するプロセスの一部として、サブジェクト命令シーケンスに基づいて生成される。IRツリーは、サブジェクト・プログラムによって計算される表現及び実行される動作の抽象表現である。後の時点で、ターゲット・コード21はIRツリーに基づいて生成される。IRノード群の集合は、実際は非巡回有向グラフ(DAG)であるが、通称として「ツリー」と表記される。
当業者に理解されるように、一実施形態では、トランスレータ・コード19は、C++のようなオブジェクト指向プログラミング言語を用いて実装される。例えば、IRノードは、C++オブジェクトとして実装され、他のノードへの参照は、これらの他のノードに対応するC++オブジェクトへのC++参照として実装される。従って、IRツリーは、互いに対する種々の参照を含むIRノードオブジェクトの集合として実装される。
更に、議論されている実施形態においては、IR生成は、一組の抽象レジスタ定義を使用し、これらの抽象レジスタ定義は、サブジェクト・アーキテクチャの特定の機能に対応し、サブジェクト・プログラム17は、サブジェクト・アーキテクチャ上で実行されることが意図されている。例えば、固有の抽象レジスタ定義がサブジェクト・アーキテクチャ上の各物理レジスタ(すなわち、図1のサブジェクト・レジスタ5)に対して存在する。そのように、トランスレータにおける抽象レジスタ定義は、IRノードオブジェクト(すなわちIRツリー)への参照を含むC++オブジェクトとして用いることができる。一組の抽象レジスタ定義によって参照される全てのIRツリーの集合は、ワーキングIRフォレストと表記される(「フォレスト」と表記されるのは、フォレストが複数の抽象レジスタルートを含み、これらの抽象レジスタルートの各々は一つのIRツリーを参照するからである)。これらのIRツリー及び他のプロセスは、トランスレータ・コード19の一部を適切に形成する。
図2は、ターゲット計算プラットフォーム10上で実行される場合のトランスレータ・コード19を更に詳細に示している。上に議論したように、トランスレータ・コード19のフロントエンドはデコーダユニット191を含み、デコーダユニット191はサブジェクト・プログラム17の現時点で必要とされるセクションをデコードして複数のサブジェクト・コードブロック171a,171b,171c(これらのサブジェクト・コードブロックは通常それぞれサブジェクト・コードの一つの基本ブロックを含む)を提供することもでき、各サブジェクト・ブロックに関するデコーダ情報172、及びサブジェクト・ブロックに含まれ、かつトランスレータ・コード19の後の時点での動作を支援するサブジェクト命令を提供することもできる。或る実施形態では、トランスレータ・コード19のコアにおけるIRユニット192は中間表現(IR)を、デコードされたサブジェクト命令に基づいて生成し、最適化が中間表現に対して適宜行なわれる。トランスレータ・コード19のバックエンドの一部としてのエンコーダ193は、ターゲット・プロセッサ13により実行されることが可能なターゲット・コード21を生成する(設置する)。この単純化された例では、三つのターゲット・コードブロック211a〜211cが生成され、サブジェクト・コードブロック171a〜171cをサブジェクト・プラットフォーム1上で実行することと等価なことが、ターゲット・プラットフォーム10上で実行される。また、エンコーダ193は、ヘッダコード及び/又はフッタコード212を、ターゲット・コードブロック211a〜211cの幾つかの、または全てのターゲット・コードブロックに対して生成することができ、ヘッダコード及び/又はフッタコード212は、ターゲット・ブロックが動作する環境を設定するような機能、及び必要に応じて制御をトランスレータ・コード19に戻すような機能を実行する。
図3は、本発明の実施形態により用いられるような装置を示す更に詳細な概略図である。図3の説明のための具体例において、トランスレータ・コード19はSPARCからx86への変換を実行するように構成されている。
サブジェクト・コード17は、ターゲット・コード21aに変換されるべきサブジェクト実行ファイル17aを備える。サブジェクト実行ファイル17aは、所有権のあるライブラリ及び/又はシステムライブラリを含む多数のサブジェクト・ライブラリを順に参照してもよく、その中の関数を利用しても良い。二つの例示的なライブラリ17b、17cが図示されている。
サブジェクト実行ファイル17aは、サブジェクト・プロセッサのオペレーティング・システムと互換性のある実行ファイルフォーマットにより構成されている。典型的には、サブジェクト実行ファイル17aは、コード17a_1の本文と、ヘッダ17a_2とを備える。ヘッダ17a_2は、コード17a_1の本文に関する情報を提供し、例えばその情報は、サブジェクト実行ファイルを解析する際に有用な情報、およびサブジェクト実行ファイル17aが実行される場合、動的リンクを実行するために用いられる情報である。「ヘッダ」として参照されているが、ヘッダ17a_2は、完全に、又は部分的に、実行ファイル17aの最初の部分から離れて存在しても良い。
図3の説明のための具体例において、サブジェクト実行ファイル17aは、実行可能リンクフォーマット(ELF)に従って構成されている。ELF標準は広く用いられており、この構造のファイルのヘッダ17a_1は、サブジェクト実行ファイル17aに関連した手続きリンクテーブル(PLT)17dに関する情報を含む。
サブジェクト・コード17がサブジェクト・プロセッサ3上でネイティブに実行されている場合、サブジェクト実行ファイル17aにおける関数ライブラリ17b及び17cへの呼び出しは、PLT 17d(PLT)の利用及びサブジェクト・リンカー・コード17eにより実施される。この意味で、サブジェクト・リンカー・コード17eは、PLT 17dを中間制御構造として用い、サブジェクト実行ファイル17aにおいて動的にリンクされた関数を処理する。
サブジェクト関数呼び出しは、サブジェクト・リンカー・コード17eへ制御フローを渡すように構成され、サブジェクト・リンカー・コード17eは、サブジェクト関数呼び出しと関連したPLT 17dにおいてリンク情報を書き換えてそれにより関数を実行するサブジェクト・コードへサブジェクト関数呼び出しをリンクするように構成されている。
サブジェクト・コードがサブジェクト・プロセッサ上でネイティブに実行されている場合、サブジェクト・ライブラリ17bの関数へサブジェクト実行ファイル17aの関数呼び出しをリンクするためにPLT 17dが用いられる手続きは、本明細書の導入部分において記載されており、この手続きは、当業者にとって既知であろう。ソラリスオペレーティング・システムにおけるランタイム・リンク及びPLTの使用に関する更なる情報は、以下において参照することが可能である。
http://docs.sun.com/app/docs/doc/817−1984/6mhm7pl1b
また、図3には、リンク検査関数を実行するサブジェクト・コードが示されており、これは、以後リンク・オーディター17fとして参照される。ソラリスオペレーティング・システムにおいて、リンク・オーディター17fは、オペレーティング・システムによって提供されるリンク検査インターフェースと互換性のあるコードを用いることによって、リンカーの動作を監視することが可能である。ソラリスリンク検査インターフェースは、rtld−auditとして知られている。rtld−auditに関する更なる情報は、以下において参照することが可能である。
http://docs.sun.com/app/docs/doc/817−1984/6mhm7pl24
rtld−auditインターフェースに適合するリンク・オーディターは、実行ファイルに不可欠な要素としてロードされ、そこに含まれる検査ルーチンは、リンカーの実行の種々のステージにおいて、サブジェクト・リンカー・コード17eによって自動的に呼び出される。rtld−auditインターフェースを用いることで、リンク・オーディターが、サブジェクト・コード実行ファイル17a、及びサブジェクト・ライブラリ17d及び17cのようなロードされたオブジェクトに関する情報にアクセスすることが可能となる。更に、リンク・オーディターは、アプリケーションとライブラリとの間の情報の伝達に関連した他の情報と同様に、そのようなロードされた複数のオブジェクト間において形成される関係に関する情報へアクセスすることが可能である。更なる情報は、以下において参照することが可能である。
http://docs.sun.com/app/docs/doc/806−0641/6j9vuqujm
リンク・オーディターは、リンカーにより実行されるPLT更新の期間中、関数呼び出しの個別の起動、及びのその戻り値を監視することも可能である。
サブジェクト・プロセッサ3上でネイティブに実行されている場合、サブジェクト・ライブラリ17dにおける関数呼び出しは、PLT 17dへサブジェクト制御フローを渡し、その後、サブジェクト・リンカー・コード17eへ渡すことになる。サブジェクト・リンカー・コード17eは、サブジェクト関数呼び出しに関連するPLT 17eに固有のリンク情報を書き換えてそれにより、サブジェクト関数に対するPLT入力への後続の呼び出しを、サブジェクト・ライブラリ関数17dに固有の関数を実行するための関連するサブジェクト・コードへリンクすることになる。
リンカーの動作を監視するためのリンク・オーディターを用いた関数リンクテーブルの生成
サブジェクト実行ファイル17aに対応するターゲット・コード21を生成する前に、トランスレータ・コード19は、サブジェクト実行ファイル17aのヘッダ17a_1を参照することによって、及び/又はサブジェクト実行ファイル17aの一回又は複数回のスキャンを実行することによって、サブジェクト実行ファイル17aに関する情報を収集する。トランスレータ・コード19は、収集された情報を用いて、サブジェクト実行ファイル17aに関連するPLT 17dを識別する。
トランスレータ・コード19がサブジェクト実行ファイル17aに関する情報を収集した後、トランスレータ・コード19は初めてサブジェクト実行ファイル17aを介して動作し、そのように動作する際、サブジェクト実行ファイル17aにおける動的にリンクされた関数呼び出しと、対応する関数を実行するコードとの間のリンクを設定する。
トランスレータ・コード19がサブジェクト実行ファイル17aを介して動作する際、サブジェクト・コード17aにおいて発見される、動的にリンクされた関数呼び出しの各々は、トランスレータ・コード19に保持された関数リンクテーブル(FLT)19aと照合される。サブジェクト・コード17aの最初の変換において予測されるように、FLT 19aにおいて入力が存在しない関数呼び出しが発生する場合、PLT 17dを介してリンカー・コード17eへ、サブジェクト・コード17の制御フローが進められる。トランスレータ・コード19は、その後、関数を実行するコードを介して動作を続けることが可能である。
リンカー17eはリンク・オーディター17fへリンク情報を渡し、トランスレータ・コード19はこの情報を用いてFLT 19aへ入力を加える。特に、トランスレータ・コード19は、サブジェクト実行ファイル17aにより呼び出される関数の各々の識別子、及びその関数の位置を受信し、かつ格納する。FLT 19aにおける各入力は、関数識別子及び対応する関数の位置を備える。しかしながら、トランスレータ・コード19は、リンカー・コード17eによるPLT領域17dの更新の変換を含むターゲット・コードを生成しない。
上述した例示的な実施形態において、トランスレータ・コード19は、FLT 19aを構築する際にrtld−auditインターフェースと互換性のあるリンク・オーディター17fを用いる。しかしながら、他の実施例においては、リンカーの動作を識別する別の技術を用い、それによりFLT 19aを入力及び維持しても良い。
関数リンクテーブルの生成 − リンカー動作の直接監視
さらなる例示的な実施形態においては、PLT 17dへの書き換えを検出し、かつサブジェクト実行ファイル17aにより呼び出される動的にリンクされたサブジェクト関数を実行するコードの位置を確認するために別の方法を用いても良い。そのような実施形態において、トランスレータ・コード19は、実行ファイルのファイル形式の情報からPLTを認証しても良い。PLT領域の位置についての情報を用いて、トランスレータは、特有のサブジェクト・コード命令シーケンスを検出することによってPLTを書き換えるような、リンカーの動作を識別することができる。SPARCから変換した例においては、認証されたPLT領域に影響を与える、特有のサブジェクト命令シーケンスのキャッシュフラッシュ命令が検出されても良い。
サブジェクト・コード命令のキャッシュフラッシュ命令は、PLTからリンカーへ、サブジェクト・コード中の制御フローが渡される場合、及びリンカーが応答してPLT入力を書き換える場合に実行される。一度、フラッシュの適正なシーケンスが発生すると、トランスレータは、書き換えられたPLT領域を読み取り、サブジェクト実行ファイルにより呼び出される関数を実行するコードのアドレスを決定する。このアドレスは、サブジェクト実行ファイルにおいて動的にリンクされた関数呼び出しと、その関数を実行するコードとの間の関連付けを生成することに用いることができる。しかしながら、トランスレータは、PLT領域により提供される中間制御構造の書き換えに対応するターゲット・コードの生成は行わない。上述したように、トランスレータは、関数の識別子、及びFLTにおいて関数を実行するコードのアドレスを格納することができる。
関数リンクテーブルにおける情報の利用
標準的なアプリケーションにおいて、トランスレータ・コード19が、FLT入力が形成された、一つ又は複数の動的にリンクされた関数呼び出しを含むサブジェクト・コード17と遭遇することは非常に起こり得ることである。例えば、トランスレータは、サブジェクト・コードの事前に変換された部分を再び変換することを必要とされ得る。この状況において、対応する入力がFLT 19aに存在する関数呼び出しが遭遇される。トランスレータ・コード19は、FLT 19aに事前に記録された情報を用いて、サブジェクト・コードにおける関数呼び出しと、その関数を実行する、対応するコードとの間の関連付けを設定する。この関連付けは、便宜的に直接リンク形式としても良い。
特定の関数呼び出しの再変換は、PLT 17d及びリンカー・コード17eの両方をバイパスし、トランスレータ・コード19が、動的にリンクされた関数呼び出しを、その関数を実行する関連するコードに効果的に関連付けることを可能とする。すなわち、サブジェクト・コードにおいて関数呼び出しを、FLTを用いてその関数を実行する対応するコードに関連付けることは、サブジェクト・コードにおいて中間制御構造に対応するターゲット・コードを生成することを含まない。当該関数呼び出しに関連するPLT17dに固有のリンク情報を書き換えるサブジェクト・リンカー・コード17eは、同様に変換されない。再変換の間、サブジェクト・リンカー・コード17eは、サブジェクト・コードにおいてバイパスされ、従ってトランスレータ・コード19によってアクセスされない。
上述のように、トランスレータ・コード19は第一の時間にサブジェクト・コードの一部分を介して動作しつつ、FLT 19aに入力する。後続の再変換は、トランスレータ・コード19がリンカー・コード17eをバイパスし、FLT 19aの情報を利用するので、最初の変換よりも効率的となり得る。再変換は、トランスレータがFLT 19aに入力する動作を行うことを必要としない。
間接関数呼び出し
トランスレータが遭遇する動的にリンクされた関数呼び出しの一部は、間接的な関数呼び出しであることがある。間接関数呼び出しは、変数値に依存する呼び出しである。変数値は、呼び出される位置を決定し、変動し得る。従って、トランスレータは、間接関数呼び出しに対応するターゲット・コードが実行されるポイントにおいて、必要とされる関数を実行するコードの位置を決定することのみが可能である。
図1に関連して上述したように、トランスレータが関数呼び出しに遭遇する場合、トランスレータは新しい基本ブロックを設定する。トランスレータは、FLTに格納された情報と、間接的関数呼び出しによって参照されるサブジェクト・アドレスとを照合することが可能である。FLTに既にアドレスが存在する場合、トランスレータは、間接的関数呼び出しが現在参照している関数への呼び出しと事前に遭遇していた必要がある。トランスレータは、その結果、同じ機能を実行するようにその関数呼び出しと関連して事前に設定された基本ブロックを、新規に設定された基本ブロックとして扱うことが可能である。トランスレータが、新規に設定された基本ブロックの代わりに、事前に設定された基本ブロックを使用することを可能とすることにより、実行するために必要とされるトランスレータの仕事量を更に減少させることが可能である。
サブジェクト・コード以外のコードと、サブジェクト・コードにおいて動的にリンクされた関数呼び出しとの関連付け
上述した実施形態において、FLTに保持される位置は、便宜的に、対応する関数を実行するサブジェクト・コード命令のアドレスであった。しかしながら、本発明の別の実施形態においては、FLT入力は、対応する関数を実行する他のコードを指し示すFLTにおけるアドレスとして、トランスレータ・コード19により選択されても良い。この方法でFLTを用いることにより、トランスレータはその作業負荷を減少させることが可能である。FLT入力は、
事前に変換されたターゲット・コード、ターゲット・オペレーティング・システム20のネイティブ・ライブラリ28における関数、
トランスレータに知られ、かつターゲット・コードが便宜的に生成される最適化されたIRの一部分、または
サブジェクト・コードの位置または上記の中の任意の一つを示す、またはそれを生成するのに用いられる、デリファレンスされる変数
の中の任意の一つを指し示すように、トランスレータによって選択されても良い。
上述したような、デリファレンスされる変数の使用は、トランスレータが、関数呼び出しと、対応する関数を実行するコードとの間の関連付けの制御をより一層働かせることを許可する。このことは、特定の関数を実行するコードの位置が、サブジェクト・プログラムの現在の呼び出しの存続中、固定されない場合に望ましい。
説明のための例において、トランスレータ・コード19は、SPARCからx86への変換を実行するように構成されている。SPARCターゲットシステムライブラリは、その中に、特定の引数における関数の実行の結果が厳密に定義されている一つ又は複数の関数を実行するルーチンを含み得る。そのように厳密に定義された関数は、ABI「ドット」関数として知られており、例えば、.umul、.smul等の計算関数の領域を含む。これらのABIドット関数は、以下に示されている。
http://www.sparc.com/standards/psABI3rd.pdf
ABIドット関数の動作は厳密に定義されているので、トランスレータは、ABIドット関数への呼び出しとして特定される関数呼び出しを、ABIドット関数と同じ効果を有する単純な命令として扱うことが可能である。このことは、例えば、FLT入力を設定し、かつ対応する関数を実行する非サブジェクト・コードの一部分と関数呼び出しを直接的に関連付けることによって、トランスレータがPLTを完全にバイパスすることを可能とする。この方法でPLTをバイパスすることは、トランスレータの作業負荷を減少させる。更に、この例において、トランスレータは、関数呼び出し自体の代わりに、関連するABIドット関数の効果を有するコードを付加することによって、関数呼び出しを扱うことに関連する仕事を完全に回避することが可能である。
ネイティブの関数ライブラリとの既知の対応を有するサブジェクト関数への呼び出しは、トランスレータ・コード19により識別されることが可能であり、ネイティブの関数との対応は、トランスレータの作業負荷を減少させるように利用される。例えば、サブジェクト・ライブラリ17cにおけるmemcpyへの呼び出しは、FLT 19aにおいて、ネイティブ・ライブラリ28におけるネイティブのx86に相当するものの位置に関連付けられることが可能である。このことは、memcpy関数のサブジェクト(SPARC)バージョンの変換コストを削減する。加えて、memcpy関数のネイティブの(x86)バージョンは、ネイティブのハードウェアの複雑さに適応し、そのハードウェアに対する最も効率的な方法でその関数の望ましい効果を得ることが可能である。
図4は、動的にリンクされた関数呼び出しを行う方法の例示的な実施形態を説明するフロー概略図である。サブジェクト・コードは、受信され、読み取られてPLT領域を識別する(ステップ101)。動的にリンクされた関数呼び出しは、サブジェクト・コードにおいて識別され(ステップ102)、動的にリンクされた関数呼び出しは、PLTにおいてサブジェクト関数呼び出しに関連付けられたリンク情報を書き換えるサブジェクト・リンカー・コードへ、サブジェクト制御フローを渡し、それにより、その関数を実行するサブジェクト・コードへサブジェクト関数呼び出しをリンクするように構成される。FLTは識別された関数呼び出しに対応する入力について照合を行い(ステップ103)、FLTが関連する入力を含む場合は、本方法はステップ107へ進み、ステップ107においては、ターゲット・コードが生成され、そのターゲット・コードにおいては、関数呼び出しが、その関数を実行するコードに関連付けられている。ステップ107において設定された関連付けは、FLTに格納されているような関数識別子及び位置に基づくものである。生成されたターゲット・コードは、PLTにより提供される中間制御構造に対応するターゲット・コードを含まない。
ステップ103において、FLTが、識別された関数呼び出しに対する関連する入力を含んでいない場合、リンク・オーディターは関数識別子及び位置を得るように動作することができ(ステップ104)、及び/又は関数識別子及び位置はサブジェクト・コード命令のキャッシュフラッシュを監視することにより得ることができる(ステップ105)。ステップ104、及び/又はステップ105において得られる情報は、その後FLTへ入力される(ステップ106)。その後、ステップ104、及び/又はステップ105において得られた情報に基づいて、ステップ107が実行される。
上記に詳細に記載された例示的な実施形態において、サブジェクト・リンカー・コードはトランスレータにアクセス可能なサブジェクト・コードの本文に存在する。しかしながら、他の実施形態においては、サブジェクト・コードにおいてリンクを実行するリンカーの機能は、特に、図3に示されたリンカー・コード19eのような、ターゲット・プロセッサ上での実行のために記述されたターゲット・コードを用いるトランスレータによって提供されても良い。更に、例示的実施形態はサブジェクト実行ファイルに関連したPLTに焦点を合わせたものであったが、サブジェクト・ライブラリ17b、17cは、それら自身のPLT領域の形式において、中間制御構造も含むことがある。本明細書に記載された方法及び装置は、これらのPLT領域や、中間制御構造を含み、かつ対応する問題を生じさせるコードの、別の識別可能な一部分に対して等しく適用されることが可能である。
本明細書に記載された技術を用いることによって、トランスレータ・コード19は、PLTやそれに類するような、中間制御構造における間接リンク情報の更新に対応する変換を生成するために、サブジェクト・コードの制御フローに従う必要がなく、従って、ランタイムにおいて書き換えられるコードの多数の集中を含むサブジェクト・コードの一部の変換のプロセッシング及びメモリコストを避けることができる。
加えて、トランスレータが、間接リンク情報の更新を含むサブジェクト・コードの実行を行う状況に対処する効率的な方法が説明された。
特に、本発明は、プログラムコード変換を実行するコンピュータシステムにおいて有用な方法及びユニットを開発した。そのような方法及びユニットは、サブジェクト・プログラム・コードのターゲット・コードへの動的バイナリ変換を提供するランタイムトランスレータのように構成されたコンピュータシステムに関連して特に有用である。
本発明は、本明細書に明示された任意の方法を実行するように構成されたトランスレータにまで及ぶ。同様に、本発明は、本明細書に明示された任意の方法を実行するコンピュータによって実装可能な命令を記録した、コンピュータが読み取り可能な記録メディアにまで及ぶ。
少なくとも、本発明のいくつかの実施形態は、専用のハードウェアを用いて単独に構成されても良く、本明細書で用いられる「モジュール」または「ユニット」のような単語は、それに限られるわけではないが、特定のタスクを実行するフィールド・プログラマブル・ゲート・アレイ(FPGA)、又は特定用途向け集積回路(ASIC)のような、ハードウェアデバイスを含んでも良い。あるいは、本発明の要素は、アドレス可能な記録メディアに存在するように構成されても良く、一つ又は複数のプロセッサ上で実行されるように構成されても良い。従って、本発明の機能的要素は、ある実施形態においては、例として、ソフトウェア要素、オブジェクト指向ソフトウェア要素、クラス要素及びタスク要素、プロセス、機能、属性、手続き、サブルーチン、プログラムコードのセグメント、ドライバ、ファームウェア、マイクロコード、回路構成、データ、データベース、データ構造、テーブル、アレイ、及び変数のような要素を含んでも良い。更に、好適な実施形態が、以下に説明される要素、モジュール及びユニットを参照して説明されるが、このような機能的要素はより少ない要素に合成されても良く、又は追加的要素に分割されても良い。
本発明の装置及び方法の種々の特徴は、上記した実施形態の各々において別々に説明されている。しかしながら、本明細書に記載された各実施形態の別々の側面は、本明細書において記載された他の実施形態に結合され得るということが、本発明の発明者の完全なる意図である。
記載された通りの好適な実施形態の種々の適応と変更が、本発明の範囲と技術思想から逸脱することなく、構成されることが可能であることを当業者は理解するであろう。従って、本発明は、添付の特許請求の範囲の範囲内においてならば、本明細書に明確に記載されているようにではなく実施されても良いことが理解されたい。
いくつかの好適な実施形態が示され、説明されたが、当業者であれば、本発明の範囲を逸脱することなく、種々の変形や修正が、添付の特許請求の範囲に明示されるように、行われ得ることを理解するであろう。
同時に提出された、又は本願と関連したこの明細書に先立つ全ての文書、及びこの明細書を公衆の閲覧のために公開した文書に対して注意が向けられ、全てのそのような文書の内容が、参照として本明細書に組み入れられる。
本明細書(任意の添付の特許請求の範囲、要約、及び図面を含む)で開示される全ての特徴、及び/又はそのように開示された任意の方法又はプロセスの全てのステップは、そのような特徴及び/又はステップの少なくともいくつかが相互に排他的である組み合わせを除いて、任意の組み合わせで合成され得る。
本明細書(任意の添付の特許請求の範囲、要約、及び図面を含む)において開示された各特徴は、明示的に別の方法で述べられていない限り、同じ、均等な、又は同様の目的で扱う別の特徴により置き換えられ得る。従って、明示的に別の方法で述べられていない限り、開示された各特長は、等価な、又は類似の特徴の一般的なシリーズの一つの例に過ぎない。
本発明は、前述の実施形態の詳細に制限されない。本発明は、本明細書(任意の添付の特許請求の範囲、要約、及び図面を含む)において開示された特徴の、任意の新規なもの、又は任意の新規な組み合わせ、又は、そのように開示された任意の方法又はプロセスのステップの任意の新規なもの、又は任意の新規な組み合わせにまで及ぶ。

Claims (20)

  1. コンピュータ装置であって、
    ターゲット・プロセッサと、
    メモリと
    を備えており、
    前記メモリは、
    前記ターゲット・プロセッサ上で実行されるターゲット・オペレーティング・システムと、
    前記ターゲット・オペレーティング・システム上で実行するトランスレータであって、関数リンクテーブルを保持している前記トランスレータと
    を記憶しており、
    前記トランスレータは、前記コンピュータ装置に、サブジェクト・コードを前記ターゲット・プロセッサで実行されるターゲット・コードへ動的に変換することを実現させ、前記サブジェクト・コードは当該サブジェクト・コードにおいて中間制御構造である手続きリンクテーブルを介してサブジェクト・リンカー・コードへサブジェクト制御フローを渡すように構成された、一つ又は複数の動的にリンクされたサブジェクト関数呼び出しを含み、
    前記トランスレータは、前記コンピュータ装置に、
    前記サブジェクト・コードの動的にリンクされたサブジェクト関数呼び出しに関連付けられた手続きリンクテーブルに対する修正を検出すること、
    前記サブジェクト・コードにおいて、前記動的にリンクされた関数呼び出しを識別し、当該識別された動的にリンクされた関数呼び出しを、前記中間制御構造に対応するターゲット・コードを生成することなしに当該中間制御構造に対応する前記ターゲット・コードでない対応する関数を実行するコードに関連付けること、
    前記修正の検出に応じて、前記関数リンクテーブルに、前記動的にリンクされた関数呼び出しに対応する識別子及び前記動的にリンクされた関数呼び出しを実行するコードの位置を格納すること
    を実現させる、前記コンピュータ装置。
  2. 前記トランスレータは、前記コンピュータ装置に、前記サブジェクト・コードにおいて、動的にリンクされたサブジェクト関数呼び出しを識別し、かつ前記サブジェクト・コードの最初の変換における前記動的にリンクされた関数呼び出しに関するリンク情報を収集し、かつ前記サブジェクト・コードの後続の変換において前記収集された情報を使用することを実現させる、請求項1に記載のコンピュータ装置。
  3. 前記トランスレータは、前記コンピュータ装置に、後続の変換において前記収集された情報を用いて、前記識別された関数呼び出しから、前記対応する関数を実行する前記コードへ制御フローを受け渡すことを実現させる、請求項2に記載のコンピュータ装置。
  4. 前記トランスレータは、前記コンピュータ装置に、識別された関数呼び出しに対する識別子の形式で、前記トランスレータにアクセス可能な関数リンクテーブルにおいて、前記識別された関数呼び出しに関する情報を格納することを実現させ、かつ前記関数リンクテーブルにおいて、前記識別された関数を実行するコードの位置を格納することを実現させる、請求項1に記載のコンピュータ装置。
  5. 前記トランスレータは、前記コンピュータ装置に、各識別された関数に対応する入力に対する前記関数リンクテーブルを照合することを実現させる、前記関数リンクテーブルが前記識別された関数に対応する入力を含む場合、前記関数リンクテーブルに格納される前記情報を用いて、前記対応する関数を実行するコードに、前記関数呼び出しを関連付けることを実現させる、請求項4に記載のコンピュータ装置。
  6. 前記トランスレータは、前記コンピュータ装置に、サブジェクト・リンカー・コードの動作を監視するか、又は特有のサブジェクト・コード命令シーケンスのキャッシュフラッシュ命令を検出することにより、前記関数呼び出しに関するリンク情報を収集することを実現させる、請求項2に記載のコンピュータ装置。
  7. 前記トランスレータは、前記コンピュータ装置に、前記対応する関数を実行するコードに関連付けることにおいて、前記動的にリンクされた関数呼び出しと、前記関数を実行する前記コードとの間の直接リンクを設定することを実現させる、請求項1に記載のコンピュータ装置。
  8. 前記トランスレータは、前記コンピュータ装置に、前記関数リンクテーブルにおいて、前記識別された関数を実行するネイティブ・コードの位置、前記識別された関数を実行する事前に変換されたターゲット・コードの位置、及び前記トランスレータに既知の最適化された中間表現の部分の位置であって、当該部分から、ターゲット・コードが生成されて前記識別された関数を実行することが可能である、前記中間表現の部分の位置のうちの一つ又は複数を格納することを実現させる、請求項4に記載のコンピュータ装置。
  9. 前記トランスレータは、前記コンピュータ装置に、関数に関連した動的にリンクされた関数呼び出しを識別し、かつ前記動的にリンクされた関数呼び出しを、前記対応する関数を実行するコードに置換することを実現させる、請求項1に記載のコンピュータ装置。
  10. 前記トランスレータは、前記コンピュータ装置に、前記サブジェクト・コードの手続きリンクテーブル(PLT)を介してサブジェクト・リンカー・コードへサブジェクト制御フローを渡すように構成された、一つ又は複数の動的にリンクされたサブジェクト関数呼び出しを含むサブジェクト・コードを受信し、前記受信されたサブジェクト・コードにおいて、前記動的にリンクされた関数呼び出しを識別し、かつ前記動的にリンクされた関数呼び出しを、前記PLTに対応するターゲット・コードを生成することなしに当該PLTに対応する前記ターゲット・コードでない前記対応する関数を実行するコードに関連付けることを実現させる、請求項1に記載のコンピュータ装置。
  11. サブジェクト・コードをターゲット・プロセッサ上で実行するターゲット・コードに動的に変換する方法であって、前記サブジェクト・コードは当該サブジェクト・コードにおいて中間制御構造を介してサブジェクト・リンカー・コードへサブジェクト制御フローを渡すように構成された、一つ又は複数の動的にリンクされたサブジェクト関数呼び出しを含み、コンピュータが、
    前記サブジェクト・コードの動的にリンクされたサブジェクト関数呼び出しに関連付けられた手続きリンクテーブルに対する修正を検出するステップと、
    前記ターゲット・プロセッサにおいて実行するターゲット・コードを生成するステップであって、前記ターゲット・プロセッサにおいて、前記動的にリンクされた関数呼び出しは、前記中間制御構造に対応するターゲット・コードを生成することなしに当該中間制御構造に対応する前記ターゲット・コードでない前記対応する関数を実行するコードに関連付けられる、前記生成するステップと、
    前記修正の検出に応じて、前記ターゲット・オペレーティング・システム上で実行するトランスレータに保持された関数リンクテーブルに、前記動的にリンクされた関数呼び出しに対応する識別子及び前記動的にリンクされた関数呼び出しを実行するコードの位置を格納するステップと、
    を実行することを含む、前記方法。
  12. 前記サブジェクト・コードの最初の変換において、前記識別された動的にリンクされた関数呼び出しに関するリンク情報が、前記サブジェクト・コードの後続の変換における使用のために収集される、請求項11に記載の方法。
  13. 後続の変換において、最初の変換において収集された前記情報は、前記識別された関数呼び出しから、前記対応する関数を実行する前記コードへ、制御フローを受け渡すために用いられる、請求項12に記載の方法。
  14. 前記コンピュータが、
    関数リンクテーブル中に、前記識別された関数呼び出しに関する情報を格納するステップと、
    識別された関数の各々に対応する入力に対する前記関数リンクテーブルを照合すること、及び前記関数リンクテーブルが前記識別された関数と対応する入力を含む場合、前記関数リンクテーブルに格納された前記情報を用いて前記対応する関数を実行するコードに前記関数呼び出しを関連付けるステップと
    を実行することを含む、請求項11に記載の方法。
  15. 前記ターゲット・コードを生成するステップは、前記ターゲット・コードにおいて、前記動的にリンクされた関数呼び出しと、前記関数を実行する前記コードとの間に直接リンクを設定するステップを含む、請求項11に記載の方法。
  16. 前記コンピュータが、
    前記関数リンクテーブル中に、前記識別された関数を実行するネイティブ・コードの位置、前記識別された関数を実行する事前に変換されたターゲット・コードの位置、最適化された中間表現の部分の位置であって、当該部分から、ターゲット・コードが生成されて前記識別された関数を実行することが可能である、前記最適化された中間表現の部分の位置、及びデリファレンスされる変数を含むグループから選択された一つ又は複数を格納するステップ
    を実行することを含み、
    前記デリファレンスされる変数は、前記識別された関数を実行するサブジェクト・コード、前記識別された関数を実行するネイティブ・コード、前記識別された関数を実行する事前に変換されたターゲット・コード、前記トランスレータに既知の最適化された中間表現の部分であって、当該部分からターゲット・コードを生成して前記識別された関数を実行することが可能である、前記トランスレータに既知の最適化された中間表現の部分のうちの一つの位置に関連する、
    請求項14に記載の方法。
  17. 前記コンピュータが、
    関数に関連した動的にリンクされる関数呼び出しを識別するステップと、
    前記動的にリンクされた関数呼び出しを、前記対応する関数を実行するコードに置換するステップと
    を実行することを含む、請求項12に記載の方法。
  18. 前記コンピュータが、
    前記サブジェクト・コードの手続きリンクテーブル(PLT)を介してサブジェクト・リンカー・コードへサブジェクト制御フローを渡すように構成された、一つ又は複数の動的にリンクされたサブジェクト関数呼び出しを受信するステップと、
    前記サブジェクト・コードにおいて、前記動的にリンクされた関数呼び出しを識別するステップと、
    前記動的にリンクされた関数呼び出しを、前記PLTに対応するターゲット・コードを生成することなしに当該PLTに対応する前記ターゲット・コードでない前記対応する関数を実行するコードと関連付けるステップと
    を実行することを含む、請求項12に記載の方法。
  19. ターゲット・プロセッサにおいて実行されるプログラムコード変換のためのコンピュータ・プログラムであって、コンピュータに、請求項1118のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
  20. サブジェクト・コードをターゲット・プロセッサ上で実行するターゲット・コードへ動的に変換するように構成されたコード変換装置であって、前記サブジェクト・コードは、当該サブジェクト・コードにおいて中間制御構造を介してサブジェクト・リンカー・コードへサブジェクト制御フローを渡すように構成された、一つ又は複数の動的にリンクされたサブジェクト関数呼び出しを含み、前記コード変換装置は、
    前記サブジェクト・コードの動的にリンクされたサブジェクト関数呼び出しに関連付けられた手続きリンクテーブルに対する修正を検出すること、
    前記ターゲット・プロセッサ上で実行するターゲット・コードを生成することであって、前記識別された動的にリンクされた関数呼び出しは、前記中間制御構造に対応するターゲット・コードを生成することなしに当該中間制御構造に対応する前記ターゲット・コードでない対応する関数を実行するコードに関連付けられる、前記生成すること、
    前記修正の検出に応じて、前記関数リンクテーブルに、前記動的にリンクされた関数呼び出しに対応する識別子及び前記動的にリンクされた関数呼び出しを実行するコードの位置を格納すること
    を行うように構成されている、前記コード変換装置。
JP2009529783A 2006-10-02 2007-10-01 プログラムコード変換に関して動的にリンクされた関数呼び出しを行うための方法及び装置 Active JP5128602B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB0619389A GB2442495B (en) 2006-10-02 2006-10-02 Method and apparatus for handling dynamically linked function cells with respect to program code conversion
GB0619389.0 2006-10-02
US85405406P 2006-10-24 2006-10-24
US60/854,054 2006-10-24
PCT/GB2007/050600 WO2008041028A1 (en) 2006-10-02 2007-10-01 Method and apparatus for handling dynamically linked function calls with respect to program code conversion

Publications (3)

Publication Number Publication Date
JP2010506252A JP2010506252A (ja) 2010-02-25
JP2010506252A5 JP2010506252A5 (ja) 2012-07-12
JP5128602B2 true JP5128602B2 (ja) 2013-01-23

Family

ID=41295846

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009529783A Active JP5128602B2 (ja) 2006-10-02 2007-10-01 プログラムコード変換に関して動的にリンクされた関数呼び出しを行うための方法及び装置

Country Status (2)

Country Link
JP (1) JP5128602B2 (ja)
KR (1) KR101308781B1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8752008B2 (en) * 2009-09-02 2014-06-10 Advanced Micro Devices, Inc. Lightweight service based dynamic binary rewriter framework
US8464230B2 (en) * 2010-04-13 2013-06-11 Intel Corporation Methods and systems to implement non-ABI conforming features across unseen interfaces
JP5976917B2 (ja) * 2012-03-22 2016-08-24 インテル コーポレイション ネスト構造化されたエミュレーションおよび動的リンキング環境
US10445119B2 (en) * 2017-06-30 2019-10-15 Intel Corporation Software reconfigurable mobile devices and methods
CN113986343B (zh) * 2021-10-22 2023-11-21 上海太美数字科技有限公司 程序模块获取方法、装置、计算机设备和存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59119447A (ja) * 1982-12-27 1984-07-10 Fujitsu Ltd プログラムの動的結合方法
US5930495A (en) * 1997-01-13 1999-07-27 International Business Machines Corporation Method and system for processing a first instruction in a first processing environment in response to intiating processing of a second instruction in a emulation environment
US5903758A (en) * 1997-02-24 1999-05-11 Sun Microsystems, Inc. Method and apparatus for auditing dynamically linked procedure calls
US6934943B2 (en) * 2001-10-18 2005-08-23 Hewlett-Packard Development Company Optimization of control transfers to dynamically loaded modules
US20030088860A1 (en) * 2001-11-02 2003-05-08 Fu-Hwa Wang Compiler annotation for binary translation tools
US7434209B2 (en) * 2003-07-15 2008-10-07 Transitive Limited Method and apparatus for performing native binding to execute native code
KR101244063B1 (ko) * 2005-03-11 2013-03-19 인터내셔널 비지네스 머신즈 코포레이션 프로그램 코드 변환시의 실행 제어

Also Published As

Publication number Publication date
JP2010506252A (ja) 2010-02-25
KR101308781B1 (ko) 2013-09-17
KR20090095556A (ko) 2009-09-09

Similar Documents

Publication Publication Date Title
US9043816B2 (en) Handling dynamically linked function calls with respect to program code conversion
JP4931583B2 (ja) ネイティブ結合を行なうための方法および装置
JP5039031B2 (ja) ネイティブコード及び目的コードをプログラムコード変換中に組み合わせて実行する方法及び装置
US7536682B2 (en) Method and apparatus for performing interpreter optimizations during program code conversion
US7543284B2 (en) Partial dead code elimination optimizations for program code conversion
US6484188B1 (en) Optimization of garbage collection code in the context of raw native interface function calls in the java programming language
AU774467B2 (en) Automatic stub/adapter generator
US20040255279A1 (en) Block translation optimizations for program code conversation
JP5077605B2 (ja) コンピュータ・システムにおいて例外信号を処理するための装置及び方法
JP2002527815A (ja) プログラムコード変換方法
JP2010530996A (ja) プログラム・コードを変換するためのコンピュータ・システム、方法、及びコンピュータ可読記録媒体
JP5128602B2 (ja) プログラムコード変換に関して動的にリンクされた関数呼び出しを行うための方法及び装置
JP2010506250A (ja) コンピュータシステムおよびレジスタウインドウアーキテクチャをサポートするようにコンピュータシステムを適合させる方法
JP2010506250A5 (ja)
US20040221279A1 (en) Method and apparatus for performing lazy byteswapping optimizations during program code conversion
JP2010506252A5 (ja)
US8286144B2 (en) Administering a process filesystem with respect to program code conversion
WO2006131695A1 (en) Method and apparatus for combined execution of native code and target code during program code conversion
GB2400938A (en) Lazy byteswapping optimizations during program code conversion

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20091204

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20091204

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20091208

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120227

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120521

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20120521

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120911

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120912

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120912

TRDD Decision of grant or rejection written
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20121012

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20121012

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121012

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121031

R150 Certificate of patent or registration of utility model

Ref document number: 5128602

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

Year of fee payment: 3