JP4005724B2 - マルチプルリターンサイトを実現するための方法及び装置 - Google Patents

マルチプルリターンサイトを実現するための方法及び装置 Download PDF

Info

Publication number
JP4005724B2
JP4005724B2 JP31974098A JP31974098A JP4005724B2 JP 4005724 B2 JP4005724 B2 JP 4005724B2 JP 31974098 A JP31974098 A JP 31974098A JP 31974098 A JP31974098 A JP 31974098A JP 4005724 B2 JP4005724 B2 JP 4005724B2
Authority
JP
Japan
Prior art keywords
return
instruction
function
routine
expected
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 - Lifetime
Application number
JP31974098A
Other languages
English (en)
Other versions
JPH11224195A (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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH11224195A publication Critical patent/JPH11224195A/ja
Application granted granted Critical
Publication of JP4005724B2 publication Critical patent/JP4005724B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Description

【0001】
【発明の背景】
1. 発明の分野
本発明は一般的に、関数をコールするためのマルチプルリターンポイントを実現する方法及び装置に関する。より詳細には、本発明は、マルチプルリターンポイント用のアドレスの取得を効率的に可能にする方法及び装置に関する。
2. 関連技術の説明
コンピュータシステムはそのネットワーク、例えばローカルエリアネットワーク、イントラネット、及びインターネットを横切って、それらがソフトウェアコードやプログラムコード等のリソースを共有できるように、しばしばリンクされる。更に、ルーチンを含む多くのプログラムは、プログラムがその中に含まれない「外部」関数をコールするように書かれている。一般に、関数は多くのルーチンによって共有できるので、コンピュータシステムリソースのより効率的な使用が可能になる。
【0002】
関数をコールするようにルーチンが構成されると、コールされる関数は結局、ルーチンに戻らなければならない。更に、ルーチンへの戻りはそのルーチン内の適切な記憶位置に対して行なわなければならない。図1に関して、コンピュータプログラムとそのプログラムによってコールされる関数を説明する。コンピュータコード104はルーチンg()108を含む。ルーチンg()108は実行される命令を含む。図示のように、命令は関数f()116への繰返し(repeated)コール112を含む。
【0003】
関数f()116がコールされて「正常に」実行される場合(例えば例外が投入(thrown)されない場合)、関数f()116は通常、実行を完了して、ルーチンg()108aコンピュータルーチンへのリターンが行なわれる。関数f()116が戻るg()108aコンピュータルーチン内の記憶位置はコールサイト、即ち関数f()116をコールしたルーチンg()108aコンピュータルーチン内のサイトに依存する。具体的には、関数f()116がコール112aの結果として実行する場合、関数f()116は、当業者の承知するように、g()108aコンピュータルーチン内のコール112aの直後に配置されるリターンアドレス120に戻る。同様に、コール112bによってコールされて関数f()116が実行する場合は、関数f()116はリターンアドレス120に戻る。関数f()116がルーチンg()108aコンピュータルーチンに戻ると、ルーチン()108aは一般に実行を続ける。
【0004】
多くの関数は2つ以上のリターンサイトやリターンポイントを有することができる。例として、関数は正常、つまり期待(expected)と代替(alternate)リターンポイントを有することができる。代替リターンポイントはしばしば、投入された例外に関連するリターンポイントのような「異常」リターンポイントと見做される。代替リターンポイントは通常、リターンポイントが必要に応じて直ちに識別されるように、全プログラム内に格納又はカタログされる。例として、代替リターンポイントは、例外を扱わない関数によって投入された例外の処理中のプログラムによって必要とされるだろう。
【0005】
関数を代替リターンポイントと関連させるために使用される一つのメカニズムは、リターンポイントテーブル、つまりリターンアドレステーブルである。図2(a)は、コールスタックに関連するリターンポイントテーブルの図式表示である。コールスタック204は別のフレーム、即ちコーリー(callee)フレーム212をコールするコーラー(caller)フレーム208を含む。コーリー212は関数f()214に関連する。かくして、コーラー208がコーリー212をコールすると、関数f()214が実行を開始する。
【0006】
関数f()214の実行の終了時に、関数f()214と、従ってコーリー212はコーラー208に戻る。コーラー208への戻りが正常リターンでないときは、正常リターンアドレスをリターンポイントテーブル220へのインデックス216として使用して、適正な代替リターンポイントを識別できる。例えば、正常リターンアドレスが「1234」の場合は、リターンポイントテーブル220を探索して「1234」を発見するであろう。「1234」が発見されると、「1234」に関連する代替リターンプログラムアドレスを取得できる。図示のように、「1234」の正常リターンアドレスでは、対応する代替リターンポイントアドレスは「1256」である。一旦取得されると、次にその代替リターンポイントアドレスを使って、コーリー212がコーラー208に適切に戻ることを確認できる。
【0007】
リターンポイントテーブル(一般にルックアップテーブルかハッシュテーブルである)の使用は、コーリー用の適正リターンポイントの識別に有効だが、テーブルルックアップの実現は遅いことが多い。マルチプルリターンポイントを実現するための、より迅速なプロセスは、リターンポイントを識別するためのテーブルルックアップを除去することを含む。当業者の承知するように、関数の実行中、関数が正常リターンを使って戻るべきか否か、或いは関数が代替リターンを使って戻るべきか否かは、関数にとって本質的に「既知」である。従って、格納すべき、代替リターンアドレスに関するデータが入手できる。
【0008】
図2(b)は、代替リターンアドレスデータを格納するために構成されたルーチンの図式表示である。ルーチンg()236は関数f()へのコール238を含む。関数f()へのコール238が代替アドレスに戻る必要を生じるか否かに関わらず、コール238は正常にリターンアドレス240に戻るだろう。リターンアドレス240は、格納された代替リターンアドレスデータ242を識別する。格納された代替リターンアドレス242は、コール238に近いルーチンg()236aコンピュータルーチン内に配置されて、代替リターンアドレスデータ242に容易にアクセスできる。一般に、代替リターンアドレスデータ242は命令ストリーム自体に格納される。格納された代替リターンアドレスデータ242は合法な命令を代表しないか、或いはレジスタやメモリセル内の値のオーバライト等の望ましくない副作用を有するかもしれないので、ルーチンg()の実行はアドレス240で続かないかもしれないが、その代わり次の命令(next instruction)244で継続しなければならない。
【0009】
コール238が正常にリターンしたときは、コール238は次の命令244に戻らなければならない。図示のように、ルーチンg()236内で次の命令244は、格納された代替リターンアドレスデータ242から距離Dだけオフセットされる。従って、コール238が正常にリターンすると、コール238は、オフセットDだけ増分されたリターンアドレス240の記憶位置、即ち次の命令244の記憶位置によって指定される記憶位置に戻らなければならない。通常、距離Dは4バイトの値を有するので、次の命令244はリターンアドレス240の記憶位置から4バイトだけオフセットされる。
【0010】
プログラムの格納された代替リターンアドレスへのアクセスは、代替リターンアドレスが必要なときのテーブルルックアップの実現よりも時間効率が良いが、代替リターンアドレスが必要でないときは、格納された代替リターンアドレスにアクセスする能力はプログラムの性能に不利な影響を与えることが多い。関数コールが正常にリターンするときに実行すべきその後の命令を配置するためのリターンアドレスの記憶位置へのオフセットの追加は比較的遅い場合が多く、その後の命令の記憶位置の計算に関連する性能ペナルティを負うかもしれない。言い換えれば、正常リターンに伴う速度は、格納された代替リターンアドレスの実現によって損なわれるかもしれない。更に、正常リターン、又は最も起こりそうなリターンのための「最善の推測」("best-guess" estimate) を生成するためにしばしば使用される分岐予測(branch prediction) は、当業者の承知するように、ジャンプの使用によって損なわれるかもしれない。
【0011】
別法として、「ジャンプ」を使って、次のように、格納された代替アドレスをバイパスできる。ジャンプ又は分岐は、ある状況で不必要なコードのセクションをバイパスするために、しばしばプログラムルーチンに含まれる。例えば、図2(c)に示すように、ジャンプをルーチンで実現して、関数コールが正常にリターンしたときの格納された代替リターンアドレスのバイパスを可能にできる。ルーチンg()266内で関数f()へのコール268が行なわれる。コール268が正常にリターンすると、リターンアドレス270によって指定されるルーチンg()266の記憶位置へのリターンが行なわれる。リターンアドレス270に対応する記憶位置は、命令272から一定のオフセットに配置される記憶位置Lにジャンプするための命令272である。従って、コール268がリターンアドレス270に正常にリターンすると、次の命令274へのジャンプが行なわれる。このジャンプは、格納された代替リターンアドレスデータ276をバイパスするか、そのまわりに分岐する。
【0012】
ジャンプの実現は、その後の命令の記憶位置を発見するためにリターンアドレスへのオフセットの追加に伴う性能ペナルティ、例えばハードウェア性能ペナルティを削減するであろうが、ジャンプは遅くなるであろう。ジャンプを可能にするための追加コードをプログラムに含めなければならないので、プログラムの全サイズを増加させるであろう。
【0013】
上述のように、関数コール用のマルチプルリターンポイントを実現するための従来の方法は、しばしば遅くて非効率であり、従って、マルチプルリターンポイントの実現は関数コールに関連するプログラムの性能に不利に影響するかもしれない。従って、正常リターンと代替リターンの両者が効率的に起こるようにマルチプルリターンポイントを実現するための効率的な方法と装置が望まれる。
【0014】
【発明の概要】
代替リターンアドレスに容易にアクセスできるように、関数コールに関連する代替リターンアドレスの本質的なキャッシュを効率的に可能にするための方法及び装置を開示する。本発明の一局面によれば、ルーチンによってコールされる関数に関連するリターンアドレスの効率的なキャッシュを可能にするための方法は、ルーチンの実行中にルーチン内から関数をコールすることを含む。一般に、関数はルーチンの外にある。関数は、一旦コールされると実行を開始する。結局、関数はそのルーチンに戻る。具体的には、関数は期待リターンポイント又は正常リターンアドレスによって識別されるルーチン内の記憶位置に戻る。期待リターンポイントに対応するルーチン内の命令は、低い計算オーバヘッドで実行する「ダミー」命令である。ダミー命令は、正常プログラムの実行に対する影響なしに実行するように選択される。即ち、その結果は使用されない。その代わりに、ダミー命令の目的は代替リターンポイント(単数、又は複数)を適当な方法でコード化することである。
【0015】
一実施形態では、関数が期待される方法でルーチンに戻ると、関数の実行は期待リターンポイントに戻る前に完了され、ダミー命令の実行は効果がない。別の実施形態では、関数が代替リターンポイントに戻らないときは、正常リターンポイントで格納されたダミー命令にアクセスするためのコードが実行され、代替リターンポイントのアドレスはダミー命令が表すライブラリ値から計算される。
【0016】
本発明のこれら及び他の利点は、下記の詳細説明を一読して各種の図面を検討することによって明らかになるであろう。
【0017】
本発明は添付の図面に関してなされる下記説明を参照することによって充分に理解されるであろう。
【0018】
【発明の実施の形態】
コンピュータプログラムによってコールされた関数がそのコンピュータプログラムに戻ろうとするとき、その関数は複数のリターンサイト、つまりリターンポイントの任意の一つにリターンできる。例として、関数は正常に、即ち期待通りに戻るかもしれない。その代わりに、関数は別の形、例えば異常に戻るかもしれない。異常リターンに対応する異常リターンサイトは一般に、それらが容易にアクセスできるように格納されていなければならない。
【0019】
ある関数からプログラム内の異なるポイントへのリターンを提供する実現例の中には、ルックアップテーブルの代替リターンサイト用のアドレスを格納するものがある。代替リターンアドレスを配置するためのルックアップテーブルを実現化するとしばしば遅くなるまた、異なるサイトへのリターンを提供する他の実現例では、リターンが行なわれる関数へのコールに近い代替リターンアドレスに関するデータを明瞭に格納する。コールに近いデータを明瞭に格納することを含むこの実現は一般に、余分のスペースオーバヘッドを要求するか、ハードウェアの性能ペナルティを負うか、正常リターンに不利な影響を与えるかのいずれかである。
【0020】
いかなるリターンの効率をも大きく損なうことなしに、或いは性能ペナルティを負うことなしに、関数コールからのマルチプルリターンを実現するために、リターンに対応するアドレス用のデータを、「有用」なオペレーションを本質的に実行しない命令に埋め込むことができる。即ち、実質的に依存性を有さず、通常は殆どオーバヘッドなしで、例えばジャンプの実行より少ないオーバヘッドで実行する命令を使って、代替リターンアドレスをコード化できる。本質的に依存性を有さず、大きなオーバヘッドなしで正常に実行する命令は一般に、「ダミー」命令と見做される。このような命令は、それに限定されないが、移動命令又はテスト命令等の命令を含む。
【0021】
移動命令は一般に、データをレジスタやスタック記憶位置に移動するために使用される。例として、定数を未使用のレジスタに移動するように構成された移動命令は次のシンタックスを有することができる。
【0022】
mov constant, unused reg
ここで「unused reg」は、現在は有用値を含まない任意のレジスタであろう。また「constant」は代替リターンアドレス等のデータを含んでいるであろう。テスト命令はレジスタの値によってプロセッサフラグをセットし、次のシンタックスを有することができる、
tst constant reg
ここに「reg」は任意のレジスタでよく、「constant」は代替リターンアドレスに関連するデータを含んでいるであろう。
【0023】
ダミー命令の実行は通常、わずかな量の計算オーバヘッドしか必要としないので、関数コールからのリターンが正常のときにダミー命令を実行することは、コンピュータシステムの総合性能に不利な影響を与えない。言い換えれば、それを必要としないときにダミー命令を実行することは一般に、コンピュータシステムの性能に実質的な影響を与えない。従って、代替リターンとなるような関数コールに関して使用されるダミー命令の実現は、リターンが正常リターンか代替リターンかに関わらず比較的迅速で、効率的である。
【0024】
ダミー命令は一般に、プログラムやルーチン内の任意の場所に配置可能である。例として、ダミー命令は、ルーチン内の関数へのコールの直後に位配置可能である。図3(a)に関して、ルーチン内の関数へのコールの後のダミー命令の包含(inclusion) について、本発明の実施形態に従って説明する。ルーチンg()304は一般に命令308を含む。関数f()へのコール308aは正常にリターンすることもあれば異常にリターンすることもある。
【0025】
関数f()へのコール308aが戻るとき、リターンアドレス310によって指定されるルーチンg()304内の記憶位置へのリターンが行なわれる。リターンアドレス310はダミー命令308bを識別する。ダミー命令308bは一般に、関数f()へのコール308aから、例えば4バイトの一定のオフセットに配置される。
【0026】
一実施形態では、関数f()へのコール308aが正常にリターンすると、ダミー命令308bは、当業者の承知するように、特に、サイクル当たりマルチプルの独立命令を実行する最新のスーパスケーラ中央処理装置(CPU)の上で、本質的にオーバヘッドを使わずに実行する。それとは別に、関数f()へのコール308aが代替リターンポイントに戻るときは、それが、ダミー命令308bを含むバイトを読み取って、ダミー命令308bでコード化された代替リターンアドレスを抽出する。その後、実行はこの代替リターンポイントに戻ることによって、代替リターンを完了する。
【0027】
上述のように、ダミー命令308bが本質的にオーバヘッドを使わずに実行した後、ルーチンg()304のその後の命令、つまり次の命令308cが実行する。命令308は通常、多くの他の命令によって先行、ならびに後続されることは言うまでもない。
【0028】
一実施形態では、関数へのコールは2つ以上の代替リターン又は異常リターンを有することができる。例えば、関数へのコールはマルチプルの可能な例外を伴うことができるが、これは図5(a)、5(b)に関して下記に更に詳しく説明する。2つ以上の異常リターンが可能なときは、各異常リターンアドレスが関連ダミー命令を有するようにマルチプルダミー命令を関数コールの近くに含むことができる。単一ダミー命令がレジスタやスタック記憶位置のすべての関連データを保持するために不十分な場合には、マルチプルダミー命令を実現してもよい。
【0029】
図3(b)は、本発明の実施形態による関数へのコール後にマルチプルダミー命令を実行するコンピュータルーチンの図式表示である。図示のように、ルーチンg()324は命令328を含む。命令328はルーチンg()324内の任意の場所に配置できる。言い換えれば、命令328はルーチンg()324の始まりの近くに配置可能であり、ルーチンg()324の中央部や、ルーチンg()324の実質的な末尾にも配置可能である。関数f()へのコール328aが戻るときは、リターンアドレス330によって識別された記憶位置へのリターンが行なわれる。リターンアドレスは第1ダミー命令328bを識別する。第1ダミー命令328bが実行した後、その第1ダミー命令328bに続くダミー命令が実行される。最後に、「N番目」のダミー命令328cが実行される。
【0030】
各ダミー命令、例えばダミー命令328b、328cは一般に、ダミー記憶位置がコール328aに対して容易に配置されるように、コール328aから一定のオフセットに配置される。すべてのダミー命令の全実行は、各ダミー命令が個々に、本質的にオーバヘッドを使用しないので、ごくわずかのオーバヘッドしか使用しない。その後の命令、つまり次の命令328dは「N番目」のダミー命令328cが実行した後で実行する。
【0031】
一般に、ダミー命令は必ずしも、マルチプルリターンサイトを有する関数へのコールの後に配置されるわけではない。ダミー命令は、マルチプルリターンサイトを有する関数へのコールの前に配置されることもできる。図3(c)に関して、ルーチン内の関数へのコール前のダミー命令の挿入を、本発明の実施形態に従って説明する。図示のように、ルーチンg()344はダミー命令348aへのコールを含み、それは関数f()へのコール248bに先行する。ダミー命令348aは関数f()へのコール248bから一定のオフセットに配置される。即ち、ダミー命令348aがルーチンg()344内の関数f()へのコール248bに先行する度に、ダミー命令348aは関数f()へのコール248bに対して同一のオフセットに位置する。一実施形態ではオフセットは4バイトだが、一般には大幅に変化する。関数f()へのコール348bが戻るとき、リターンアドレス350によって識別された記憶位置へのリターンが行なわれる。上述の実施形態では、リターンアドレス350によって識別された記憶位置は命令348aを含む。
【0032】
次に図4を参照して、プログラムに含まれるルーチンの実行中に関数コールを一般的に実行することに関連するステップを、本発明の実施形態に従って説明する。当業者の承知するように、実行中のルーチンは結局、関数コールに到達できる。ステップ402では、ルーチンによってコールされた関数の実行が開始する。関数の実行の進行中は、発生する状態が、関数へのコールは正常リターンになるか、異常、つまり代替リターンになるかを決定する。
【0033】
ステップ402におけるコールされた関数の実行が正常リターンになると、プロセスの流れはステップ404に分岐して、そこで、コールされた関数が完了する。コールされた関数の実行が完了した後、ステップ406で、関数はリターンアドレス、即ち正常リターンアドレスによって指定された記憶位置に戻る。上述の実施形態では、リターンアドレスによって指定された記憶位置はダミー命令、例えば図3(a)に示すダミー命令を含む。一般に、ダミー命令は、プログラムの全実行に伴う内部状態を変えることなく定数を埋め込む任意の適当なほぼ「オーバヘッドなしの(no-overhead) 」命令でよい。先に記載したように、ダミー命令は、それらに限定されないが、移動命令とテスト命令を含んでもよい。
【0034】
ルーチンは、ダミー命令がステップ412で実行された後で実行を続ける。一般に、ルーチンの継続的実行は、追加の関数コールやリターン等の様々な命令の実行を含む。実行すべき命令が残っていないときは、ルーチンの実行は完了する。
【0035】
ステップ402でのコールされた関数の実行に戻ると、コールされた関数の実行が、代替リターン、例えば異常リターンが要求されるようなものであるときは、ステップ402からプロセスの流れはステップ408に進み、そこで代替リターンアドレスがメモリからロードされる。具体的には、一実施形態では、代替リターンアドレスはオフセットによって増大された正常リターンアドレスからロードされる。
【0036】
一旦、代替リターンアドレスがロードされると、ステップ410で代替リターンアドレスによって識別された記憶位置に、関数からのジャンプが行なわれる。ダミー命令は代替アドレスへのリターンを実行するときにデータとして扱われるので、命令を表すビットも二進値と見做されるという事実が活用される。例として、プロセッサは下記の命令をコード化できる、
mov #1234, reg1
これが、代替リターンアドレスとなる16進定数「1234」を、バイトシーケンス「5B 00 00 12 34」としてレジスタ「reg1」に移動する。命令のコード化は異なるプロセッサタイプ間で変化するかもしれないが、どのコード化も、命令タイプ、例えば「move」、第1オペランド、例えば定数「1234」、及び第2オペランド、例えば「 reg1 」を含めて、命令のすべての部分を本質的に識別する。
【0037】
コンパイラは、上述のように、ダミー命令がダミー移動命令の第1オペランドとして代替リターンアドレスを含むように構成する。従って、命令のフォーマットが分かっていれば、定数、例えば代替リターンアドレスの値等の情報は、その情報の2ないし5バイトを整数値として読むことによって取得できる。
【0038】
当業者の承知するように、ダミー命令は一種のパターンを形成し、そこでは命令ビットの一部は固定で、一部は可変である。固定ビットは、命令の実行が、さもなければ高くつくかプログラムの正常な実行を妨げる副作用があるので、一般に変更してはならない。例として、固定ビットの中には「move」等の命令タイプを示すものもある。命令中の可変ビットは、代替リターンポイントのアドレス等の任意の値のコード化に使用できる。例として、ダミー命令「5B 00 00 12 34」では、バイト「 5B 」はレジスタ「reg1」への移動を示す固定部分、「 00 00 12 34」は可変部分である。一般に、ダミー命令の可変部分は、使用される特定機械命令によって、マルチプルの非連続部分を含む実質的に任意の命令ビットの組合せから構成できる。
【0039】
ステップ410から、代替リターンアドレスへのジャンプが行なわれた後、プロセスの流れはステップ413に進み、そこで代替リターンアドレスに関連するコードが実行される。次に、プログラムの実行は、それが完了するまでステップ414で続く。
【0040】
マルチプルリターンアドレスは様々なプログラミング言語メカニズムを実現するのに役立つ。例として、ダミー命令を使って、例外を投入する関数コールを有するルーチンの実行を促進できる。コールされた関数が例外を投入すると、その例外は一般に、コールされた関数によって扱うことができない。代わりに、関数のコーラーが、関数によって投入された例外を扱う。図5(a)、図5(b)は、本発明の実施形態による、正常にリターンするか、例外を投入するので異常にリターンする関数の図式表示である。ルーチンg()504は関数f()512をコールするトライブロック508を含む。ルーチンg()504は更に、関数トライ(function try)508の実行中に生じる例外を扱うか処理するように構成された例外ハンドラ(exception handler) 510を含む。
【0041】
関数f()512がコールされて、正常にリターン、例えば関数f()512によって例外が投入されないときは、関数f()512は、図5(a)で示すように、トライブロック508に戻る。具体的には、関数f()512は正常リターンアドレス516によって識別されたトライブロック508内の記憶位置に戻る。記載の実施形態では、正常リターンアドレス516によって識別された記憶位置は、図3(a)に関して上述したように、ダミー命令である。
【0042】
図5(b)に示すように、関数f()512の実行によって例外が投入されると、関数f()512は例外ハンドラ510に戻る。即ち、例外が関数f()512によって投入されると、命令関連の例外ハンドラ512を識別する代替リターンアドレス520によって指定された記憶位置へのリターンが行なわれる。
【0043】
例外ハンドラ510が、関数f()512によって投入された例外を処理した後、関数f()512は結局、トライブロック508の後の第1命令522で実行を継続する。ダミー命令は、一実施形態では、命令ストリーム内への代替リターンアドレス520の格納を可能にする移動命令又はテスト命令等の命令である。
【0044】
本発明は一般に任意の適切なコンピュータシステムに実現できる。具体的には、マルチプルリターンポイントは、上述のように、例えば図7に関して以下に説明するバーチャルマシンのような任意の適切なバーチャルマシンを使用して実現できる。図6は、本発明の実現に適した典型的な汎用コンピュータシステムを示す。コンピュータシステム730は、主記憶装置734(通常、リードオンリーメモリ、又はROM)と主記憶装置736(通常、ランダムアクセスメモリ、又はRAM)とを含むメモリデバイスに連結された任意数のプロセッサ732(中央処理装置、又はCPUとも称する)を含む。
【0045】
コンピュータシステム730、又はより具体的には、CPU732は、当業者の承知するように、バーチャルマシンを支援するように構成できる。コンピュータシステム730上で支援されるバーチャルマシンの一例を、図7に関して以下に説明する。当技術分野で周知のように、ROMはデータと命令をCPU732に一方向的に転送するように働くが、RAMは通常、データと命令を二方向的に転送するように使用される。CPU732は一般に任意数のプロセッサを含んでもよい。主記憶装置734、736は共に、任意の適切なコンピュータ読取り可能媒体を含んでもよい。通常、マスメモリデバイスである二次記憶媒体738もCPU732に二方向的に連結されて、追加のデータ記憶容量を提供する。マスメモリデバイス738は、コンピュータコード、データ等を含むプログラムの格納のために使用されるコンピュータ読取り可能媒体である。通常、マスメモリデバイス738は、主記憶装置734、736よりも一般に遅いハードディスクやテープ等の記憶媒体である。マスメモリデバイス738は磁気かペーパテープ読取り装置、又は何らかの他の周知のデバイスの形を取ることができる。マスメモリデバイス738内に保持された情報は、適切な場合は、バーチャルメモリとしてのRAM736の一部として、標準的な方式で組込みできることは言うまでもない。CD−ROM等の特定の主記憶装置734も、データを一方向的にCPU732に渡すことができる。
【0046】
CPU732はまた、それらに限定されないが、ビデオモニタ、トラックボール、マウス、キーボード、マイクロホン、接触感知ディスプレイ、トランスデューサカードリーダ、磁気又はペーパテープ読取り装置、タブレット、スタイラス、音声又は手書き認識装置、その他の周知の入力装置、例えば、勿論、他のコンピュータといった装置を含む一つ以上の入出力装置740に連結される。最後に、CPU732はオプションとして、712で概略図示するネットワーク接続を使って、コンピュータ又は遠隔通信ネットワーク、例えばローカルエリアネットワーク、インターネットネットワーク、又はイントラネットネットワークに連結してもよい。このようなネットワーク接続を使って、CPU732はネットワークから情報を受信したり、上述の方法手段を実行する過程で情報を出力するであろうことが予期される。それらの情報は、CPU732を使って実行される一連の情報として表されことが多いが、例えば、搬送波に組み込まれたコンピュータデータ信号の形でネットワークから受信されたり、ネットワークに出力することができる。上述のデバイスと材料は、コンピュータハードウェアとソフトウェアの分野の当業者には周知であろう。
【0047】
前述のように、バーチャルマシンはコンピュータシステム730上で実行できる。図7は、図7のコンピュータシステム730によって支援されて本発明の実現に適したバーチャルマシンの図式表示である。コンピュータプログラム、例えばカリフォルニア州Palo Alto のSun Microsystemsによって開発されたJava(商標)プログラミング言語で書かれたコンピュータプログラムが実行されると、ソースコード810がコンパイルタイム環境805内のコンパイラ820に供給される。コンパイラはソースコード810をバイトコード830に翻訳する。一般に、ソースコード810は、それがソフトウェア開発者によって作成される時点でバイトコード830に翻訳される。
【0048】
バイトコード830は一般に、再生、ダウンロード、或いは別途にネットワーク、例えば図6のネットワーク712を介して配信されるか、図6の主記憶装置734等の記憶装置に格納される。記載の実施形態では、バイトコード830はプラットホーム独立形(platform-independent)である。即ち、バイトコード830は、適切なバーチャルマシン840を実行している実質的に任意のコンピュータシステムで実行できる。例として、Java(商標)環境では、バイトコード830はJava(商標)バーチャルマシンを実行しているコンピュータシステム上で実行できる。
【0049】
バイトコード830は、バーチャルマシン840を含むランタイム環境835に供給される。ランタイム環境835は一般に、図7のCPU732等のプロセッサを使って実行できる。バーチャルマシン840はコンパイラ842、インタープリタ844、及びランタイムシステム846を含む。バイトコード830は一般にコンパイラ842かインタープリタ844のいずれかに供給される。
【0050】
バイトコード830がコンパイラ842に供給されると、バイトコード830に含まれる方法は、上述のように、機械命令にコンパイルされる。他方、バイトコード830がインタープリタ844に供給されると、バイトコード830は一度に1バイトずつインタープリタ844に読み取られる。インタープリタ844は次に、各バイトコードがインタープリタ844に読み取られるに従って、各バイトコードによって定義されるオペレーションを実行する。一般に、インタープリタ844はバイトコード830を処理すると共に、バイトコード830に関連するオペレーションを実質上連続的に実行する。
【0051】
方法がオペレーティングシステム860からコールされると、その方法を、解釈された方法としてコールするべきであると決定された場合、ランタイムシステム846はインタープリタ844からその方法を取得できる。他方、その方法、コンパイルされた方法としてコールするベきであると決定された場合、ランタイムシステム846はコンパイラ846を活性化する。コンパイラ842は次にバイトコード830から機械命令を生成すると共に、その機械語命令を実行する。一般に、機械語命令は、バーチャルマシン840が終了すると放棄される。
【0052】
本発明の実施形態をごく少数だけ説明したが、本発明は、発明の精神と範囲から逸脱することなく、他の多くの特定形式で具体化できることは言うまでもない。例として、本発明を一般に2つのリターンポイントを有するものとして説明したが、本発明は3つ以上のリターンポイントを有する関数へのコールに関して実現することもできる。一般に、ダミー命令は、コンピュータルーチンの中の、コールされた関数に関連する各リターンポイントに追加できる。
【0053】
機械命令の中には長さが32ビットに制限されたものもあるが、それは、完全なリターンアドレスを表すのに必要な全32ビット又は64ビット値をコード化するには一般に充分でない。この場合、32ビット又は64ビット値を直接にコード化するダミー命令を構築することは不可能かもしれない。しかしながら、それにもかかわらず、本発明を適用して代替リターンポイントへの迅速なアクセスを提供することができる。代替リターンアドレスをダミー命令の中で直接にコード化する代わりに、正常リターンポイントと代替リターンポイント間の距離をコード化できる。この距離値が与えられると、その距離を正常リターンアドレスに加えることによって、代替リターンポイントを容易に計算できる。別法として、ダミー命令中のアドレスの部分を、図3(b)に関して上述したように、マルチプルダミー命令を使ってコード化してもよい。例として、第1ダミー命令が代替リターンアドレスの最初の16ビットを埋め込み、その一方で第2ダミー命令が32ビット値の残りの16ビットを埋め込んでもよい。
【0054】
マルチプルリターンポイントを有する関数を含むプログラムの実行に関連するステップは一般に大幅に変更できる。例えば、図3(c)に関して上述したように、特定関数コールに関連するダミー命令はその関数コールに先行してもよい。言い換えれば、移動命令やテスト命令等のダミー命令は、本発明の精神と範囲から逸脱することなく、ダミー命令に関連する関数コールに先立って実行できる。
【0055】
マルチプルリターンポイントの使用は様々な目的に適する。上述のように、マルチプルリターンポイントを使って例外の投入を促進できる。本発明によって如何にして例外を実現できるかの一例のみを説明したが、例外の実現は、本発明の精神と範囲から逸脱することなく、大幅に変更できることは言うまでもない。マルチプルリターンポイントの使用は、非ローカルリターンを利用するシステム、例えばSmalltalk ベースのシステムにおける使用にも適する。マルチプルリターンポイントを使用すると、関連ダミー命令はすべて、マルチプルリターンポイントを有する関数へのコールの後で配置できる。ダミー命令もすべて、関数へのコールの前に配置できる。最後に、ダミー命令は、一部のダミー命令がコールの前に配置されるが、他の命令はコールの後で配置されるように分岐させることができる。従って、本例は説明的と見做すべきであって、制限的と見做してはならず、また本発明は、本明細書に記された詳細に限定すべきではなく、同等仕様の全範囲と共に添付の特許請求項の範囲内で修正可能である。
【図面の簡単な説明】
【図1】外部方法をコールするコンピュータコードの図式表示である。
【図2】(a)は、コールスタックと関連リターンポイントテーブルの図式表示であり、(b)は、関数へのコールに関連する代替リターンアドレスを格納するコンピュータルーチンの図式表示であり、(c)は、関数へのコールに関連する格納された代替リターンアドレスを過ぎて分岐するコンピュータルーチンの図式表示である。
【図3】本発明の実施形態による、関数へのコールの後でダミー命令を実行するコンピュータルーチンの図式表示であり、(b)は、本発明の実施形態による、関数へのコールの後でマルチプルダミー命令を実行するコンピュータルーチンの図式表示であり、(c)は、本発明の実施形態による、関数へのコールの前にダミー命令を実行するコンピュータルーチンの図式表示である。
【図4】本発明の実施形態による、複数のリターンポイントを有する関数コールを含むルーチンの実行に関連するステップを示すプロセス流れ線図である。
【図5】(a)は、本発明の実施形態による、正常にリターンする関数コールの図式表示であり、(b)は、本発明の実施形態による、投入された例外をもたらすと共に異常にリターンする関数コールの図式表示である。
【図6】本発明の実現に適したコンピュータシステムの図式表示である。
【図7】本発明に実現に適したバーチャルマシンの図式表示である。
【符号の説明】
712…ネットワーク、732…プロセッサ、734…主記憶装置、736…ROM、738…ネットワーク、740…入出力装置、805…コンパイルタイム環境、810…ソースコード、820…コンパイラ、830…バイトコード、835…ランタイム環境、840…バーチャルマシン、842…コンパイラ、844…インタープリタ、846…ランタイムシステム、860…オペレーティングシステム。

Claims (18)

  1. リターンポイントに関連する埋込みライブラリ値を有するダミー命令を利用して、期待リターンポイントと代替リターンポイントとを含む複数のリターンポイントのうちの一つを識別するコンピュータ実現方法であって、
    ルーチン内から前記ルーチンの実行中に関数をコールするステップであって、前記関数が前記ルーチンから独立するようになっているステップ、
    前記関数の実行を開始するステップ、
    前記ダミー命令に関連するリターンポイントにおいて前記コールされた関数から前記ルーチンに戻るステップ、
    前記リターンポイントが期待リターンポイントであるように、前記コールされた関数の前記実行が正常に戻る場合、前記ダミー命令を実行するステップ、
    前記リターンポイントが代替リターンポイントであるように、前記コールされた関数の前記実行が代替リターンを要求している場合、前記埋込みライブラリ値を読み取るステップ、
    前記読み取るステップにのみ基づいて前記代替リターンポイントを決定するステップ、及び
    前記リターンポイントにおいて前記ルーチン内の命令を実行するステップ、
    を有するコンピュータ実現方法。
  2. 前記関数が期待通りに前記ルーチンに戻り、更に、前記関数の前記実行が完了した後に実行される前記ルーチン内の第1命令を識別するように構成された前記期待リターンポイントに戻る前に、前記関数の前記実行を完了するステップ、を含むようになっている、請求項1に記載のコンピュータ実現方法。
  3. 更に、前記ルーチンの実行を継続するステップを含む、請求項2に記載のコンピュータ実現方法。
  4. 前記関数の前記実行を開始するステップが第1代替リターンポイントをロードするステップを含み、前記第1代替リターンポイントが前記期待リターンポイントから一定のオフセットに配置された命令によって識別されるようになっている、請求項1に記載のコンピュータ実現方法。
  5. 更に、
    前記コールされた関数の前記実行を中止するステップ、及び
    前記期待リターンポイントから前記一定のオフセットに配置された前記命令によって識別される前記第1代替リターンポイントにジャンプするステップ、を含む、請求項4に記載のコンピュータ実現方法。
  6. 前記期待リターンポイントから前記一定のオフセットに配置された前記命令は、前記埋込みライブラリ値を含む命令である、請求項4に記載のコンピュータ実現方法。
  7. 前記期待リターンポイントから前記一定のオフセットに配置された前記命令は、前記第1命令である、請求項4に記載のコンピュータ実現方法
  8. 前記関数が正常に戻る場合に前記ルーチン内の第1命令が実行され、更に、
    前記関数が正常に戻らない場合に前記期待リターンポイントから一定のオフセットに配置された命令によって識別される第1代替リターンポイントをロードするステップを含み
    前記第1代替リターンポイントをロードするステップは、前記埋込みライブラリ値から前記第1代替リターンポイントを取り出すステップを含むようになっている、請求項1に記載のコンピュータ実現方法
  9. 複数のリターンポイントの一つに関連するデータを格納して前記複数のリターンポイントの一つに関連する前記データの効率的な取得を可能にするためのコンピュータ実現方法であって、前記複数のリターンポイントは、期待リターンポイントと少なくとも第1代替リターンポイントとを含み、前記コンピュータ実現方法が、
    ルーチンを実行するステップであって、前記ルーチンはそのルーチンの一部ではない関数をコールするように構成されているステップ、
    前記ルーチン内から、前記ルーチンの実行中に、前記関数をコールするステップ、
    前記関数の実行を開始するステップ、
    前記関数から前記ルーチンに戻るステップであって、前記関数は、前記ルーチン内の第1命令にアクセスするようになっており、前記ルーチン内の前記第1命令は、前記期待リターンポイントに配置されると共に、前記複数のリターンポイントの一つに関連するデータを含むようになっているステップ、
    前記関数が期待通りに戻る場合に前記ルーチン内の前記第1命令を実行するステップであって、前記第1命令の実行は、前記ルーチンの実行に影響を与えないようになっているステップ、
    前記関数が期待通りに戻らずに第1非期待リターンとして戻る場合に前記第1代替リターンポイントを計算するために、前記第1命令に関連する前記埋込みライブラリ値にアクセスするステップ、及び
    前記関数が期待通りに戻らずに第1非期待リターンとして戻る場合に前記第1代替リターンポイントにおいて前記ルーチン内の第2命令を実行するステップであって、前記関数が期待通りに戻らずに第1非期待リターンとして戻る場合に前記第1命令は実行されないようになっているステップ、
    を含む、コンピュータ実現方法。
  10. 前記第1命令はテスト命令及び移動命令のうちの何れかである、請求項9に記載のコンピュータ実現方法
  11. 更に、前記第1代替リターンポイントにジャンプするステップを含む、請求項9に記載のコンピュータ実現方法
  12. 前記第1命令に関連する前記埋込みライブラリ値にアクセスするステップは、前記期待リターンポイントから前記第1代替リターンポイントを識別する前記ライブラリ値をロードするステップを含む、請求項9に記載のコンピュータ実現方法
  13. 更に、
    前記関数が期待通りに戻らずに第2非期待リターンとして戻る場合に第2代替リターンポイントを識別するための第3命令にアクセスするステップであって、前記第3命令は、前記期待リターンポイントからオフセット分、離して配置されているステップ、及び
    前記関数が期待通りに戻らずに第2非期待リターンとして戻る場合に前記第2代替リターンポイントにおいて前記ルーチン内の第4命令を実行するステップであって、前記関数が期待通りに戻らずに第2非期待リターンとして戻る場合に前記第1命令及び前記第3命令は実行されないようになっているステップ、
    を含む、請求項9に記載のコンピュータ実現方法
  14. 更に、
    前記関数が期待通りに戻る場合に前記第3命令を実行するステップを含む、請求項13に記載のコンピュータ実現方法
  15. 複数のリターンポイントの一つに関連するデータを格納して前記複数のリターンポイントの一つに関連する前記データの効率的な取得を可能にするためのコンピュータプログラムが記録されたコンピュータ読取可能な記録媒体であって、前記複数のリターンポイントは期待リターンポイントと少なくとも第1代替リターンポイントとを含み、前記コンピュータプログラムが、コンピュータに、
    ルーチンを実行するためのステップであって、前記ルーチンはそのルーチンの一部ではない関数をコールするように構成されているステップ
    前記ルーチン内から、前記ルーチンの実行中に、前記関数をコールするためのステップ
    前記関数の実行を開始するためのステップ
    前記関数から前記ルーチンに戻るためのステップであって、前記関数は前記ルーチン内の第1命令にアクセスするようになっており、前記第1命令は、前記期待リターンポイントに配置されると共に、前記複数のリターンポイントの一つに関連するデータを含むようになっているステップ
    前記関数が期待通りに戻る場合に前記ルーチン内の前記第1命令を実行するためのステップであって、前記第1命令の実行は、あまり大きくない計算オーバヘッドを使用すると共に、前記ルーチンの実行に影響を与えないようになっているステップ
    前記第1命令に関連する埋込みライブラリ値にアクセスするためのステップであって、前記関数が期待通りに戻らずに第1非期待リターンとして戻る場合に前記第1代替リターンポイントを決定するステップ、及び
    前記関数が期待通りに戻らずに第1非期待リターンポイントとして戻る場合に前記第1代替リターンポイントで前記ルーチン内の第2命令を実行するためのステップであって、前記関数が期待通りに戻らずに第1非期待リターンポイントとして戻る場合に前記第1命令は実行されないようになっているステップを実行させる、コンピュータ読取可能な記録媒体
  16. 前記第1命令に関連する前記埋込みライブラリ値にアクセスするための前記ステップは、前記期待リターンポイントから前記第1代替リターンポイントを識別するための前記埋込みライブラリ値を含むバイトをロードするためのステップを有する、請求項15に記載のコンピュータ読取可能な記録媒体
  17. 更に、
    前記関数が期待通りに戻らずに第2非期待リターンとして戻る場合に第2代替リターンポイントを識別するための第3命令に関連するバイトにアクセスするステップであって、前記第3命令は、前記期待リターンポイントからオフセット分、離して配置されているステップ、及び
    前記関数が期待通りに戻らずに第2非期待リターンとして戻る場合に第2代替リターンポイントにおいて前記ルーチン内の第4命令を実行するステップであって、前記関数が期待通りに戻らずに第2非期待リターンとして戻る場合に前記第1命令及び第3命令は実行されないようになっているステップ
    を有する、請求項15に記載のコンピュータ読取可能な記録媒体
  18. リターンポイントに関連する埋込みライブラリ値を有するダミー命令を利用して、期待リターンポイントと代替リターンポイントとを含む複数のリターンポイントのうちの一つを識別するコンピュータプログラムが記録されたコンピュータ読取可能な記録媒体であって、前記コンピュータプログラムが、コンピュータに、
    ルーチン内から、前記ルーチンの実行中に、前記ルーチンの外部にある関数をコールするためのステップ
    前記関数の実行を開始するためのステップ
    前記ダミー命令に関連するリターンポイントにおいて前記コールされた関数の前記実行から前記ルーチンに戻るためのステップ
    前記リターンポイントが期待リターンポイントであるように、前記コールされた関数の前記実行が正常に戻る場合に、前記ダミー命令を実行するためのステップ
    前記リターンポイントが代替リターンポイントであるように、前記コールされた関数の前記実行が代替リターンを要求している場合に、前記埋込みライブラリ値を読み取るためのステップ
    前記埋込みライブラリ値にのみ基づいて前記代替リターンポイントを決定するためのステップ、及び
    前記リターンポイントにおいて前記ルーチン内の命令を実行するためのステップを実行させる、コンピュータ読取可能な記録媒体
JP31974098A 1997-10-06 1998-10-06 マルチプルリターンサイトを実現するための方法及び装置 Expired - Lifetime JP4005724B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/944,326 US6553426B2 (en) 1997-10-06 1997-10-06 Method apparatus for implementing multiple return sites
US08/944326 1997-10-06

Publications (2)

Publication Number Publication Date
JPH11224195A JPH11224195A (ja) 1999-08-17
JP4005724B2 true JP4005724B2 (ja) 2007-11-14

Family

ID=25481199

Family Applications (1)

Application Number Title Priority Date Filing Date
JP31974098A Expired - Lifetime JP4005724B2 (ja) 1997-10-06 1998-10-06 マルチプルリターンサイトを実現するための方法及び装置

Country Status (6)

Country Link
US (1) US6553426B2 (ja)
EP (1) EP0908813B1 (ja)
JP (1) JP4005724B2 (ja)
KR (1) KR100519827B1 (ja)
CN (1) CN1122212C (ja)
DE (1) DE69807021T2 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US6754828B1 (en) * 1999-07-13 2004-06-22 Intel Corporation Algorithm for non-volatile memory updates
US7032100B1 (en) 1999-12-17 2006-04-18 Koninklijke Philips Electronics N.V. Simple algorithmic cryptography engine
GB2358261B (en) * 2000-01-17 2004-06-09 Advanced Risc Mach Ltd Data processing with native and interpreted program instruction words
US7196710B1 (en) 2000-08-23 2007-03-27 Nintendo Co., Ltd. Method and apparatus for buffering graphics data in a graphics system
US7185329B1 (en) 2003-03-28 2007-02-27 Applied Micro Circuits Corporation Use of different color sequences for variables of different sizes and different semantics
US7207032B1 (en) * 2003-03-28 2007-04-17 Applied Micro Circuits Corporation Expanding a software program by insertion of statements
US20040250054A1 (en) * 2003-06-09 2004-12-09 Stark Jared W. Line prediction using return prediction information
KR100658918B1 (ko) * 2004-03-29 2006-12-15 주식회사 팬택앤큐리텔 블록 단위 입출력 명령어를 이용한 시스템 전역 변수초기화 장치 및 그 방법
US8266232B2 (en) * 2005-10-15 2012-09-11 International Business Machines Corporation Hardware processing of commands within virtual client computing environment
US8392895B2 (en) * 2009-01-13 2013-03-05 Mediatek Inc. Firmware extension method and firmware builder
US20140283060A1 (en) * 2013-03-15 2014-09-18 Oracle International Corporation Mitigating vulnerabilities associated with return-oriented programming
US9569185B2 (en) 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process
GB2551548B (en) * 2016-06-22 2019-05-08 Advanced Risc Mach Ltd Register restoring branch instruction
US10152338B2 (en) * 2016-12-14 2018-12-11 International Business Machines Corporation Marking external sibling caller routines

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5856153A (ja) 1981-09-30 1983-04-02 Fujitsu Ltd サブル−チンリタ−ン方式
DE4211966A1 (de) * 1992-04-09 1993-10-14 Philips Patentverwaltung Anordnung zum Abspeichern und Auslesen von Rücksprungdaten
JP3499252B2 (ja) * 1993-03-19 2004-02-23 株式会社ルネサステクノロジ コンパイル装置及びデータ処理装置
US5606682A (en) * 1995-04-07 1997-02-25 Motorola Inc. Data processor with branch target address cache and subroutine return address cache and method of operation
JP2857600B2 (ja) * 1995-05-11 1999-02-17 松下電器産業株式会社 プロセッサ及びプログラム翻訳装置

Also Published As

Publication number Publication date
EP0908813B1 (en) 2002-08-07
CN1122212C (zh) 2003-09-24
JPH11224195A (ja) 1999-08-17
DE69807021T2 (de) 2002-12-12
CN1234549A (zh) 1999-11-10
US6553426B2 (en) 2003-04-22
EP0908813A3 (en) 1999-04-28
US20020062400A1 (en) 2002-05-23
EP0908813A2 (en) 1999-04-14
DE69807021D1 (de) 2002-09-12
KR100519827B1 (ko) 2005-12-16
KR19990036884A (ko) 1999-05-25

Similar Documents

Publication Publication Date Title
JP4005724B2 (ja) マルチプルリターンサイトを実現するための方法及び装置
US6192516B1 (en) Interpreter generation and implementation utilizing interpreter states and register caching
US6553565B2 (en) Method and apparatus for debugging optimized code
US6826681B2 (en) Instruction specified register value saving in allocated caller stack or not yet allocated callee stack
JP6474398B2 (ja) コードスタック管理
JP4562918B2 (ja) インタプリティブ・ランタイム環境のためのコンパイル・プログラムの生成
EP1049011A2 (en) Method and apparatus for handling exceptions as normal control flow
WO2006014587A1 (en) Generating unwind information for optimized programs
JPH11327916A (ja) コンパイル済コ―ドにおけるダイナミッククラス初期化チェックのコスト低減技術
US7124407B1 (en) Method and apparatus for caching native code in a virtual machine interpreter
JP2002525707A (ja) バーチャルコールのインライン化のための精確な方法
US5960197A (en) Compiler dispatch function for object-oriented C
US20020170044A1 (en) Method and system for register allocation
US7007198B2 (en) Method for handling exceptions of applications
US20020133527A1 (en) Method and apparatus for class intialization barriers and access to class variables in multitasking virtual machines
CN100378657C (zh) 用于改进java方法调用速度的方法和装置
US6931638B2 (en) Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine
US6883165B1 (en) Apparatus and method for avoiding deadlocks in a multithreaded environment
US7685588B2 (en) Platform independent binary instrumentation and memory allocation method
US6779188B1 (en) Apparatus and method for improved devirtualization of method calls
US6901591B1 (en) Frameworks for invoking methods in virtual machines
JP4684571B2 (ja) エミュレーションコンピュータ技術を実行する直接命令
JP4864287B2 (ja) 識別方法、記録媒体及びコンピュータシステム
Drew et al. Implementing zero overhead exception handling
JP2005284729A (ja) バイトコードをネイティブコードにコンパイルする仮想マシン

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051005

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051019

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060817

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060822

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070508

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070705

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070824

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

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110831

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110831

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120831

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130831

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term