JP4833206B2 - 最適化されたプログラムのためのアンワインド情報の生成 - Google Patents

最適化されたプログラムのためのアンワインド情報の生成 Download PDF

Info

Publication number
JP4833206B2
JP4833206B2 JP2007520530A JP2007520530A JP4833206B2 JP 4833206 B2 JP4833206 B2 JP 4833206B2 JP 2007520530 A JP2007520530 A JP 2007520530A JP 2007520530 A JP2007520530 A JP 2007520530A JP 4833206 B2 JP4833206 B2 JP 4833206B2
Authority
JP
Japan
Prior art keywords
unwind
program
procedure
exception handling
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.)
Expired - Fee Related
Application number
JP2007520530A
Other languages
English (en)
Other versions
JP2008505423A (ja
Inventor
パティル,ハリシュ
ムート,ロベルト
ローニー,ジェフ
Original Assignee
インテル コーポレイション
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
Application filed by インテル コーポレイション filed Critical インテル コーポレイション
Publication of JP2008505423A publication Critical patent/JP2008505423A/ja
Application granted granted Critical
Publication of JP4833206B2 publication Critical patent/JP4833206B2/ja
Expired - Fee Related 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/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Description

発明の詳細な説明
[背景]
人間により可読な又はハイレベルソース言語により当初記述されたプログラムは、一般にコンパイル処理及びリンク処理によって機械語による実行可能プログラムに変換される。バイナリコードと呼ばれるこの結果として得られるプログラムのバージョンは、プロセッサベースシステムによって実行可能である。プログラムは、一般に便宜上、再利用可能性、設計複雑性管理及び他の理由のため、プロシージャと呼ばれるサブプログラムに分割される。プロシージャは、CやC++などの言語による関数などの他の名称によって参照されるかもしれない。ハイレベル言語バージョンによるプロシージャに分割されるプログラムは、一般に当該プログラムのハイレベル言語バージョンによるものにほぼ対応するプロシージャを有するプログラムのバイナリバージョンにコンパイル及びリンクされる。コンパイル及びリンク処理の後、システム上で実行されるプログラムは、典型的には、プログラムスタックを利用して、当該技術分野では周知なように、プロシージャの呼び出しを支援し、プログラムのメインフロー又は呼出元のプロシージャに戻る。一般に、プロシージャコールは入れ子にされ、メインプログラムはメインプロシージャとみなされるかもしれないため、以下において、「呼出元プロシージャ(calling procedure)」及び「呼出先プロシージャ(called procedure)」という用語が、一般性を失うことなく用いられる。プロシージャコールは、命令ポインタなどの呼出元プロシージャによって用いられるレジスタ、及び呼出先プロシージャの実行によって上書きされる可能性のある他のレジスタの値を含む呼出に関する値のセットをプログラムスタックに格納しなければならない。呼出元プロシージャのローカル変数や、呼出先プロシージャによって変更される可能性のないパラメータなどの他のデータ値もまた、スタックに格納されるかもしれない。スタック上の特定のプロシージャの特定の呼出に関するすべてのデータは、それのスタックフレーム又はアクティベーションレコードと呼ばれる。
システム上でプログラムを実行するための典型的なランタイムシステムでは、呼び出されているプロシージャは、プログラムスタック上のそれのスタックフレームをそれの第1アクションセットの1つとして割当て、プロシージャの実行に従って変更される可能性のあるデータによりスタックフレームを占有させる。イグジット前に、それは割り当てられたスタックフレームをリリースし、リターン実行前にプログラムスタックポインタを更新する。従って、プログラムスタックは、プロシージャコール及びリターン処理機構によるプログラム実行の通常のプロセスにおいて管理される。しかしながら、ときどきプログラムコントロールは、プロシージャリターン機構の通常の処理なしに、あるプロシージャから他のプロシージャに移行することもある。
これは、一例では、プロシージャが仲介リターンの実行なしに、異なるレベルのプログラムスタックにおいてプログラムコントロールを他のプロシージャに移行させるロングジャンプタイプ命令を実行する際に発生するかもしれない。他の例では、これは、再びスタックがリターンコールシーケンスにより管理されることなく、コントロールを他のレベルのプログラムスタックにおける例外処理ハンドラに移行させるプロシージャ内部で例外処理が発生する場合に行われるかもしれない。さらなる他の例では、これは、デバッガがプログラムをデバッグするのに使用され、プロシージャ内のポイントから現在のステートメントを導いたコールチェーンへのポイントまでプログラムの外部のデバッガによって移行される場合に発生するかもしれない。マルチスレッド処理をサポートする言語及びランタイムシステムでは、同じタイプの現象がスレッドの終了によって引き起こされるかもしれない。
このようなプロシージャ内部からのコントロールの移行が行われるとき、コントロールが移行される新たなポイントにおいてプログラムの実行が適切に回復するように、コントロールがプロシージャから移行されるポイントにおいて行われたかのように通常のリターンプロセスをシミュレートするという意味で、プログラムスタックはアンロール(unroll)又はアンワインド(unwind)される必要がある。プログラムスタックの適切なアンワインド処理のため、一部のランタイムシステムは、プログラムの実行可能イメージに含まれる特定のサポートを提供する。これは、通常のリターン以外のポイントにおけるプロシージャからのイグジットの後に、ランタイムシステムがコンテクストを正確に復元することを可能にするアンワインド情報又はアンワインドテーブルの形式となる。
アンワインド情報は、このようなイグジットが発生する可能性のあるプロシージャの各ステートメントと関連付けされるかもしれない。いくつかの例では、アンワインド情報は、アンワインド情報がすべてのステートメントに対して同一となるプロシージャの領域又はステートメントブロックと関連付けされるかもしれない。他の例では、アンワインド情報は、各ステートメント又は格ステートメントブロックに対して異なるかもしれない。
アンワインド情報の有効性は、ポストリンクプログラム最適化(post−link program optimization)によって重大な障害又は解消されるかもしれない。ポストリンクプログラム最適化は、例えば、実行時間などに関するプログラムパフォーマンスを、それの入出力動作などの他の動作を変更することなく、プログラムのバイナリポストリンクバージョンのコードを変更する各種技術によって向上させるための技術セットである。プログラム最適化に利用される周知の技術の中には、プロシージャ分割処理、ループアンロール処理、ループからの命令の移動がある。これらの技術は、既存のプロシージャの変更又は削除によって、新たなプロシージャの追加、ステートメントの複製、及びもとのバージョンのプログラムからのステートメントの削除を含む複数の方法によりもとのプログラムとは異なるプログラムの新たなバイナリバージョンをもたらす。もとのプログラムのプロシージャ及びステートメントに係るアンワインド情報は、一般に最適化されたプログラムのプログラムスタックのアンワインド処理における未使用に限定される。
[詳細な説明]
一実施例では、図1に示されるような処理が行われる。概略すると、以下のメインフェーズが当該処理を構成する。すなわち、第1に、関連付けされたアンワインド情報130によるプログラム125のポストリンク最適化バイナリバージョンが、解析フェーズ105と110に入力される。プログラムの解析は、入力プログラムからのアンワインド情報の読み出し(105)と、当該情報を利用してプログラムの詳細表現を構成し、追加的なアノテーション(annotation)をプログラムのステートメント及びブロックの表現(をデコレートし)と関連付ける(110)という2つの主要なコンポーネントから構成される。当該フェーズの後、実際のプログラムの最適化が行われ(115)、そこで、プログラムの最適化されたバージョンと整合した新たなアンワインド情報が最適化後に再生成可能となることを保証するため、必要に応じてデコレートされた表現が利用及び更新される。最適化されたプログラム、デコレートされた表現及びもとのプログラムのアンワインド情報が使用され(120)、プログラムの最適化されたバイナリバージョンと整合し格納される(135)新たなアンワインド情報を生成する(140)。
次に、当該実施例におけるこれらの処理フェーズのそれぞれが、さらに詳細に検討される。アンワインド情報は、コンパイラとリンカーを含むコンパイルシステムによってバイナリプログラムに関連付けされ、図2に示されるような情報を含むかもしれない。一般的に図示された一実施例は、Intel(登録商標)Itanium(登録商標)プロセッサファミリに対するアンワインド情報を格納するための取り決めのセットである。この取り決めのセットは、“Intel Itanium Software Conventions and Runtime Architecture Guide”に詳述される。本実施例では、他の実施例と同様に、アンワインド情報は、プログラムスタックがプロシージャの実行における特定ポイントにおいてアンワインド処理される必要がある場合、プロシージャによって使用される関連するレジスタセットが少なくともどのようにリストアされるべきか詳述する必要がある。例えば、Itanium(登録商標)プロセッサファミリのためのアンワインド情報は、2つのセクションから構成される。第1のものは、図の202〜206に示されるような、各々がプロシージャ212における命令ポインタ208のポジションに対応するレコードセットを有するテーブルである。いくつかの実施例では、命令ポインタの値の範囲は、同じレコードセットに対応するかもしれない。命令ポインタとアンワインド情報の位置との間の関係は、一実施例では、アンワインド情報のレコードアレイにインデックスを生成するため、命令ポインタに適用されるマッピング関数に基づくものであるかもしれない。
アンワインド処理のため、各プロシージャは、各アンワインド領域において同一のアンワインド情報セットが有効となるいくつかのアンワインド領域に分割されるかもしれない。テーブルにおけるすべてのアンワインドレコードは、有効となるプロシージャ内の領域のスタートポイント202とエンドポイント204を示す。この実施例では、これらのエンドポイントがポインタ又はアドレスとして記録される。当該実施例におけるアンワインド領域は、アンワインド記述子エリア210、パーソナリティルーチン214及び言語固有データエリア(LSDA)215から構成される指定された領域に対するプロシージャのアンワインド処理のための実データを指し示す情報ポインタを含む。これらのうち、後者の2つは、一般にはコンパイラ及び言語に依存したものであり、このため、同一のプラットフォーム上でさえコンパイラ毎に異なるものとなる。
次に、アンワインド記述子セグメント210は、本実施例では、アンワインド処理の場合にどのようにプロセッサレジスタが処理されるべきか指示するのに主として用いられる。各レジスタは、一般にプロシージャの実行における特定のポイントにおいてセーブされる必要がある。記述子は、何れのレジスタがセーブされるべき、プロシージャにおける何れの命令においてセーブされるべきか、及びセーブされるべきメモリ内の位置を記述するものであるかもしれない。アンワインド処理のため、プロシージャは、プロローグ領域と1以上のボディー領域の少なくとも2つの領域に分割されるかもしれない。プロローグ領域は、プロシージャによって使用されるべきレジスタが確立され、既存のレジスタ状態がセーブされ、プロシージャのスタックフレームが割り当てられる領域である。ボディー領域は、プロローグ領域に後続し、一般にスタックフレームの割当てや、レジスタセーブ及びリストアの実行を行わない。プロローグセクションのアンワインド情報は、セーブされる又はセーブされないレジスタセットがステートメント毎に変わる可能性があるため、一般にはボディー領域に対するものより詳述される。
図2に示されるように、アンワインド記述子は、アンワインド記述子エリアにおいて記述子が提供される領域を示す領域ヘッダ216を含む。これは、プロローグ記述子218及び1以上のボディー記述子220に続く。他の記述子222もまた利用可能である。
本実施例におけるプロシージャをアンワインド処理するためのデータの次の部分は、例外処理のサポートを含む。例外処理は、特定のプログラミング言語において利用可能な周知のエラー処理機構である。本実施例では、一例としてC++言語が利用されるが、他の同様の機構もまた、Java(登録商標)、Ada及び当該技術分野で知られているような他のプログラミング言語により実現される。
当業者はC++言語の一般的コンテクストに十分精通していることが予想される。特定の例外処理への参照によって、C++プログラミング言語は、例外処理のためのコードを構成するためプログラマーによって利用可能なtry、catch及びthrowの言語キーワードのセマティックを規定している。tryブロックは、通常は1以上のcatchブロックに続くステートメントブロックである。各catchブロックは、“catch all”条件を示すコンストラクト“...”又はそれに関連付けされたタイプを有する。tryブロックに含まれるコールされるステートメント及びプロシージャは、存在する場合には、throwステートメントを含むかもしれない。C++によるthrowステートメントは、ある特定タイプの引数を求める。
try、catch及びthrowのセマティックは、一般には以下の通りである。ランタイム時において、例外処理中にthrowステートメントに遭遇した場合、サーチフェーズがマッチしたcatchに対して開始される。このサーチはまず、現在のコンテクスト、すなわち、現在実行中のプロシージャにおいて実行され、さらにプロシージャのコールチェーンまで実行される。実行されたthrowの引数と同じタイプの、又は“catch all”であるcatchクローズが存在する場合、マッチが発生する。サーチフェーズは、マッチしたcatchに又はmain()プロシージャに到達すると終了する。マッチが存在しない場合、ランタイムエラーが生成される。マッチしたcatchが検出されると、クリーンアップフェーズが開始される。クリーンアップフェーズでは、throwから見ることができるローカル変数が、まず破壊される。見ることができるすべてのローカル変数を破壊した後、現在のプロシージャがアンワインド処理され、プログラムスタックのアンワインド処理が要求される。マッチしたcatchによるプロシージャに到達するまで、コールチェーンの各プロシージャに対して同一のプロセス(ローカル変数を破壊し、プロシージャをアンワインド処理する)が繰り返される。その後、コントロールは、マッチしたcatchクローズにわたされる。マッチしたcatchのステートメントが実行され、その後、コントロールがすべてのcatchクローズに続くステートメントにわたされる。
これにより、例外処理が発生すると、それはスタックアンワインド処理と、前述されたタイプのアンワインド情報の利用を必要とする。さらに、例外処理をサポートする他のタイプのアンワインド情報がまた、アンワインド処理の一部として適切な例外処理を可能にするため、コンパイラ及びリンカーによって格納されるかもしれない。図2に示されるように、この情報は、当該実施例において、パーソナリティルーチン214及びLSDA(Language Specific Data Area)215から構成される。Intel(登録商標)Itanium(登録商標)プロセッサランタイムシステムに対するアンワインド情報の上記コンパイラ固有エリアのより詳細な説明は、当該プロセッサに対してリリースされた具体的コンパイラに関する文書に見つけることができる。一例では、Intel(登録商標)Itanium(登録商標)プロセッサのための公表されたGNU gccコンパイラバージョン3.1は、C++例外処理のためのアンワインドエリアのコンパイラ固有部分を実現する。以下の説明において、本実施例を説明するのに十分なコンパイラ固有エリアが概略される。記載される特徴は、Itanium(登録商標)のためのC++例外処理をサポートするよう構成されるコンパイラに含まれるかもしれない。
本実施例では、パーソナリティルーチン214は、例外処理のためのC++ランタイムライブラリの特別なプロシージャである。パーソナリティルーチンは、ランタイムシステムによって採用される特定のアクションが当該言語の例外処理コンストラクトのセマティックに依存しているため、コンパイラのプログラミング言語に依存する。LSDA215は、マッチした各種catchクローズ、catchクローズボディーコード及び当該プロシージャのためのクリーンアップアクションのためのコードを指し示すテーブルから構成される。catchクローズマッチング、catchクローズボディー及びクリーンアップアクションを実現する上記コード部分は、ランディングパッド(landing pad)と呼ばれる。これらのテーブルのレイアウトは、C++コンパイラによって決定される。パーソナリティルーチンもまた、C++言語だけでなく、プログラムのバイナリバージョンを生成するのに使用される特定のC++コンパイラに固有なものである。なぜなら、コンパイラはLSDAのテーブルのレイアウトを理解する必要があるためである。
図2は、図示された実施例のLSDAのフォーマットを示す。スタート(Start)224、ベース(Base)226及びコールサイトサイズ(Call Site Size)228は、ヘッダフィールドである。スタートは、ランディングパッドのアドレスがそれに対して指定可能なスタートアドレスである。ベースは、タイプテーブル(後述される)のエンドに対するオフセットである。コールサイトサイズは、バイトによるテーブルのサイズである。
ヘッダフィールドは、コールサイトテーブルに続く。一般に、コンパイラは、throwステートメントをC++ランタイムシステムに対するプロシージャコールに変換する。このような各コールは、コールサイトテーブルのコールサイトによって処理される(230)。各コールサイトは、ランディングパッドに対する任意的なポインタとアクションテーブルに対するポインタに関連付けされる(232)。アクションテーブルは、アクションレコードに格納されるcatchクローズに対するタイプ情報を有する。当該情報は、ランタイムにおけるthrowのためのマッチを検出するのに利用される(234)。
以上において、図1のフローチャートを参照することにより、一実施例による例外処理を含むアンワインド処理に関するポストリンク情報130が説明された。当該実施例について説明された構成は、アンワインド処理のための言語独立又は言語及びコンパイラ固有情報を表す唯一の方法ではない。当該技術分野において知られるようなリスト、テーブル、ハッシュデータアレイなどの他の構成もまた利用可能である。他の実施例では、データの構成及びフィールドは可変である。いくつかの実施例では、特定のデータは省略されてもよい。例えば、コールサイトテーブルに対するベースアドレスは、プロシージャスタートアドレスと同じものと仮定されてもよい。
次に、図1の105〜115に示される処理の解析及び最適化フェーズが、より詳細に検討される。これらのフェーズは、入力プログラムからのアンワインド情報を処理し、プログラム最適化時にそれを変換し、出力される最適化されたプログラムに対して当該情報を再生成する。
・アンワインド情報の読み込み
一実施例では、図2に示されるようなアンワインド情報が、図1の105において、ポストリンク最適化装置の最適化前処理フェーズによって読み込まれ、解釈される。最適化装置は、アンワインド及びアンワインド情報セクションを含むプログラムの入力バイナリバージョンのすべてのアンワインド及びアンワインド情報セクションを読み込む。それは、プログラムの命令及びプロシージャに対する内部表現を生成する。最適化装置は、パーソナリティルーチンから入力プログラムを生成するのに利用されるコンパイラを決定している。その後、最適化装置は、アンワインドテーブルを探索する。図2の202〜206のようにプロシージャを表す各アンワインドテーブルエントリに対して、当該実施例は、210、214及び215におけるアンワインド情報セクションへのポインタに従い、216〜222に示されるものと同様のアンワインド情報レコードの解釈を開始する。あるプロシージャに対してLSDAが存在する場合、最適化装置は、LSDAを生成するのに利用されるコンパイラに固有のフォーマットを用いてLSDAを解釈する。上述されたように、これらのレコードは、プロシージャにおけるアンワインド領域によってグループ化される。各領域に対して、命令スロットにおける当該領域の長さを含むアンワインド状態データ構造と、プロシージャレジスタに対するより小さなアンワインドデータ構造シーケンスが生成される。レジスタに対するアンワインドデータ構造は、当該レジスタがどこからリストアされるべきか(例えば、アクティベーションレコード又は他のレジスタからなど)、その指定が有効となるとき(例えば、アンワインド領域に対する何れの命令スロット番号においてなど)を指定する。
・プログラム表現のデコレート処理
次に、図1の110において、命令、ベーシックブロック(直線のコントロールフローによるシーケンシャルな命令グループ)及びプロシージャなどに対する各種プログラムコンポーネントの内部表現が生成される。上述した方法によりアンワインド情報を解釈した後、当該実施例は、与えられたプロシージャにおける各種アンワインド領域に対するアンワインド状態レコードのシーケンスを生成する。その後、それはこれらのアンワインド状態レコードを当該プロシージャに対応する表現に添付する。その後、最適化装置は、LSDAからの復号化されたコールサイトテーブルを利用して、各プロシージャに対する復号化されたタイプテーブルと復号化されたアクションテーブルを生成する。それは、これらのテーブルをプロシージャの表現に添付する。次に、本実施例による最適化装置は、アンワインド状態レコードを照会しながら、ベーシックブロック及び命令を訪れる各プロシージャの表現を探索する。アンワインド状態レコードのレジスタに対するwhenフィールドが、与えられた命令に対応するスロットを指し示す場合、最適化装置は、当該命令にその事実を符号化する特別なアンワインド属性を添付する。最適化装置は、訪れたベーシックブロック又は命令にランディングパッドが存在するかチェックするため、復号化されたコールサイトテーブルを照会し、そうである場合、最適化装置は、コールサイトと現在訪れているベーシックブロック又は命令との間の関係をそれの内部表現に追加する。この処理の後、当該表現のプロシージャにおけるいくつかの命令は、110においてアンワインド属性によりデコレートされる。最適化装置はまた、アンワインド領域がベーシックブロック境界において開始及び終了することを保証し、各ベーシックブロックを「プロローグ」又は「ボディー」としてマークする。
当該フェーズ後、本実施例の最適化装置は、プログラムのそれの表現に基づき、プログラムの何れかの命令に対するアンワインドルールを生成することが可能である。このルールは、命令を介しプロシージャの始めからのすべてのアンワインド状態レコードの効果を含むアンワインド状態レコードを符号化する。ある命令に対するアンワインドルールは、当該命令におけるエンクロージング(enclosing)プロシージャからのアンワインド方法を示す。
・最適化の実行
最適化装置は、次に以下のアンワインド関連の検討によるプロシージャ及び命令に対する各種最適化を実行するかもしれない(115)。
i.アンワインド属性による命令は、削除されない。それが複製される必要がある場合、アンワインド属性もまた複製される。
ii.ランディングパッドベーシックブロックに関連するコールサイトによるベーシックブロックは、削除されない。
iii.コールサイトによるベーシックブロックが複製される場合、それとランディングパッドとの関係がまた、最適化装置の表現に複製される。
iv.異なる領域タイプ(例えば、プロローグとボディーなど)のベーシックブロックにおいて、命令移動は許可されない。
v.プロシージャが不連続なコードセグメントにスピリット又は分割されると、新たな部分(チャイルドと呼ばれる)が、もとのプロシージャ(ペアレントと呼ばれる)のスピリットポイントにおける命令に対するアンワインドルールに対応する復号化されたタイプテーブルと復号化されたアクションテーブルと共に、アンワインド状態レコードを承継する。
・アンワインド情報の再生成
最適化中、アンワインド領域の命令は移動されるかもしれず、このため、アンワインド状態の各種レジスタのwhenフィールドは、正確でないかもしれない。さらに、アンワインド領域は、縮小又は拡大されているかもしれず、これにより、アンワインド状態に記録されるようなそれらの長さは、変更の必要がある。最適化装置がタイプ情報を削除しないため、タイプテーブルが有効なままであるが、もとのコールサイトテーブルがもはや正確なものとならないように、コールサイト及びランディングパッドは移動されるかもしれない。最適化装置は、whenフィールド及びアンワインド領域長フィールドを調整するすべてのプロシージャのすべてのアンワインド領域に対するアンワインド状態レコードを処理する。プログラムの最適化されたバージョンのコールサイトテーブルが、プロシージャのコールサイトを有するすべてのベーシックブロックを探索し、何れか関連するランディングパッドを検索することによって生成される。このとき、最適化されたプロシージャに対する新たなコールサイトテーブルが生成されるかもしれない。分割プロシージャのチャイルド部分は、特別な方法により処理される。すなわち、それのペアレントから承継したアンワインド状態レコードのコピーが、ゼロの長さを有するものとしてマークされる。ゼロの長さのプロローグを有することは、アンワインド情報の各種レジスタに対するwhenフィールドがプロシージャの始めを指し示すことを意味する。復号化されたタイプ及びアクションテーブルのコピーが、ペアレントのタイプ及びアクションテーブルに基づき、当該チャイルドに対して生成される。
分割プロシージャのチャイルド部分に対するコールサイトテーブルを生成することは、LSDAによるコールサイトテーブルのランディングパッドフィールドがベース値(LSDAヘッダに符号化される図2の226)からのオフセットとして記述される場合に問題を発生させるかもしれない。なぜなら、一般に、このオフセットは正であると仮定されるためである。最適化前処理プロシージャに対して、スタートアドレスの値は、プロシージャのスタートアドレスに一致する。しかしながら最適化後、最適化により分割されるプロシージャのチャイルドのコールサイトを有する与えられたベーシックブロックに対して、ランディングパッドはペアレントに維持されるかもしれない。このため、ランディングパッドのベースオフセットは、分割されたプロシージャの相対的配置に応じて負となる可能性がある。この問題に対する1つの解決手段は、符号なしの数として負のオフセットを表すことである。パーソナリティルーチンが負のオフセットを読み込むと、それはそれを大きな正の数として解釈する。この大きな正の数を用いて実行されるアドレス計算は、当該技術分野において知られるようなラップアラウンド効果(wrap−around effect)による正しい最終的なアドレスを生成する。
その後、最適化装置は、図1の120において、各種プロシージャに対する変更されたアンワインド状態レコードを用いて、出力プログラム135にアンワインドテーブルとアンワインド情報レコードを書き込む。
マシーンによってアクセスされると、請求される主題に従ってマシーンに処理を実行させるデータを格納したマシーン可読媒体を有するコンピュータプログラムプロダクトとしていくつかの実施例を提供することが可能である。このマシーン可読媒体には、以下に限定するものではないが、フロッピー(登録商標)ディスケット、光ディスク、DVD−ROMディスク、DVD−RAMディスク、DVD−RWディスク、DVD+RWディスク、CD−Rディスク、CD−RWディスク、CD−ROMディスク、光磁気ディスク、ROM、RAM、EPROM、EEPROM、磁気又は光カード、フラッシュメモリ、又は電子命令を格納するのに適した他のタイプのメディア/マシーン可読媒体が含まれるかもしれない。さらに、当該プログラムが通信リンク(モデム又はネットワーク接続など)を介し搬送波又は他の伝搬媒体に実現されるデータ信号を介しリモートコンピュータから要求元コンピュータに転送可能なコンピュータプログラムプロダクトとして、いくつかの実施例がダウンロード可能である。
本方法の多くは、それらの最も基本的な形式により記載されているが、請求される主題の基本的範囲から逸脱することなく、これらの方法の何れかに対してステップの追加又は削除が可能であり、記載されたメッセージの何れかに対する情報の追加又は削除が可能である。さらなる多数の変更及び調整が可能であるということは、当業者に明らかであろう。上記実施例は、本発明を限定するためのものではなく、例示するために与えられている。請求された主題の範囲は、上述された具体例によってではなく、以下の請求項によってのみ決定されるべきものである。
図1は、一実施例による処理のハイレベルなフローチャートである。 図2は、一実施例によるアンワインド情報のデータレイアウトである。

Claims (14)

  1. (a)プログラムの第1バイナリバージョンと、前記プログラムの第1バイナリバージョンに係る、プログラムスタックをアンワインド処理するためのアンワインド情報とを解析するステップと、
    (b)前記プログラムの第1バイナリバージョンと、前記プログラムの第1バイナリバージョンに係るアンワインド情報とを解析した結果に基づき、前記プログラムの第2バイナリバージョンを生成するため、前記プログラムの第1バイナリバージョンに対して最適化を実行するステップと、
    (c)前記解析した結果と前記実行された最適化とに基づき、前記プログラムの第2バイナリバージョンに対する更新されたアンワインド情報を生成するステップと、
    から構成されるコンピュータにより実現される方法であって、
    前記アンワインド情報は、前記プログラムの各プロシージャの各アンワインド領域に係る前記プログラムのアンワインド処理に関する言語独立情報を有し、
    前記(a)解析するステップは、
    (i)命令、ベーシックブロック及びプロシージャの表現を含む前記プログラムの表現を生成することと、
    (ii)表現された各ベーシックブロックのベーシックブロックタイプを特定し、前記ベーシックブロックタイプにより前記表現をマーキングすることと、
    (iii)前記プログラムの各プロシージャの各アンワインド領域に対するアンワインド属性とアンワインド状態データとを生成することと、
    (iv)アンワインド状態データとアンワインド属性とを前記プログラムの命令の表現と関連付けることと、
    (v)アンワインド状態データとアンワインド属性とを前記プログラムのプロシージャの表現と関連付けることと、
    を含み
    前記(b)最適化を実行するステップは、
    (i)最適化中、関連付けされたアンワインド属性を有する命令を削除からプロテクトするステップと、
    (ii)関連付けされたアンワインド属性を有する第1命令が、最適化中に第2命令を生成するため複製される場合、前記第1命令の表現に係るアンワインド属性に基づき、前記第2命令の表現と該表現に係るアンワインド属性とを生成するステップと、
    (iii)最適化中、何れの命令も1つのベーシックブロックタイプのベーシックブロックから異なるベーシックブロックタイプのベーシックブロックに移動されることを阻止するステップと、
    (iv)前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、前記プログラムの第1バイナリバージョンのプロシージャの表現に対する前記アンワインド状態データ及びアンワインド属性と、前記分割が行われた命令に対するアンワインドルールとに基づき、新しい各プロシージャの表現と、該表現に対するアンワインド状態データ及びアンワインド属性とを生成するステップと、
    から構成されることを特徴とする方法。
  2. 請求項1記載の方法であって、
    前記(c)解析した結果と前記実行された最適化とに基づき、前記プログラムの第2バイナリバージョンに対する更新されたアンワインド情報を生成するステップはさらに、
    各プロシージャの各アンワインド領域に対するアンワインド状態データを、該アンワインド状態データが前記プログラムの第2バイナリバージョン内の各アンワインド領域の新たな長さ及び位置と整合するように調整するステップと、
    前記調整されたアンワインド状態データを前記プログラムの第2バイナリバージョンに関連付けるステップと、
    から構成されることを特徴とする方法。
  3. 請求項2記載の方法であって、
    前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、該プロシージャは、ペアレントプロシージャと少なくとも1つのチャイルドプロシージャとに分割され、
    前記解析した結果と前記実行された最適化に基づき、前記プログラムの第2バイナリバージョンに対する更新されたアンワインド情報を生成するステップはさらに、
    前記チャイルドプロシージャがゼロの長さのプロローグを有することを示すため、前記分割によって生成された各チャイルドプロシージャの表現に係る前記アンワインド状態データをマーキングするステップと、
    前記アンワインド状態データがアクティブとなる前記プログラムの位置を前記チャイルドプロシージャの始めに設定するステップと、
    から構成されることを特徴とする方法。
  4. 請求項1記載の方法であって、
    前記アンワインド情報はさらに、前記プログラムのソースコードバージョンのソース言語に規定される例外処理に関する言語に依存した例外処理情報を有し、
    前記プログラムの第1バイナリバージョンは、前記プログラムのソースコードバージョン上での前記ソース言語のコンパイラの実行により求められる、
    ことを特徴とする方法。
  5. 請求項4記載の方法であって、
    前記(a)解析するステップはさらに、
    (vi)前記プログラムの第1バイナリバージョンを求めるのに実行されたコンパイラを特定することと、
    (vii)例外処理情報が前記プログラムのプロシージャのアンワインド情報に含まれる場合、前記コンパイラのアイデンティティに基づき、前記プロシージャに対する例外処理情報を解釈することと、
    viii)前記例外処理情報に基づき、各プロシージャの表現のため、例外処理コールサイトテーブル、例外処理タイプテーブル及び例外処理アクションテーブルを生成することと、
    ix)前記表現に、例外処理を生成するコードを含むベーシックブロックの表現と、前記例外処理のためのハンドラを含むベーシックブロックの表現との間の関連付けを追加することと、
    を含むことを特徴とする方法。
  6. 請求項5記載の方法であって、
    前記(b)最適化を実行するステップはさらに、
    外処理を処理するコードを含むベーシックブロックを削除からプロテクトするステップと、
    例外処理を生成するコードを含む第1ベーシックブロックが、最適化中に第2ベーシックブロックを生成するため複製される場合、前記第2ベーシックブロックの表現と、前記第1ベーシックブロックの表現の既存の各関連付けに対応する前記第2ベーシックブロックの表現の関連付けとを生成するステップと、
    前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、新しい各プロシージャに対して、新たな例外処理コールサイトテーブル、新たな例外処理タイプテーブル及び新たな例外処理アクションテーブルを、前記プログラムの第1バイナリバージョンの前記プロシージャに対して以前に生成された例外処理コールサイトテーブル、例外処理タイプテーブル及び例外処理アクションテーブルに基づき生成するステップと、
    から構成されることを特徴とする方法。
  7. 請求項6記載の方法であって、
    前記(c)解析した結果と前記実行された最適化とに基づき、前記プログラムの第2バイナリバージョンに対する更新されたアンワインド情報を生成するステップはさらに、前記第2バイナリプログラムの各プロシージャに対して、更新された例外処理コールサイトテーブル、更新された例外処理タイプテーブル及び更新された例外処理アクションテーブルを、
    前記プログラムの第1バイナリバージョンに対して生成された前記例外処理コールサイトテーブル、前記例外処理タイプテーブル及び前記例外処理アクションテーブルと、
    最適化中のプロシージャの分割の結果として生成された新たなプロシージャに対してそれぞれ生成された前記新たな例外処理コールサイトテーブル、新たな例外処理タイプテーブル及び新たな例外処理アクションテーブルと、
    例外処理を生成するコードを含む各ベーシックブロックと、前記例外処理に対するハンドラを含む各ベーシックブロックとの間の前記表現における関連付けと
    基づき生成するステップを有することを特徴とする方法。
  8. (a)プログラムの第1バイナリバージョンと、前記プログラムの第1バイナリバージョンに係る、プログラムスタックをアンワインド処理するためのアンワインド情報とを解析するステップと、
    (b)前記プログラムの第1バイナリバージョンと、前記プログラムの第1バイナリバージョンに係るアンワインド情報とを解析した結果に基づき、前記プログラムの第2バイナリバージョンを生成するため、前記プログラムの第1バイナリバージョンに対して最適化を実行するステップと、
    (c)前記解析した結果と前記実行された最適化とに基づき、前記プログラムの第2バイナリバージョンに対する更新されたアンワインド情報を生成するステップと、
    から構成される方法をコンピュータに実行させるコンピュータプログラムを格納するコンピュータ可読記憶媒体であって、
    前記アンワインド情報は、前記プログラムの各プロシージャの各アンワインド領域に係る前記プログラムのアンワインド処理に関する言語独立情報を有し、
    前記(a)解析するステップは、
    (i)命令、ベーシックブロック及びプロシージャの表現を含む前記プログラムの表現を生成することと、
    (ii)表現された各ベーシックブロックのベーシックブロックタイプを特定し、前記ベーシックブロックタイプにより前記表現をマーキングすることと、
    (iii)前記プログラムの各プロシージャの各アンワインド領域に対するアンワインド属性とアンワインド状態データとを生成することと、
    (iv)アンワインド状態データとアンワインド属性とを前記プログラムの命令の表現と関連付けることと、
    (v)アンワインド状態データとアンワインド属性とを前記プログラムのプロシージャの表現と関連付けることと、
    を含み
    前記(b)最適化を実行するステップは、
    (i)最適化中、関連付けされたアンワインド属性を有する命令を削除からプロテクトするステップと、
    (ii)関連付けされたアンワインド属性を有する第1命令が、最適化中に第2命令を生成するため複製される場合、前記第1命令の表現に係るアンワインド属性に基づき、前記第2命令の表現と該表現に係るアンワインド属性とを生成するステップと、
    (iii)最適化中、何れの命令も1つのベーシックブロックタイプのベーシックブロックから異なるベーシックブロックタイプのベーシックブロックに移動されることを阻止するステップと、
    (iv)前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、前記プログラムの第1バイナリバージョンのプロシージャの表現に対する前記アンワインド状態データ及びアンワインド属性と、前記分割が行われた命令に対するアンワインドルールとに基づき、新しい各プロシージャの表現と、該表現に対するアンワインド状態データ及びアンワインド属性とを生成するステップと、
    から構成されることを特徴とするコンピュータ可読記憶媒体。
  9. 請求項記載のコンピュータ可読記憶媒体であって、
    前記(c)解析した結果と前記実行された最適化とに基づき、前記プログラムの第2バイナリバージョンに対する更新されたアンワインド情報を生成するステップはさらに、
    各プロシージャの各アンワインド領域に対するアンワインド状態データを、該アンワインド状態データが前記プログラムの第2バイナリバージョン内の各アンワインド領域の新たな長さ及び位置と整合するように調整するステップと、
    前記調整されたアンワインド状態データを前記プログラムの第2バイナリバージョンに関連付けるステップと、
    から構成されることを特徴とするコンピュータ可読記憶媒体。
  10. 請求項記載のコンピュータ可読記憶媒体であって、
    前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、該プロシージャは、ペアレントプロシージャと少なくとも1つのチャイルドプロシージャとに分割され、
    前記解析した結果と前記実行された最適化に基づき、前記プログラムの第2バイナリバージョンに対する更新されたアンワインド情報を生成するステップはさらに、
    前記チャイルドプロシージャがゼロの長さのプロローグを有することを示すため、前記分割によって生成された各チャイルドプロシージャの表現に係る前記アンワインド状態データをマーキングするステップと、
    前記アンワインド状態データがアクティブとなる前記プログラムの位置を前記チャイルドプロシージャの始めに設定するステップと、
    から構成されることを特徴とするコンピュータ可読記憶媒体。
  11. 請求項10記載のコンピュータ可読記憶媒体であって、
    前記アンワインド情報はさらに、前記プログラムのソースコードバージョンのソース言語に規定される例外処理に関する言語に依存した例外処理情報を有し、
    前記プログラムの第1バイナリバージョンは、前記プログラムのソースコードバージョン上での前記ソース言語のコンパイラの実行により求められる、
    ことを特徴とするコンピュータ可読記憶媒体。
  12. 請求項11記載のコンピュータ可読記憶媒体であって、
    前記(a)解析するステップはさらに、
    (vi)前記プログラムの第1バイナリバージョンを求めるのに実行されたコンパイラを特定することと、
    (vii)例外処理情報が前記プログラムのプロシージャのアンワインド情報に含まれる場合、前記コンパイラのアイデンティティに基づき、前記プロシージャに対する例外処理情報を解釈することと、
    viii)前記例外処理情報に基づき、各プロシージャの表現のため、例外処理コールサイトテーブル、例外処理タイプテーブル及び例外処理アクションテーブルを生成することと、
    ix)前記表現に、例外処理を生成するコードを含むベーシックブロックの表現と、前記例外処理のためのハンドラを含むベーシックブロックの表現との間の関連付けを追加することと、
    を含むことを特徴とするコンピュータ可読記憶媒体。
  13. 請求項12記載のコンピュータ可読記憶媒体であって、
    前記(b)最適化を実行するステップはさらに、
    外処理を処理するコードを含むベーシックブロックを削除からプロテクトするステップと、
    例外処理を生成するコードを含む第1ベーシックブロックが、最適化中に第2ベーシックブロックを生成するため複製される場合、前記第2ベーシックブロックの表現と、前記第1ベーシックブロックの表現の既存の各関連付けに対応する前記第2ベーシックブロックの表現の関連付けとを生成するステップと、
    前記プログラムの第1バイナリバージョンのプロシージャが、最適化中に2つの新しいプロシージャに分割される場合、新しい各プロシージャに対して、新たな例外処理コールサイトテーブル、新たな例外処理タイプテーブル及び新たな例外処理アクションテーブルを、前記プログラムの第1バイナリバージョンの前記プロシージャに対して以前に生成された例外処理コールサイトテーブル、例外処理タイプテーブル及び例外処理アクションテーブルに基づき生成するステップと、
    から構成されることを特徴とするコンピュータ可読記憶媒体。
  14. 請求項13記載のコンピュータ可読記憶媒体であって、
    前記(c)解析した結果と前記実行された最適化とに基づき、前記プログラムの第2バイナリバージョンに対する更新されたアンワインド情報を生成するステップはさらに、前記第2バイナリプログラムの各プロシージャに対して、更新された例外処理コールサイトテーブル、更新された例外処理タイプテーブル及び更新された例外処理アクションテーブルを、
    前記プログラムの第1バイナリバージョンに対して生成された前記例外処理コールサイトテーブル、前記例外処理タイプテーブル及び前記例外処理アクションテーブルと、
    最適化中のプロシージャの分割の結果として生成された新たなプロシージャに対してそれぞれ生成された前記新たな例外処理コールサイトテーブル、新たな例外処理タイプテーブル及び新たな例外処理アクションテーブルと、
    例外処理を生成するコードを含む各ベーシックブロックと、前記例外処理に対するハンドラを含む各ベーシックブロックとの間の前記表現における関連付けと
    基づき生成するステップを有することを特徴とするコンピュータ可読記憶媒体。
JP2007520530A 2004-07-08 2005-07-08 最適化されたプログラムのためのアンワインド情報の生成 Expired - Fee Related JP4833206B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/888,663 US7480902B2 (en) 2004-07-08 2004-07-08 Unwind information for optimized programs
US10/888,663 2004-07-08
PCT/US2005/024252 WO2006014587A1 (en) 2004-07-08 2005-07-08 Generating unwind information for optimized programs

Publications (2)

Publication Number Publication Date
JP2008505423A JP2008505423A (ja) 2008-02-21
JP4833206B2 true 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)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7480902B2 (en) * 2004-07-08 2009-01-20 Intel Corporation Unwind information for optimized programs
WO2008013470A1 (en) * 2006-07-26 2008-01-31 Intel Corporation An 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
US9880842B2 (en) 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (5)

* Cited by examiner, † Cited by third party
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

Also Published As

Publication number Publication date
US8181170B2 (en) 2012-05-15
EP1782193A1 (en) 2007-05-09
US20090133008A1 (en) 2009-05-21
CN1981266A (zh) 2007-06-13
US7480902B2 (en) 2009-01-20
WO2006014587A1 (en) 2006-02-09
JP2008505423A (ja) 2008-02-21
US20060010431A1 (en) 2006-01-12
CN100462920C (zh) 2009-02-18

Similar Documents

Publication Publication Date Title
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
US5586328A (en) Module dependency based incremental compiler and method
US5854932A (en) Compiler and method for avoiding unnecessary recompilation
US5182806A (en) Incremental compiler for source-code development system
US5313387A (en) Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers
US5325531A (en) Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US5170465A (en) Incremental-scanning compiler for source-code development system
US5201050A (en) Line-skip compiler for 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
US5193191A (en) Incremental linking in source-code development system
US8161465B2 (en) Method and apparatus for performing conditional compilation
US20140189662A1 (en) Extending A Development Environment
JP4181326B2 (ja) コード最適化のための方法、装置及びプログラム
US20040255279A1 (en) Block translation optimizations for program code conversation
JP2010198629A (ja) プログラムコード変換方法
PT100166A (pt) Metodo e instrumento de compilar codigo em computadores digitais
JP2007521568A (ja) 複数の例外処理モデルの中間表現
US20060101420A1 (en) Programming language support for integrating undo and exception handling
US5301327A (en) Virtual memory management for source-code development system
Xu et al. Copy-and-patch compilation: a fast compilation algorithm for high-level languages and bytecode
CN113220326B (zh) 智能合约升级方法及区块链系统
US6895579B2 (en) Method and apparatus for maintaining exception reporting for register promotion
AU638999B2 (en) Incremental compiler for source-code development system
Karlsson et al. Extending Scala with records: Design, implementation, and evaluation

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