JP2000222242A - コンパイル方法及び装置、並びにスタック・トレース方法及び装置 - Google Patents
コンパイル方法及び装置、並びにスタック・トレース方法及び装置Info
- Publication number
- JP2000222242A JP2000222242A JP11021942A JP2194299A JP2000222242A JP 2000222242 A JP2000222242 A JP 2000222242A JP 11021942 A JP11021942 A JP 11021942A JP 2194299 A JP2194299 A JP 2194299A JP 2000222242 A JP2000222242 A JP 2000222242A
- Authority
- JP
- Japan
- Prior art keywords
- address
- stack
- code
- frame
- pointer
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
Abstract
も、スタックトレースを行なうことができる方法を提供
する。 【解決手段】 サブルーチンのコンパイル時に、スタッ
クポインタを変化させるコードのアドレスと、初期フレ
ームサイズからのスタックポインタの変化量との対を記
録したsp変化表を作成し、初期フレームサイズと共に
サブルーチンに対して登録し、スタックトレース時に、
スレッドを一時停止し、最初のフレームのアドレスと、
このフレームでの実行再開アドレスと、このアドレスに
対応するサブルーチンに登録された前記sp変化表およ
び初期フレームサイズとから、フレームのベースアドレ
スを計算することによってスタックトレースを行なう。
Description
びスタック・トレース方法に関し、より詳しくはJav
a(Sun Microsystems社の商標)のJIT(Just In Ti
me)コンパイラ及びそれを使用する場合におけるスタッ
ク・トレース方法に関する。
ューティングの共通言語としてだけでなく、プラットフ
ォームに依存しない、オブジェクト指向言語のスタンダ
ードな言語として広く使用されている。Javaで書か
れたプログラムはバイトコードに変換され、バイトコー
ドはJava仮想マシンで実行される。そのため、一度
Javaで書かれたプログラムは、Javaをサポート
しているコンピュータならば、CPUを問わずどこでも
動く(マルチプラットフォーム)という利点を持つ。
の仮想マシンによる実行は、機械語のコードを直接実行
するのに比べて、実行性能の点で劣る。そのため、JI
Tコンパイラにより、Javaプログラムの動作中に前
記バイトコードを機械語コード(以下、JITedコー
ドと呼ぶ)に変換して、バイトコードの代わりにJIT
edコードを実行するのが一般的である。コンパイルの
最小単位は、メソッドと呼ばれるサブルーチンである。
実行頻度の高いコードを機械語に変換することにより、
Javaバイトコードのマルチプラットフォーム特性を
残しつつ、機械語コードの性能を引き出している。
ムが動作するCPUに適したコードになっているという
点で、Cコンパイラなどが生成する最適化コードと同等
である。一般に、現在普及しているCPUでは、サブル
ーチンが呼ばれると、サブルーチンは、自分が使用する
ローカル変数を格納するための領域(フレームと呼ぶ)
をスタック上に形成する。図1は、サブルーチンAがサ
ブルーチンBを、サブルーチンBがサブルーチンCを呼
び出したときのスタックの様子である。この図におい
て、スタックは下から上に伸びる。各領域は、サブルー
チンのそれぞれのフレームを表わす。スタックポインタ
SPは、このスタックの最上部、すなわち、フレームC
の最上部を指している。サブルーチンCがさらにサブル
ーチンDを呼べば、現在のSPから新たにサブルーチン
Dのフレームが形成され、SPは、そのフレームの最上
部を指し直す。各サブルーチンから戻る際、そのフレー
ムは除去される。例えば、サブルーチンDからサブルー
チンCに戻る場合、戻る前にサブルーチンDのフレーム
は除去され、SPは、サブルーチンCがサブルーチンD
を呼び出した時の値に戻り、再びフレームCの最上部を
指す。Javaの場合では、スレッドと呼ばれる実行単
位毎にCPU資源が割り振られ、各スレッドは固有のス
タック(スレッドスタックと呼ぶ)を持つ。JITed
コードは、スレッドスタック上に上述したようなフレー
ム(以下、JITedフレームと呼ぶ)を作る。
dフレームだけではない。JITedコードは、Jav
a仮想マシンが提供する様々なサービスルーチンを呼び
出す。サービスルーチンによっては、さらに新たなJa
va仮想マシンを起動するものもある。図2は、JIT
edコードとそれ以外のコードのフレームが、スレッド
スタック中で混じっているところを示す。アルファベッ
ト文字が付いている部分がJITedフレームである。
ンタを使用する。例えば、x86のベースポインタEB
Pは、スタック中の現在のフレームのベースアドレスを
常に保持し、スタック中のフレームの検出を容易にして
いる。例えば、Cプログラムなどのデバッグの際には、
スタックトレースでメソッドの呼びかけ関係を知ること
は有用である。EBPによるフレーム鎖は、このために
よく使われる。
にレジスタの少ないx86アーキテクチャで重要な技術
として、ベースポインタの省略がある。上述したCプロ
グラムの例の場合、デバッグが終わり、最終コードをビ
ルドする際には、EBPをフレーム鎖から解放する最適
化を行なうことによって、フレーム鎖の維持オーバヘッ
ドが減少し、EBPレジスタを汎用レジスタとして割り
当てられるようになる。これにより、高速なコードを生
成することができる。この最適化は、Cのような言語で
は、実行時にスタックトレースが必要ないからこそ可能
である。
パイラでは、このようなベースポインタの省略が困難で
ある。Javaの言語仕様で、Java.lang.SecurityMana
ger のclassLoaderDepth()や、Java.lang.Threadのcoun
tStackFrames()などが、スタックトレース同等の機能を
要求しているからである。他にも、例外発生時にその時
のスタックトレースを例外オブジェクトに記憶する必要
がある。ベースポインタを省略すると、これらが機能し
ない。
ニズムにおいてもベースポインタの省略を困難にする原
因がある。JITedコードを含むJITコンパイラが
使用するメモリに制限がある、あるいは制限を設けると
き、クラスアンロードだけでは十分でない場合がある。
例えば、ハードディスクによる仮想記憶を持たない、ネ
ットワークコンピューティング(Network Computing )
マシン(以下、NCマシン)のような、シンクライアン
ト(thin client)上で動作するデスクトッ
プ環境では、メール、ワープロ、スケジューラ等、複数
のJavaアプリケーションが同時に起動され、数千種
類のメソッドが呼ばれうるが、かなりの割合のメソッド
が各スレッドスタック中に存在しない(アクティブでな
い)。クラスアンロードは、Javaシステム内に完全
に使用される可能性のないクラスおよびそのメソッドし
か破棄しないため、そうしたアクティブでないメソッド
のJITedコードを破棄しない。そこで、JITコン
パイラは、アクティブメソッドをすべてのスレッドスタ
ック中から見つけ出し、非アクティブメソッド(の一
部)を破棄してメモリをフリーにするJITedコード
破棄メカニズムを持っている。アクティブメソッドを正
確且つ高速に発見するために、JITedコードのフレ
ームだけを連結するフレーム鎖が欠かせない。
れた状況においてもスタック・トレースを行なうことが
できるようにすることである。
ドのコンパイル処理と共にスタックポインタを変化させ
るコードのアドレスと変化後のスタックフレームのサイ
ズに関する情報との対を記憶装置に記録し、当該対から
構成される変化表と初期フレームサイズとをコンパイル
されたメソッドに対応して登録する処理を行なう。変化
後のスタックフレームのサイズに関する情報は、好適に
は、初期フレームサイズからのスタックポインタの変化
量であるが、変化後のスタックフレームのサイズそのも
のでもよい。前者の場合には変化表は初期フレームサイ
ズを含むか、別途初期フレームサイズを用意する。
ており且つ好適な実施形態におけるJITedコード実
行時に一時停止しトレースを行なう場合には、トレース
のため一時停止した時の実行コードのアドレスとスタッ
クポインタのアドレスを取得し且つ記憶装置に格納し、
実行コードのアドレスとスタックポインタのアドレスと
当該実行コードを含むメソッドの変化表とを用いて、ベ
ースポインタが指すべきベースアドレスを計算し且つ記
憶装置に格納する。
ラストフレーム・レコード方式(所定のコンパイラによ
りコンパイルされた第1メソッドが所定のコンパイラに
よりコンパイルされていない第2メソッドを呼び出した
時に、第1メソッドのスタック・フレームを指すレコー
ドが生成される方式)を採用しており且つ好適な実施形
態における非JITedコード実行時に一時停止しトレ
ースを行なう場合には、前記レコードを参照して第1メ
ソッドのスタック・フレームのアドレスと第1メソッド
のスタック・フレームに保持されている実行再開アドレ
スとを取得し且つ記憶装置に格納し、第1メソッドのス
タック・フレームのアドレスと実行再開アドレスと第1
メソッドの変化表とを用いて、ベースポインタが指すべ
きベースアドレスを計算し記憶装置に格納する。
する最適化を行なっても、スタック・トレースを行なう
ことができる。従って、上述のようなJava言語仕様
に関する問題は解決し、ベースポインタの省略最適化を
行なうことにより、Javaのコンパイルコードの品質
を大きく向上させることができる。一方、JITedコ
ード破棄メカニズムを採用している環境では、品質を落
さずに効率的なアクティブメソッド検索手法を実現する
ことができる。
発明はこれらの処理を実施する装置や、コンピュータに
これらの処理を実施させるプログラムの形態によっても
実現可能である。このプログラムを、フロッピー・ディ
スクやCD−ROM等の記憶媒体又は他の形態の記憶装
置に格納することは、通常当業者が行う事項である。
説明する。サーバ・コンピュータ1及びクライアント・
コンピュータ5はネットワーク3を介して接続されてい
る。クライアント・コンピュータ5は、JavaVM
(Virtual Machine )52及びOS(Operating Syste
m)53及びハードウエア(CPU及びメモリを含む)
55を含む。さらに、JavaVM52は、Javaイ
ンタープリタ54又はJava JITコンパイラ5
6、及びスタックのトレースを行うトレーサ60を含
む。インタープリタ54及びJITコンパイラ56の両
者を有している場合もある。なお、クライアント・コン
ピュータ5は、通常のコンピュータの他、メモリの大き
さが小さかったり、ハードディスク等の補助記憶装置を
含まないような、いわゆるネットワーク・コンピュータ
や情報家電の場合もある。
ースコード10は、Javaコンパイラ12によりコン
パイルされる。このコンパイルの結果が、バイトコード
14である。このバイトコード14は、ネットワーク3
を介してクライアント・コンピュータ5に送信される。
バイトコード14は、クライアント・コンピュータ5内
のWWWブラウザ(World Wide Web Browser)などに設
けられたJava仮想マシン(Java VM )52にとって
ネイティブ・コードであり、実際ハードウエア55のC
PUにて実行する場合には、Javaインタープリタ5
4や、JavaJITコンパイラ56を用いる。インタ
ープリタ54は、実行時にバイトコード14をデコード
し、命令ごとに用意される処理ルーチンを呼び出して実
行する。一方、JITコンパイラ56は、バイトコード
を事前にあるいは実行する直前にコンパイラを用いてマ
シン・コード58(機械語コードとも言う)に変換して
それをCPUで実行する。
56及びトレーサ60と、これらに関連する機能につい
て説明する。
インメモリ上に展開された、本発明に関係する機能のブ
ロック図である。JITコンパイラ56は、バイトコー
ド14からマシン・コード58を生成するものである。
あるメソッドのマシン・コードは図3においてメソッド
40として示されている。JITコンパイラ56はこの
メソッドのコンパイル時に、JITed管理ブロック1
00を生成する。また、JITコンパイラ56は、本発
明に関係するSP変化表102と初期フレームサイズ1
03をJITed管理ブロック100に登録する。JI
Ted管理ブロック100は、JITコンパイラ56に
コンパイルされたメソッドの管理ブロックである。さら
に、JITコンパイラ56は、マシン・コード58のア
ドレスからメソッドを特定するためのJITedコード
・データベース(DB)80に、生成したメソッド40
の登録を行う。メソッド40は実際に実行されるとラス
トフレーム・レコード70を生成する。トレーサ60
は、このラストフレーム・レコード70と、JITed
コードDB80と、JITedコードDB80から特定
されるSP変化表102及び初期フレームサイズ103
と、現在のフレームサイズを出力するフレームサイズ関
数90と、SPや現在実行アドレスを含むコンテキスト
(図示せず)とを用いて、スタックをトレースする。
に図6及び図7を用いて説明する。
時に行う動作である。JITコンパイラ56は、メソッ
ドのコンパイル処理を行う(ステップ610)。このコ
ンパイル処理には、マシン・コード58(図3ではメソ
ッド40)の生成の他に、SP変化表102及びJIT
ed管理ブロック100の作成も含む。当然、作成され
たマシン・コード及び情報はメインメモリに格納され
る。コンパイル処理が終了すると、そのメソッドのスタ
ック・フレームの初期フレームサイズ103と最終的な
SP変化表102をJITed管理ブロック100に登
録する(ステップ620)。SP変化表102とは、S
Pの値を変化させるマシン・コードのアドレス(そのマ
シン・コード内のオフセットでよい)と、初期フレーム
サイズからの変化量という対を、アドレス順に記憶した
ものである。通常、SPのアドレスが最初に作成したフ
レームの先頭アドレスより増えるのは、メソッドとライ
ブラリルーチンの両者(以下、関数と呼ぶ)の呼び出し
時が主である。この関数呼び出しの引数をスタックに積
む、引数のスタック領域を確保する、あるいは削除する
マシン・コードをコンパイラが生成する毎に、SPの値
を変化させるマシン・コードのアドレスとSPの初期フ
レームサイズからの変化量を記録していけば、SP変化
表102は作成できる。但し、マシン・コード生成後
に、基本ブロックの入れ替えなどを実施する場合もある
ので、アドレスをキーとしてソートする。基本ブロック
の入れ替えなどを行わなければ、自然にソートされてい
る。SP変化表102はメソッドごとに作成する。な
お、SPの値を変化させるコードはそれほど多くないた
め、SP変化表102のサイズは小さくて済む。
作を説明する。但し、以下の説明では、特願平10−2
67842号で開示したJITedラストフレーム方式
が使用されることを前提としているので、この方式につ
いて少し説明しておく。図4は、ある時点でのスレッド
スタックの一般的な状態を示す線図である。A,B,C
及びDがメソッドのJITedフレームである。Aと
B、CとDは連続している(JITedフレーム列と呼
ぶ)。図4において、JITedフレーム列の先頭を指
している□はJITedラストフレーム・レコードであ
る。このJITedラストフレーム・レコードは、連続
するJITedフレームを管理し、それ自身LIFO
(Last In First Out )のリストを構成する。JITe
dラストフレーム・レコードは、JITedコードがサ
ービス・ルーチン等の非JITedコードを呼ぶ毎に作
成され、リストを更新する。すなわち、JITedコー
ドにはサービス・ルーチン等を呼ぶ直前にJITedラ
ストフレーム・レコードを生成するマシン・コードが含
まれている。JITedラストフレーム・レコードが指
すJITedフレーム列の先頭のJITedフレーム
は、そのフレームで実行するメソッドから非JITed
コードへの脱出が起こっていることを示している。な
お、非JITedコードからJITedコードを呼ぶ場
合には、非JITedフレームの次にJITedフレー
ムが生成されるが、この切り換えも別途記録されている
ものとする。
行う動作を示す。なお、トレーサ60が動作するときに
は、スレッドは停止させられている。まず、トレーサ6
0はJITedコード内で停止しているか判断する(ス
テップ710)。JITedコードか否かという判断
は、コンテキストから判断できる。もし、JITedコ
ード内で停止していれば(例えば図1の状態)、トレー
サ60はコンテキストから停止アドレスaddrとSP
を取得する(ステップ720)。一方、JITedコー
ド内で停止しているわけではなく、非JITedコード
内で停止している場合には(例えば図2の状態)、トレ
ーサ60は、JITedラストフレーム・レコード(の
リスト)70の最も上の(最も新しい)情報を参照し
て、そのJITedラストフレーム・レコードが指すア
ドレスと、それが指すアドレスのフレームでの実行再開
アドレスとを取得し、それぞれSPとaddrとする
(ステップ730)。実行再開アドレスは、フレームに
記憶されている。
JITedコードDB80を引いてメソッドを特定す
る。そして、そのメソッドのJITed管理ブロック1
00から初期フレームサイズ103とSP変化表102
(のアドレス)を取得する(ステップ740)。そし
て、トレーサ60は、addr、初期フレームサイズ1
03及びSP変化表102(のアドレス)を引数として
フレームサイズ関数90を呼ぶ。フレームサイズ関数9
0は、SP変化表102においてaddrをキーとして
バイナリサーチを行い、そのaddrに対応する変化量
を取得し、初期フレームサイズを用いて現在フレームサ
イズを計算する。そしてフレームサイズ関数90は現在
フレームサイズをトレーサ60に返す(ステップ75
0)。トレーサ60は、SPと現在フレームサイズか
ら、現在のフレームのベースアドレス、すなわちベース
ポインタが指すべきアドレスを計算する(ステップ76
0)。このアドレスにフレームの切れ目がある。
JITedフレーム列の最後のフレームであるか判断す
る(ステップ770)。これは、非JITedコードが
JITedコードを呼び出す場合には、それらのフレー
ムの切れ目のアドレスは記録されているので、このアド
レスと計算されたベースポインタのアドレスを比較すれ
ばよい。もし、現在フレームがJITedフレーム列の
最後のフレームでなければ、トレーサ60は、次の(下
の)フレームでの実行再開アドレスを取得し、ベースポ
インタのアドレスをSPとし、実行再開アドレスをad
drとしてステップ740に戻る(ステップ780)。
ーム列の最後のフレームであると判断された場合には、
トレーサ60は、次のJITedフレーム列が存在する
か否かで判断する(ステップ790)。これはJITe
dラストフレーム・レコード(のリスト)70の次のレ
コードが存在するかで判断できる。もし、次のJITe
dラストフレーム・レコードが存在しない場合には、処
理を終了する(ステップ800)。一方、次のJITe
dラストフレーム・レコードが存在する場合には、次の
JITedラストフレーム・レコードについてステップ
730を実行する。そして、トレーサ60はステップ7
40以降の処理を実施する。
からの変化量と初期フレームサイズの対を記録する例を
示したが、場合によっては変化後のSPが指しているス
タックフレームのサイズ自身を記録するようにしてもよ
い。この際には、初期フレームサイズを記録する必要は
ない。
れる又は計算されるアドレスは記憶装置(例えばメイン
メモリ)に記憶される。
する最適化を行っても、フレームトレースを行なうこと
ができる。従って、Javaの言語仕様を変更すること
なく、Javaのコンパイルコードの品質を大きく向上
させることができる。一方、JITedコード破棄メカ
ニズムが使用される環境では、効率的なアクティブメソ
ッド検索が可能になる。
ーチンBがサブルーチンCを呼び出したときのスタック
を示す線図である。
ームが混在するスレッドスタックを示す線図である。
説明する線図である。
態を示す線図である。
る。
ンパイル時に行う動作を説明するフローチャートであ
る。
に行う動作を説明するフローチャートである。
Claims (7)
- 【請求項1】 メソッドのコンパイル処理と共にスタッ
クポインタを変化させるコードのアドレスと変化後のス
タックフレームのサイズに関する情報との対を記憶装置
に記録し、当該対から構成される変化表をコンパイルさ
れたメソッドに対応して登録するコンパイル方法。 - 【請求項2】 スタックポインタを変化させるコードの
アドレスと変化後のスタックフレームのサイズに関する
情報との対から構成される変化表が各メソッドに対応し
て登録されている場合にスタックのトレースを行なう方
法であって、 トレースのため一時停止した時の実行コードのアドレス
とスタックポインタのアドレスを取得し且つ記憶装置に
格納し、 前記実行コードのアドレスと前記スタックポインタのア
ドレスと当該実行コードを含むメソッドの前記変化表と
を用いて、ベースポインタが指すべきベースアドレスを
計算し且つ記憶装置に格納するスタック・トレース方
法。 - 【請求項3】 スタックポインタを変化させるコードの
アドレスと変化後のスタックフレームのサイズに関する
情報との対から構成される変化表が各メソッドに対応し
て登録されており且つ所定のコンパイラによりコンパイ
ルされた第1メソッドが前記所定のコンパイラによりコ
ンパイルされていない第2メソッドを呼び出した時に生
成される、前記第1メソッドのスタック・フレームを指
すレコードが記憶されている場合にスタックのトレース
を行なう方法であって、 前記レコードを参照して前記第1メソッドのスタック・
フレームのアドレスと前記第1メソッドのスタック・フ
レームに保持されている実行再開アドレスとを取得し且
つ記憶装置に格納し、 前記第1メソッドのスタック・フレームのアドレスと前
記実行再開アドレスと前記第1メソッドの前記変化表と
を用いて、ベースポインタが指すべきベースアドレスを
計算し記憶装置に格納するスタック・トレース方法。 - 【請求項4】 スタックポインタを変化させるコードの
アドレスと変化後のスタックフレームのサイズに関する
情報との対を記憶装置に記録する手段と、当該対から構
成される変化表をコンパイルされたメソッドに対応して
登録する手段とを有するコンパイル装置。 - 【請求項5】 スタックポインタを変化させるコードの
アドレスと変化後のスタックフレームのサイズに関する
情報との対から構成される変化表が各メソッドに対応し
て登録されている場合に、スタックのトレースを行なう
装置であって、 トレースのため一時停止した時の実行コードのアドレス
とスタックポインタのアドレスを取得し且つ記憶装置に
格納する手段と、 前記実行コードのアドレスと前記スタックポインタのア
ドレスと当該実行コードを含むメソッドの前記変化表と
を用いて、ベースポインタが指すべきベースアドレスを
計算し且つ記憶装置に格納する手段と、 を有するスタック・トレース装置。 - 【請求項6】 スタックポインタを変化させるコードの
アドレスと変化後のスタックフレームのサイズに関する
情報との対を記憶装置に記録する機能と、当該対から構
成される変化表をコンパイルされたメソッドに対応して
登録する機能とを実現するためのコンパイラを記憶した
記憶媒体。 - 【請求項7】 スタックポインタを変化させるコードの
アドレスと変化後のスタックフレームのサイズに関する
情報との対から構成される変化表が各メソッドに対応し
て登録されている場合にスタックのトレースを行なうス
タック・トレーサであって、 トレースのため一時停止した時の実行コードのアドレス
とスタックポインタのアドレスを取得し且つ記憶装置に
格納する機能と、 前記実行コードのアドレスと前記スタックポインタのア
ドレスと当該実行コードを含むメソッドの前記変化表と
を用いて、ベースポインタが指すべきベースアドレスを
計算し且つ記憶装置に格納する機能と、 を実現するためのスタック・トレーサを格納した記憶媒
体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP02194299A JP4088379B2 (ja) | 1999-01-29 | 1999-01-29 | コンパイル方法及び装置、並びにスタック・トレース方法及び装置 |
US09/493,763 US6732355B1 (en) | 1999-01-29 | 2000-01-28 | Method and device for generating registration data at compilation to enable trace of stack |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP02194299A JP4088379B2 (ja) | 1999-01-29 | 1999-01-29 | コンパイル方法及び装置、並びにスタック・トレース方法及び装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000222242A true JP2000222242A (ja) | 2000-08-11 |
JP4088379B2 JP4088379B2 (ja) | 2008-05-21 |
Family
ID=12069113
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP02194299A Expired - Lifetime JP4088379B2 (ja) | 1999-01-29 | 1999-01-29 | コンパイル方法及び装置、並びにスタック・トレース方法及び装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6732355B1 (ja) |
JP (1) | JP4088379B2 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007052676A (ja) * | 2005-08-18 | 2007-03-01 | Nec Corp | データトレース方法およびトレースモジュール |
US7240343B2 (en) | 2001-07-05 | 2007-07-03 | International Business Machines Corporation | System and method for handling an exception in a program |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7343594B1 (en) * | 2000-08-07 | 2008-03-11 | Altera Corporation | Software-to-hardware compiler with symbol set inference analysis |
US7320125B2 (en) * | 2001-05-24 | 2008-01-15 | Techtracker, Inc. | Program execution stack signatures |
US7870541B1 (en) * | 2004-11-01 | 2011-01-11 | Wind River Systems, Inc. | Context tracing for software with a frame pointer and a stack pointer and with a stack pointer but without a frame pointer |
US7797685B2 (en) * | 2005-05-13 | 2010-09-14 | Texas Instruments Incorporated | Method for generating timing data packet |
US8490073B2 (en) * | 2007-03-30 | 2013-07-16 | International Business Machines Corporation | Controlling tracing within compiled code |
US10324796B2 (en) * | 2016-08-11 | 2019-06-18 | International Business Machines Corporation | Stack detail recovery |
CN110764941B (zh) * | 2019-09-05 | 2023-04-18 | 北京字节跳动网络技术有限公司 | 获取调用栈栈帧指令偏移的方法、装置、介质和设备 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5598560A (en) * | 1991-03-07 | 1997-01-28 | Digital Equipment Corporation | Tracking condition codes in translation code for different machine architectures |
US5339238A (en) * | 1991-03-07 | 1994-08-16 | Benson Thomas R | Register usage tracking in translating code for different machine architectures by forward and reverse tracing through the program flow graph |
JPH06274369A (ja) | 1993-03-19 | 1994-09-30 | Hitachi Ltd | 最適化プログラムのデバッグ方式 |
US6081665A (en) * | 1997-12-19 | 2000-06-27 | Newmonics Inc. | Method for efficient soft real-time execution of portable byte code computer programs |
US6148391A (en) * | 1998-03-26 | 2000-11-14 | Sun Microsystems, Inc. | System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses |
JP3813019B2 (ja) * | 1998-05-11 | 2006-08-23 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム処理方法、指定メソッドに関連するフレームを検出する方法、及び記憶媒体 |
US6499137B1 (en) * | 1998-10-02 | 2002-12-24 | Microsoft Corporation | Reversible load-time dynamic linking |
US20020147969A1 (en) * | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
-
1999
- 1999-01-29 JP JP02194299A patent/JP4088379B2/ja not_active Expired - Lifetime
-
2000
- 2000-01-28 US US09/493,763 patent/US6732355B1/en not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7240343B2 (en) | 2001-07-05 | 2007-07-03 | International Business Machines Corporation | System and method for handling an exception in a program |
JP2007052676A (ja) * | 2005-08-18 | 2007-03-01 | Nec Corp | データトレース方法およびトレースモジュール |
Also Published As
Publication number | Publication date |
---|---|
JP4088379B2 (ja) | 2008-05-21 |
US6732355B1 (en) | 2004-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6026235A (en) | System and methods for monitoring functions in natively compiled software programs | |
US9495136B2 (en) | Using aliasing information for dynamic binary optimization | |
US8832672B2 (en) | Ensuring register availability for dynamic binary optimization | |
US6381737B1 (en) | Automatic adapter/stub generator | |
US5848274A (en) | Incremental byte code compilation system | |
EP2340481B1 (en) | Caching runtime generated code | |
JP4562918B2 (ja) | インタプリティブ・ランタイム環境のためのコンパイル・プログラムの生成 | |
JP3470948B2 (ja) | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ | |
US20050177821A1 (en) | Compiler, dynamic compiler, and replay compiler | |
JPH05233326A (ja) | コンピュータシステムにおいて事象を取り扱う方法及びシステム | |
KR100555116B1 (ko) | 객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스 | |
JPH09325901A (ja) | デバッギングを実施する方法 | |
JP2000172512A (ja) | バイトコ―ドを実行するための方法およびデ―タ処理システム | |
US20060070049A1 (en) | Java bytecode translation method and Java interpreter performing the same | |
Chanchio et al. | Data collection and restoration for heterogeneous process migration | |
US7100154B2 (en) | Dynamic compiler apparatus and method that stores and uses persistent execution statistics | |
JP4088379B2 (ja) | コンパイル方法及び装置、並びにスタック・トレース方法及び装置 | |
US6735761B1 (en) | Compile method frame detection method and device code discarding method and computer | |
CN113220326B (zh) | 智能合约升级方法及区块链系统 | |
US6256752B1 (en) | Method and apparatus for dynamic swappable bytecode loop in java virtual machines | |
JP2919302B2 (ja) | Cpuシミュレーション方法 | |
CN100549958C (zh) | 一种类文件装载方法和系统 | |
CN116594622A (zh) | 基于类型推导与数据流分析的Python程序编译方法及系统 | |
JP4864287B2 (ja) | 識別方法、記録媒体及びコンピュータシステム | |
JP3807860B2 (ja) | コンパイル方法および装置、並びにメソッド活動度計算方法および装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20040511 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040729 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20040910 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20041022 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070910 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20080219 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080225 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110228 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110228 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110228 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120229 Year of fee payment: 4 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130228 Year of fee payment: 5 |
|
S202 | Request for registration of non-exclusive licence |
Free format text: JAPANESE INTERMEDIATE CODE: R315201 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130228 Year of fee payment: 5 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130228 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140228 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 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: R3D02 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |