JP2008505423A - 最適化されたプログラムのためのアンワインド情報の生成 - Google Patents
最適化されたプログラムのためのアンワインド情報の生成 Download PDFInfo
- Publication number
- JP2008505423A JP2008505423A JP2007520530A JP2007520530A JP2008505423A JP 2008505423 A JP2008505423 A JP 2008505423A JP 2007520530 A JP2007520530 A JP 2007520530A JP 2007520530 A JP2007520530 A JP 2007520530A JP 2008505423 A JP2008505423 A JP 2008505423A
- Authority
- JP
- Japan
- Prior art keywords
- program
- unwind
- exception handling
- procedure
- representation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000005457 optimization Methods 0.000 claims abstract description 48
- 238000004458 analytical method Methods 0.000 claims abstract description 18
- 238000000034 method Methods 0.000 claims description 183
- 230000009471 action Effects 0.000 claims description 23
- 238000012545 processing Methods 0.000 claims description 22
- 230000001419 dependent effect Effects 0.000 claims description 4
- 238000012217 deletion Methods 0.000 claims 4
- 230000037430 deletion Effects 0.000 claims 4
- 230000008569 process Effects 0.000 description 12
- 230000007246 mechanism Effects 0.000 description 4
- 230000004913 activation Effects 0.000 description 2
- 210000000746 body region Anatomy 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 241000282326 Felis catus Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Description
人間により可読な又はハイレベルソース言語により当初記述されたプログラムは、一般にコンパイル処理及びリンク処理によって機械語による実行可能プログラムに変換される。バイナリコードと呼ばれるこの結果として得られるプログラムのバージョンは、プロセッサベースシステムによって実行可能である。プログラムは、一般に便宜上、再利用可能性、設計複雑性管理及び他の理由のため、プロシージャと呼ばれるサブプログラムに分割される。プロシージャは、CやC++などの言語による関数などの他の名称によって参照されるかもしれない。ハイレベル言語バージョンによるプロシージャに分割されるプログラムは、一般に当該プログラムのハイレベル言語バージョンによるものにほぼ対応するプロシージャを有するプログラムのバイナリバージョンにコンパイル及びリンクされる。コンパイル及びリンク処理の後、システム上で実行されるプログラムは、典型的には、プログラムスタックを利用して、当該技術分野では周知なように、プロシージャの呼び出しを支援し、プログラムのメインフロー又は呼出元のプロシージャに戻る。一般に、プロシージャコールは入れ子にされ、メインプログラムはメインプロシージャとみなされるかもしれないため、以下において、「呼出元プロシージャ(calling procedure)」及び「呼出先プロシージャ(called procedure)」という用語が、一般性を失うことなく用いられる。プロシージャコールは、命令ポインタなどの呼出元プロシージャによって用いられるレジスタ、及び呼出先プロシージャの実行によって上書きされる可能性のある他のレジスタの値を含む呼出に関する値のセットをプログラムスタックに格納しなければならない。呼出元プロシージャのローカル変数や、呼出先プロシージャによって変更される可能性のないパラメータなどの他のデータ値もまた、スタックに格納されるかもしれない。スタック上の特定のプロシージャの特定の呼出に関するすべてのデータは、それのスタックフレーム又はアクティベーションレコードと呼ばれる。
一実施例では、図1に示されるような処理が行われる。概略すると、以下のメインフェーズが当該処理を構成する。すなわち、第1に、関連付けされたアンワインド情報130によるプログラム125のポストリンク最適化バイナリバージョンが、解析フェーズ105と110に入力される。プログラムの解析は、入力プログラムからのアンワインド情報の読み出し(105)と、当該情報を利用してプログラムの詳細表現を構成し、追加的なアノテーション(annotation)をプログラムのステートメント及びブロックの表現(をデコレートし)と関連付ける(110)という2つの主要なコンポーネントから構成される。当該フェーズの後、実際のプログラムの最適化が行われ(115)、そこで、プログラムの最適化されたバージョンと整合した新たなアンワインド情報が最適化後に再生成可能となることを保証するため、必要に応じてデコレートされた表現が利用及び更新される。最適化されたプログラム、デコレートされた表現及びもとのプログラムのアンワインド情報が使用され(120)、プログラムの最適化されたバイナリバージョンと整合し格納される(135)新たなアンワインド情報を生成する(140)。
一実施例では、図2に示されるようなアンワインド情報が、図1の105において、ポストリンク最適化装置の最適化前処理フェーズによって読み込まれ、解釈される。最適化装置は、アンワインド及びアンワインド情報セクションを含むプログラムの入力バイナリバージョンのすべてのアンワインド及びアンワインド情報セクションを読み込む。それは、プログラムの命令及びプロシージャに対する内部表現を生成する。最適化装置は、パーソナリティルーチンから入力プログラムを生成するのに利用されるコンパイラを決定している。その後、最適化装置は、アンワインドテーブルを探索する。図2の202〜206のようにプロシージャを表す各アンワインドテーブルエントリに対して、当該実施例は、210、214及び215におけるアンワインド情報セクションへのポインタに従い、216〜222に示されるものと同様のアンワインド情報レコードの解釈を開始する。あるプロシージャに対してLSDAが存在する場合、最適化装置は、LSDAを生成するのに利用されるコンパイラに固有のフォーマットを用いてLSDAを解釈する。上述されたように、これらのレコードは、プロシージャにおけるアンワインド領域によってグループ化される。各領域に対して、命令スロットにおける当該領域の長さを含むアンワインド状態データ構造と、プロシージャレジスタに対するより小さなアンワインドデータ構造シーケンスが生成される。レジスタに対するアンワインドデータ構造は、当該レジスタがどこからリストアされるべきか(例えば、アクティベーションレコード又は他のレジスタからなど)、その指定が有効となるとき(例えば、アンワインド領域に対する何れの命令スロット番号においてなど)を指定する。
次に、図1の110において、命令、ベーシックブロック(直線のコントロールフローによるシーケンシャルな命令グループ)及びプロシージャなどに対する各種プログラムコンポーネントの内部表現が生成される。上述した方法によりアンワインド情報を解釈した後、当該実施例は、与えられたプロシージャにおける各種アンワインド領域に対するアンワインド状態レコードのシーケンスを生成する。その後、それはこれらのアンワインド状態レコードを当該プロシージャに対応する表現に添付する。その後、最適化装置は、LSDAからの復号化されたコールサイトテーブルを利用して、各プロシージャに対する復号化されたタイプテーブルと復号化されたアクションテーブルを生成する。それは、これらのテーブルをプロシージャの表現に添付する。次に、本実施例による最適化装置は、アンワインド状態レコードを照会しながら、ベーシックブロック及び命令を訪れる各プロシージャの表現を探索する。アンワインド状態レコードのレジスタに対するwhenフィールドが、与えられた命令に対応するスロットを指し示す場合、最適化装置は、当該命令にその事実を符号化する特別なアンワインド属性を添付する。最適化装置は、訪れたベーシックブロック又は命令にランディングパッドが存在するかチェックするため、復号化されたコールサイトテーブルを照会し、そうである場合、最適化装置は、コールサイトと現在訪れているベーシックブロック又は命令との間の関係をそれの内部表現に追加する。この処理の後、当該表現のプロシージャにおけるいくつかの命令は、110においてアンワインド属性によりデコレートされる。最適化装置はまた、アンワインド領域がベーシックブロック境界において開始及び終了することを保証し、各ベーシックブロックを「プロローグ」又は「ボディー」としてマークする。
最適化装置は、次に以下のアンワインド関連の検討によるプロシージャ及び命令に対する各種最適化を実行するかもしれない(115)。
i.アンワインド属性による命令は、削除されない。それが複製される必要がある場合、アンワインド属性もまた複製される。
ii.ランディングパッドベーシックブロックに関連するコールサイトによるベーシックブロックは、削除されない。
iii.コールサイトによるベーシックブロックが複製される場合、それとランディングパッドとの関係がまた、最適化装置の表現に複製される。
iv.異なる領域タイプ(例えば、プロローグとボディーなど)のベーシックブロックにおいて、命令移動は許可されない。
v.プロシージャが不連続なコードセグメントにスピリット又は分割されると、新たな部分(チャイルドと呼ばれる)が、もとのプロシージャ(ペアレントと呼ばれる)のスピリットポイントにおける命令に対するアンワインドルールに対応する復号化されたタイプテーブルと復号化されたアクションテーブルと共に、アンワインド状態レコードを承継する。
最適化中、アンワインド領域の命令は移動されるかもしれず、このため、アンワインド状態の各種レジスタのwhenフィールドは、正確でないかもしれない。さらに、アンワインド領域は、縮小又は拡大されているかもしれず、これにより、アンワインド状態に記録されるようなそれらの長さは、変更の必要がある。最適化装置がタイプ情報を削除しないため、タイプテーブルが有効なままであるが、もとのコールサイトテーブルがもはや正確なものとならないように、コールサイト及びランディングパッドは移動されるかもしれない。最適化装置は、whenフィールド及びアンワインド領域長フィールドを調整するすべてのプロシージャのすべてのアンワインド領域に対するアンワインド状態レコードを処理する。プログラムの最適化されたバージョンのコールサイトテーブルが、プロシージャのコールサイトを有するすべてのベーシックブロックを探索し、何れか関連するランディングパッドを検索することによって生成される。このとき、最適化されたプロシージャに対する新たなコールサイトテーブルが生成されるかもしれない。分割プロシージャのチャイルド部分は、特別な方法により処理される。すなわち、それのペアレントから承継したアンワインド状態レコードのコピーが、ゼロの長さを有するものとしてマークされる。ゼロの長さのプロローグを有することは、アンワインド情報の各種レジスタに対するwhenフィールドがプロシージャの始めを指し示すことを意味する。復号化されたタイプ及びアクションテーブルのコピーが、ペアレントのタイプ及びアクションテーブルに基づき、当該チャイルドに対して生成される。
Claims (25)
- プログラムの第1バイナリバージョンと、前記プログラムの第1バイナリバージョンに係るアンワインド情報とを解析するステップと、
前記解析結果に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンを生成するため、前記プログラムの第1バイナリバージョンに対して最適化を実行するステップと、
前記解析結果と前記実行された最適化に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンに対する更新されたアンワインド情報を生成するステップと、
から構成されることを特徴とする方法。 - 請求項1記載の方法であって、
前記アンワインド情報はさらに、前記プログラムの各プロシージャの各アンワインド領域に係り、前記プログラムのアンワインド処理に関する言語独立情報を有することを特徴とする方法。 - 請求項2記載の方法であって、
前記解析するステップはさらに、
命令、ベーシックブロック及びプロシージャの表現を含む前記プログラムの表現を生成するステップと、
表現された各ベーシックブロックのベーシックブロックタイプを特定し、前記ベーシックブロックタイプにより前記表現をマークするステップと、
前記プログラムの各プロシージャの各アンワインド領域に対するアンワインド属性とアンワインド状態データとを生成するステップと、
アンワインド状態データと属性とを前記プログラムの命令の表現と関連付けるステップと、
アンワインド状態データと属性とを前記プログラムのプロシージャの表現と関連付けるステップと、
から構成されることを特徴とする方法。 - 請求項3記載の方法であって、
前記最適化を実行するステップはさらに、
最適化中、関連付けされたアンワインド属性を有する命令を削除からプロテクトするステップと、
関連付けされたアンワインド属性を有する第1命令が、最適化中に第2命令を生成するよう複製される場合、前記第1命令の表現に係るアンワインド属性に少なくとも部分的に基づき、前記第2命令と該表現に係るアンワインド属性とを生成するステップと、
最適化中、何れの命令も1つのベーシックブロックタイプのベーシックブロックから異なるベーシックブロックタイプのベーシックブロックに移動されないよう回避するステップと、
前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、前記プログラムの第1バイナリバージョンのプロシージャの表現に対する前記アンワインド状態データ及び属性と、前記分割が行われた命令に対するアンワインドルールとに少なくとも部分的に基づき、各新しいプロシージャの表現と、該表現に対するアンワインド状態データ及び属性とを生成するステップと、
から構成されることを特徴とする方法。 - 請求項4記載の方法であって、
前記解析結果と前記実行された最適化に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンに対する新たなアンワインド情報を生成するステップはさらに、
各プロシージャの各アンワインド領域に対するアンワインド状態データを、該データが前記プログラムの第2バイナリバージョン内の前記領域の位置及び新たな長さと整合するように調整するステップと、
前記調整されたアンワインド状態データを前記プログラムの第2バイナリバージョンに関連付けるステップと、
から構成されることを特徴とする方法。 - 請求項5記載の方法であって、
前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、該プロシージャは、ペアレントプロシージャと少なくとも1つのチャイルドプロシージャとに分割され、
前記解析結果と前記実行された最適化に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンに対する新たなアンワインド情報を生成するステップはさらに、
前記チャイルドプロシージャがゼロの長さのプロローグを有することを示すため、前記分割によって生成された各チャイルドプロシージャの表現に対して前記アンワインド状態データをマーク付けするステップと、
前記アンワインド状態データがアクティブとなる前記プログラムの位置を前記チャイルドプロシージャの始めに設定するステップと、
から構成されることを特徴とする方法。 - 請求項1記載の方法であって、
前記アンワインド情報はさらに、前記プログラムのソースコードバージョンのソース言語に規定される例外処理に関する言語に依存した例外処理情報を有し、
前記プログラムの第1バイナリバージョンは、少なくとも部分的に前記プログラムのソースコードバージョン上での前記ソース言語のコンパイラの実行により求められる、
ことを特徴とする方法。 - 請求項7記載の方法であって、
前記解析するステップはさらに、
前記プログラムの第1バイナリバージョンを求めるのに実行されたコンパイラを特定するステップと、
前記プログラムの命令、ベーシックブロック及びプロシージャの表現を生成するステップと、
例外処理情報が前記プログラムのプロシージャのアンワインド情報に含まれる場合、前記コンパイラのアイデンティティに少なくとも部分的に基づき、前記プロシージャに対する例外処理情報を解釈するステップと、
前記例外処理情報に少なくとも部分的に基づき、各プロシージャの表現のため、例外処理コールサイトテーブル、例外処理タイプテーブル及び例外処理アクションテーブルを生成するステップと、
例外処理を生成するコードを含むベーシックブロックの表現と、前記例外処理のためのハンドラを含むベーシックブロックの表現との間の関連付けを前記表現に追加するステップと、
から構成されることを特徴とする方法。 - 請求項8記載の方法であって、
前記最適化を実行するステップはさらに、
例外処理を生成するコードを含むベーシックブロックを削除からプロテクトするステップと、
例外処理を処理するコードを含むベーシックブロックを削除からプロテクトするステップと、
例外処理を生成するコードを含む第1ベーシックブロックが、最適化中に第2ベーシックブロックを生成するため複製される場合、前記第2ベーシックブロックの表現と、前記第1ベーシックブロックの表現の既存の各関連付けに対応する前記第2ベーシックブロックの表現の関連付けとを生成するステップと、
前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、各新しいプロシージャに対して、例外処理コールサイトテーブル、例外処理タイプテーブル及び例外処理アクションテーブルを、前記プログラムの第1バイナリバージョンの前記プロシージャに対する例外処理コールサイトテーブル、例外処理タイプテーブル及び例外処理アクションテーブルに少なくとも部分的に基づき生成するステップと、
から構成されることを特徴とする方法。 - 請求項9記載の方法であって、
前記解析結果と前記実行された最適化に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンに対する新たなアンワインド情報を生成するステップはさらに、前記第2バイナリプログラムの各プロシージャに対して、新たな例外処理コールサイトテーブル、新たな例外処理タイプテーブル及び新たな例外処理アクションテーブルを、
前記プログラムの第1バイナリバージョンを解析することによってそれぞれ生成される前記例外処理コールサイトテーブル、前記例外処理タイプテーブル及び前記例外処理アクションテーブルと、
最適化中のプロシージャの分割によって生成される新たなプロシージャに対してそれぞれ生成される新たな例外処理コールサイトテーブル、新たな例外処理タイプテーブル及び新たな例外処理アクションテーブルと、
例外処理を生成するコードを含む各ベーシックブロックと、前記例外処理に対するハンドラを含むベーシックブロックとの間の前記表現における関連付けと、
の1以上に少なくとも部分的に基づき生成するステップを有することを特徴とする方法。 - 請求項10記載の方法であって、さらに、
最適化中に前記例外処理コールサイトテーブルの符号なし数として生成される、新たなプロシージャの例外処理コールサイトのためのハンドラのアドレスに対する負のオフセットを表現するステップを有することを特徴とする方法。 - 記憶装置に通信可能に接続されるプロセッサと、
前記記憶装置上に格納され、前記プロセッサによって実行可能であって、プログラムの第1バイナリバージョンと、前記プログラムの第1バイナリバージョンに係るアンワインド情報とを解析する解析モジュールと、
前記記憶装置上に格納され、前記プロセッサによって実行可能であって、前記解析結果に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンを生成するため、前記プログラムの第1バイナリバージョンに対して最適化を実行する最適化モジュールと、
前記記憶装置上に格納され、前記プロセッサによって実行可能であって、前記解析結果と前記実行された最適化に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンに対する新しいアンワインド情報を生成する生成モジュールと、
から構成されることを特徴とするシステム。 - 請求項12記載のシステムであって、
前記アンワインド情報はさらに、前記プログラムの各プロシージャの各アンワインド領域に係り、前記プログラムのアンワインド処理に関する言語独立情報を有することを特徴とするシステム。 - 請求項12記載のシステムであって、
前記アンワインド情報はさらに、前記プログラムのソースコードバージョンのソース言語に規定される例外処理に関する言語に依存した例外処理情報を有し、
前記プログラムの第1バイナリバージョンは、少なくとも部分的に前記プログラムのソースコードバージョン上での前記ソース言語のコンパイラの実行により求められる、
ことを特徴とするシステム。 - プログラムの第1バイナリバージョンと、前記プログラムの第1バイナリバージョンに係るアンワインド情報とを解析するステップと、
前記解析結果に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンを生成するため、前記プログラムの第1バイナリバージョンに対して最適化を実行するステップと、
前記解析結果と前記実行された最適化に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンに対する更新されたアンワインド情報を生成するステップと、
から構成される方法を、マシーンによりアクセスされると、前記マシーンに実行されるデータを格納することを特徴とするマシーンアクセス可能な媒体。 - 請求項15記載のマシーンアクセス可能な媒体であって、
前記アンワインド情報はさらに、前記プログラムの各プロシージャの各アンワインド領域に係り、前記プログラムのアンワインド処理に関する言語独立情報を有することを特徴とするマシーンアクセス可能な媒体。 - 請求項16記載のマシーンアクセス可能な媒体であって、
前記解析するステップはさらに、
命令、ベーシックブロック及びプロシージャの表現を含む前記プログラムの表現を生成するステップと、
表現された各ベーシックブロックのベーシックブロックタイプを特定し、前記ベーシックブロックタイプにより前記表現をマークするステップと、
前記プログラムの各プロシージャの各アンワインド領域に対するアンワインド属性とアンワインド状態データとを生成するステップと、
アンワインド状態データと属性とを前記プログラムの命令の表現と関連付けるステップと、
アンワインド状態データと属性とを前記プログラムのプロシージャの表現と関連付けるステップと、
から構成されることを特徴とするマシーンアクセス可能な媒体。 - 請求項17記載のマシーンアクセス可能な媒体であって、
前記最適化を実行するステップはさらに、
最適化中、関連付けされたアンワインド属性を有する命令を削除からプロテクトするステップと、
関連付けされたアンワインド属性を有する第1命令が、最適化中に第2命令を生成するよう複製される場合、前記第1命令の表現に係るアンワインド属性に少なくとも部分的に基づき、前記第2命令と該表現に係るアンワインド属性とを生成するステップと、
最適化中、何れの命令も1つのベーシックブロックタイプのベーシックブロックから異なるベーシックブロックタイプのベーシックブロックに移動されないよう回避するステップと、
前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、前記プログラムの第1バイナリバージョンのプロシージャの表現に対する前記アンワインド状態データ及び属性と、前記分割が行われた命令に対するアンワインドルールとに少なくとも部分的に基づき、各新しいプロシージャの表現と、該表現に対するアンワインド状態データ及び属性とを生成するステップと、
から構成されることを特徴とするマシーンアクセス可能な媒体。 - 請求項18記載のマシーンアクセス可能な媒体であって、
前記解析結果と前記実行された最適化に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンに対する新たなアンワインド情報を生成するステップはさらに、
各プロシージャの各アンワインド領域に対するアンワインド状態データを、該データが前記プログラムの第2バイナリバージョン内の前記領域の位置及び新たな長さと整合するように調整するステップと、
前記調整されたアンワインド状態データを前記プログラムの第2バイナリバージョンに関連付けるステップと、
から構成されることを特徴とするマシーンアクセス可能な媒体。 - 請求項19記載のマシーンアクセス可能な媒体であって、
前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、該プロシージャは、ペアレントプロシージャと少なくとも1つのチャイルドプロシージャとに分割され、
前記解析結果と前記実行された最適化に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンに対する新たなアンワインド情報を生成するステップはさらに、
前記チャイルドプロシージャがゼロの長さのプロローグを有することを示すため、前記分割によって生成された各チャイルドプロシージャの表現に対して前記アンワインド状態データをマーク付けするステップと、
前記アンワインド状態データがアクティブとなる前記プログラムの位置を前記チャイルドプロシージャの始めに設定するステップと、
から構成されることを特徴とするマシーンアクセス可能な媒体。 - 請求項15記載のマシーンアクセス可能な媒体であって、
前記アンワインド情報はさらに、前記プログラムのソースコードバージョンのソース言語に規定される例外処理に関する言語に依存した例外処理情報を有し、
前記プログラムの第1バイナリバージョンは、少なくとも部分的に前記プログラムのソースコードバージョン上での前記ソース言語のコンパイラの実行により求められる、
ことを特徴とするマシーンアクセス可能な媒体。 - 請求項21記載のマシーンアクセス可能な媒体であって、
前記解析するステップはさらに、
前記プログラムの第1バイナリバージョンを求めるのに実行されたコンパイラを特定するステップと、
前記プログラムの命令、ベーシックブロック及びプロシージャの表現を生成するステップと、
例外処理情報が前記プログラムのプロシージャのアンワインド情報に含まれる場合、前記コンパイラのアイデンティティに少なくとも部分的に基づき、前記プロシージャに対する例外処理情報を解釈するステップと、
前記例外処理情報に少なくとも部分的に基づき、各プロシージャの表現のため、例外処理コールサイトテーブル、例外処理タイプテーブル及び例外処理アクションテーブルを生成するステップと、
例外処理を生成するコードを含むベーシックブロックの表現と、前記例外処理のためのハンドラを含むベーシックブロックの表現との間の関連付けを前記表現に追加するステップと、
から構成されることを特徴とするマシーンアクセス可能な媒体。 - 請求項22記載のマシーンアクセス可能な媒体であって、
前記最適化を実行するステップはさらに、
例外処理を生成するコードを含むベーシックブロックを削除からプロテクトするステップと、
例外処理を処理するコードを含むベーシックブロックを削除からプロテクトするステップと、
例外処理を生成するコードを含む第1ベーシックブロックが、最適化中に第2ベーシックブロックを生成するため複製される場合、前記第2ベーシックブロックの表現と、前記第1ベーシックブロックの表現の既存の各関連付けに対応する前記第2ベーシックブロックの表現の関連付けとを生成するステップと、
前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、各新しいプロシージャに対して、例外処理コールサイトテーブル、例外処理タイプテーブル及び例外処理アクションテーブルを、前記プログラムの第1バイナリバージョンの前記プロシージャに対する例外処理コールサイトテーブル、例外処理タイプテーブル及び例外処理アクションテーブルに少なくとも部分的に基づき生成するステップと、
から構成されることを特徴とするマシーンアクセス可能な媒体。 - 請求項23記載のマシーンアクセス可能な媒体であって、
前記解析結果と前記実行された最適化に少なくとも部分的に基づき、前記プログラムの第2バイナリバージョンに対する新たなアンワインド情報を生成するステップはさらに、前記第2バイナリプログラムの各プロシージャに対して、新たな例外処理コールサイトテーブル、新たな例外処理タイプテーブル及び新たな例外処理アクションテーブルを、
前記プログラムの第1バイナリバージョンを解析することによってそれぞれ生成される前記例外処理コールサイトテーブル、前記例外処理タイプテーブル及び前記例外処理アクションテーブルと、
最適化中のプロシージャの分割によって生成される新たなプロシージャに対してそれぞれ生成される新たな例外処理コールサイトテーブル、新たな例外処理タイプテーブル及び新たな例外処理アクションテーブルと、
例外処理を生成するコードを含む各ベーシックブロックと、前記例外処理に対するハンドラを含むベーシックブロックとの間の前記表現における関連付けと、
の1以上に少なくとも部分的に基づき生成するステップを有することを特徴とするマシーンアクセス可能な媒体。 - 請求項24記載のマシーンアクセス可能な媒体であって、さらに、
最適化中に前記例外処理コールサイトテーブルの符号なし数として生成される、新たなプロシージャの例外処理コールサイトのためのハンドラのアドレスに対する負のオフセットを表現するステップを有することを特徴とするマシーンアクセス可能な媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/888,663 | 2004-07-08 | ||
US10/888,663 US7480902B2 (en) | 2004-07-08 | 2004-07-08 | Unwind information for optimized programs |
PCT/US2005/024252 WO2006014587A1 (en) | 2004-07-08 | 2005-07-08 | Generating unwind information for optimized programs |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2008505423A true JP2008505423A (ja) | 2008-02-21 |
JP4833206B2 JP4833206B2 (ja) | 2011-12-07 |
Family
ID=35266865
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007520530A Expired - Fee Related JP4833206B2 (ja) | 2004-07-08 | 2005-07-08 | 最適化されたプログラムのためのアンワインド情報の生成 |
Country Status (5)
Country | Link |
---|---|
US (2) | US7480902B2 (ja) |
EP (1) | EP1782193A1 (ja) |
JP (1) | JP4833206B2 (ja) |
CN (1) | CN100462920C (ja) |
WO (1) | WO2006014587A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104049941A (zh) * | 2013-03-15 | 2014-09-17 | 英特尔公司 | 跟踪指令的控制流程 |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7480902B2 (en) * | 2004-07-08 | 2009-01-20 | Intel Corporation | Unwind information for optimized programs |
US7926048B2 (en) * | 2006-07-26 | 2011-04-12 | Intel Corporation | Efficient call sequence restoration method |
US8370821B2 (en) * | 2007-08-21 | 2013-02-05 | International Business Machines Corporation | Method for enabling profile-based call site tailor-ing using profile gathering of cloned functions |
US8627302B2 (en) * | 2007-11-27 | 2014-01-07 | Oracle America, Inc. | Sampling based runtime optimizer for efficient debugging of applications |
US20100122073A1 (en) * | 2008-11-10 | 2010-05-13 | Ravi Narayanaswamy | Handling exceptions in software transactional memory systems |
US8627291B2 (en) * | 2012-04-02 | 2014-01-07 | International Business Machines Corporation | Identification of localizable function calls |
US9280322B2 (en) * | 2012-09-27 | 2016-03-08 | Intel Corporation | Generating source code |
US9372695B2 (en) | 2013-06-28 | 2016-06-21 | Globalfoundries Inc. | Optimization of instruction groups across group boundaries |
US9348596B2 (en) | 2013-06-28 | 2016-05-24 | International Business Machines Corporation | Forming instruction groups based on decode time instruction optimization |
US9830206B2 (en) * | 2013-12-18 | 2017-11-28 | Cray Inc. | Cross-thread exception handling |
US9348595B1 (en) | 2014-12-22 | 2016-05-24 | Centipede Semi Ltd. | Run-time code parallelization with continuous monitoring of repetitive instruction sequences |
US9208066B1 (en) * | 2015-03-04 | 2015-12-08 | Centipede Semi Ltd. | Run-time code parallelization with approximate monitoring of instruction sequences |
US10296350B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences |
US10296346B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences based on pre-monitoring |
US9715390B2 (en) | 2015-04-19 | 2017-07-25 | Centipede Semi Ltd. | Run-time parallelization of code execution based on an approximate register-access specification |
US11003764B2 (en) * | 2018-02-06 | 2021-05-11 | Jayant Shukla | System and method for exploiting attack detection by validating application stack at runtime |
US11205004B2 (en) * | 2019-06-17 | 2021-12-21 | Baidu Usa Llc | Vulnerability driven hybrid test system for application programs |
US11442739B2 (en) | 2019-09-16 | 2022-09-13 | International Business Machines Carporation | Exception handling |
US11275676B2 (en) * | 2020-04-15 | 2022-03-15 | Baidu Usa Llc | Constraint guided hybrid fuzzing test system for application programs |
CN112527267A (zh) * | 2020-12-15 | 2021-03-19 | 湖南戈人自动化科技有限公司 | 一种编辑器展开折叠效果实现方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000112772A (ja) * | 1998-09-29 | 2000-04-21 | Axis Ab | 命令セット内の命令に応答してプロセスを実行するデ―タ処理システムおよびその命令処理方法 |
WO2000065440A2 (en) * | 1999-04-27 | 2000-11-02 | Transitive Technologies Limited | Exception handling method and apparatus for use in program code conversion |
US6247172B1 (en) * | 1998-07-02 | 2001-06-12 | Hewlett-Packard Company | Method for a translation system that aggressively optimizes and preserves full synchronous exception state |
US6293712B1 (en) * | 1997-09-30 | 2001-09-25 | Institute For The Development Of Emerging Architectures, Llc | Method and apparatus for constructing a stack unwind data structure |
US20030101380A1 (en) * | 2001-11-29 | 2003-05-29 | Microsoft Corporation | Method and system for rewriting unwind data in the presence of exceptions |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6014515A (en) * | 1997-05-29 | 2000-01-11 | Hewlett-Packard Company | Enhanced stack unwind facility |
US6662354B1 (en) * | 1999-01-29 | 2003-12-09 | Unisys Corporation | Determining destinations of a dynamic branch |
US6412109B1 (en) * | 1999-01-29 | 2002-06-25 | Sun Microsystems, Inc. | Method for optimizing java bytecodes in the presence of try-catch blocks |
US6934939B2 (en) * | 2001-02-28 | 2005-08-23 | International Business Machines Corporation | Method for unwinding a program call stack |
US6993750B2 (en) * | 2001-12-13 | 2006-01-31 | Hewlett-Packard Development Company, L.P. | Dynamic registration of dynamically generated code and corresponding unwind information |
US7131115B2 (en) * | 2002-03-25 | 2006-10-31 | Hewlett-Packard Development Company, L.P. | Unwinding instrumented program code |
US7146607B2 (en) * | 2002-09-17 | 2006-12-05 | International Business Machines Corporation | Method and system for transparent dynamic optimization in a multiprocessing environment |
US20040128658A1 (en) * | 2002-12-27 | 2004-07-01 | Guei-Yuan Lueh | Exception handling with stack trace cache |
WO2005029241A2 (en) * | 2003-09-15 | 2005-03-31 | Plum Thomas S | Automated safe secure techniques for eliminating |
US7480902B2 (en) * | 2004-07-08 | 2009-01-20 | Intel Corporation | Unwind information for optimized programs |
US8176475B2 (en) * | 2006-10-31 | 2012-05-08 | Oracle America, Inc. | Method and apparatus for identifying instructions associated with execution events in a data space profiler |
-
2004
- 2004-07-08 US US10/888,663 patent/US7480902B2/en not_active Expired - Fee Related
-
2005
- 2005-07-08 WO PCT/US2005/024252 patent/WO2006014587A1/en active Application Filing
- 2005-07-08 JP JP2007520530A patent/JP4833206B2/ja not_active Expired - Fee Related
- 2005-07-08 EP EP05769289A patent/EP1782193A1/en not_active Withdrawn
- 2005-07-08 CN CNB2005800229255A patent/CN100462920C/zh not_active Expired - Fee Related
-
2009
- 2009-01-16 US US12/355,613 patent/US8181170B2/en not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6293712B1 (en) * | 1997-09-30 | 2001-09-25 | Institute For The Development Of Emerging Architectures, Llc | Method and apparatus for constructing a stack unwind data structure |
US6247172B1 (en) * | 1998-07-02 | 2001-06-12 | Hewlett-Packard Company | Method for a translation system that aggressively optimizes and preserves full synchronous exception state |
JP2000112772A (ja) * | 1998-09-29 | 2000-04-21 | Axis Ab | 命令セット内の命令に応答してプロセスを実行するデ―タ処理システムおよびその命令処理方法 |
WO2000065440A2 (en) * | 1999-04-27 | 2000-11-02 | Transitive Technologies Limited | Exception handling method and apparatus for use in program code conversion |
US20030101380A1 (en) * | 2001-11-29 | 2003-05-29 | Microsoft Corporation | Method and system for rewriting unwind data in the presence of exceptions |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104049941A (zh) * | 2013-03-15 | 2014-09-17 | 英特尔公司 | 跟踪指令的控制流程 |
US9880842B2 (en) | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
Also Published As
Publication number | Publication date |
---|---|
JP4833206B2 (ja) | 2011-12-07 |
US7480902B2 (en) | 2009-01-20 |
CN1981266A (zh) | 2007-06-13 |
US20090133008A1 (en) | 2009-05-21 |
US20060010431A1 (en) | 2006-01-12 |
US8181170B2 (en) | 2012-05-15 |
WO2006014587A1 (en) | 2006-02-09 |
EP1782193A1 (en) | 2007-05-09 |
CN100462920C (zh) | 2009-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4833206B2 (ja) | 最適化されたプログラムのためのアンワインド情報の生成 | |
US5854932A (en) | Compiler and method for avoiding unnecessary recompilation | |
US5182806A (en) | Incremental compiler for source-code development system | |
US5325531A (en) | Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines | |
US5313387A (en) | Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers | |
US5586328A (en) | Module dependency based incremental compiler and method | |
US5170465A (en) | Incremental-scanning compiler for source-code development system | |
US5201050A (en) | Line-skip compiler for source-code development system | |
US5193191A (en) | Incremental linking in source-code development system | |
US7516441B2 (en) | Method and system for program editing and debugging in a common language runtime environment | |
US6836884B1 (en) | Method and system for editing software programs | |
US6931627B2 (en) | System and method for combinatorial test generation in a compatibility testing environment | |
CN111770113A (zh) | 一种执行智能合约的方法、区块链节点和节点设备 | |
US8161465B2 (en) | Method and apparatus for performing conditional compilation | |
JP4181326B2 (ja) | コード最適化のための方法、装置及びプログラム | |
WO2014106000A1 (en) | Extending a development environment | |
JP2007521568A (ja) | 複数の例外処理モデルの中間表現 | |
PT100166A (pt) | Metodo e instrumento de compilar codigo em computadores digitais | |
US20060101420A1 (en) | Programming language support for integrating undo and exception handling | |
US5301327A (en) | Virtual memory management for source-code development system | |
CN113220326B (zh) | 智能合约升级方法及区块链系统 | |
US6895579B2 (en) | Method and apparatus for maintaining exception reporting for register promotion | |
AU638999B2 (en) | Incremental compiler for source-code development system | |
CN113220327B (zh) | 智能合约升级方法及区块链系统 | |
Courant et al. | Debootstrapping without archeology: Stacked implementations in Camlboot |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100427 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100722 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100729 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100826 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110405 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20110630 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20110707 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20110803 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20110810 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110817 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110913 |
|
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: 20110921 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140930 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |