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
Application number
JP11021942A
Other languages
English (en)
Other versions
JP4088379B2 (ja
Inventor
Takeshi Ogasawara
武史 小笠原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP02194299A priority Critical patent/JP4088379B2/ja
Priority to US09/493,763 priority patent/US6732355B1/en
Publication of JP2000222242A publication Critical patent/JP2000222242A/ja
Application granted granted Critical
Publication of JP4088379B2 publication Critical patent/JP4088379B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • 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

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

(57)【要約】 【課題】 ベースポインタが省略された状況において
も、スタックトレースを行なうことができる方法を提供
する。 【解決手段】 サブルーチンのコンパイル時に、スタッ
クポインタを変化させるコードのアドレスと、初期フレ
ームサイズからのスタックポインタの変化量との対を記
録したsp変化表を作成し、初期フレームサイズと共に
サブルーチンに対して登録し、スタックトレース時に、
スレッドを一時停止し、最初のフレームのアドレスと、
このフレームでの実行再開アドレスと、このアドレスに
対応するサブルーチンに登録された前記sp変化表およ
び初期フレームサイズとから、フレームのベースアドレ
スを計算することによってスタックトレースを行なう。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンパイル方法及
びスタック・トレース方法に関し、より詳しくはJav
a(Sun Microsystems社の商標)のJIT(Just In Ti
me)コンパイラ及びそれを使用する場合におけるスタッ
ク・トレース方法に関する。
【0002】
【従来の技術】現在、Javaは、ネットワークコンピ
ューティングの共通言語としてだけでなく、プラットフ
ォームに依存しない、オブジェクト指向言語のスタンダ
ードな言語として広く使用されている。Javaで書か
れたプログラムはバイトコードに変換され、バイトコー
ドはJava仮想マシンで実行される。そのため、一度
Javaで書かれたプログラムは、Javaをサポート
しているコンピュータならば、CPUを問わずどこでも
動く(マルチプラットフォーム)という利点を持つ。
【0003】しかしこうした利点の反面、バイトコード
の仮想マシンによる実行は、機械語のコードを直接実行
するのに比べて、実行性能の点で劣る。そのため、JI
Tコンパイラにより、Javaプログラムの動作中に前
記バイトコードを機械語コード(以下、JITedコー
ドと呼ぶ)に変換して、バイトコードの代わりにJIT
edコードを実行するのが一般的である。コンパイルの
最小単位は、メソッドと呼ばれるサブルーチンである。
実行頻度の高いコードを機械語に変換することにより、
Javaバイトコードのマルチプラットフォーム特性を
残しつつ、機械語コードの性能を引き出している。
【0004】メソッドのJITedコードは、プログラ
ムが動作する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フレームと呼ぶ)を作る。
【0005】スレッドスタック中にあるのは、JITe
dフレームだけではない。JITedコードは、Jav
a仮想マシンが提供する様々なサービスルーチンを呼び
出す。サービスルーチンによっては、さらに新たなJa
va仮想マシンを起動するものもある。図2は、JIT
edコードとそれ以外のコードのフレームが、スレッド
スタック中で混じっているところを示す。アルファベッ
ト文字が付いている部分がJITedフレームである。
【0006】スタックトレースには、通常、ベースポイ
ンタを使用する。例えば、x86のベースポインタEB
Pは、スタック中の現在のフレームのベースアドレスを
常に保持し、スタック中のフレームの検出を容易にして
いる。例えば、Cプログラムなどのデバッグの際には、
スタックトレースでメソッドの呼びかけ関係を知ること
は有用である。EBPによるフレーム鎖は、このために
よく使われる。
【0007】一般的なコンパイラ最適化技術として、特
にレジスタの少ないx86アーキテクチャで重要な技術
として、ベースポインタの省略がある。上述したCプロ
グラムの例の場合、デバッグが終わり、最終コードをビ
ルドする際には、EBPをフレーム鎖から解放する最適
化を行なうことによって、フレーム鎖の維持オーバヘッ
ドが減少し、EBPレジスタを汎用レジスタとして割り
当てられるようになる。これにより、高速なコードを生
成することができる。この最適化は、Cのような言語で
は、実行時にスタックトレースが必要ないからこそ可能
である。
【0008】
【発明が解決しようとする課題】JavaのJITコン
パイラでは、このようなベースポインタの省略が困難で
ある。Javaの言語仕様で、Java.lang.SecurityMana
ger のclassLoaderDepth()や、Java.lang.Threadのcoun
tStackFrames()などが、スタックトレース同等の機能を
要求しているからである。他にも、例外発生時にその時
のスタックトレースを例外オブジェクトに記憶する必要
がある。ベースポインタを省略すると、これらが機能し
ない。
【0009】それとは別に、JITedコード破棄メカ
ニズムにおいてもベースポインタの省略を困難にする原
因がある。JITedコードを含むJITコンパイラが
使用するメモリに制限がある、あるいは制限を設けると
き、クラスアンロードだけでは十分でない場合がある。
例えば、ハードディスクによる仮想記憶を持たない、ネ
ットワークコンピューティング(Network Computing )
マシン(以下、NCマシン)のような、シンクライアン
ト(thin client)上で動作するデスクトッ
プ環境では、メール、ワープロ、スケジューラ等、複数
のJavaアプリケーションが同時に起動され、数千種
類のメソッドが呼ばれうるが、かなりの割合のメソッド
が各スレッドスタック中に存在しない(アクティブでな
い)。クラスアンロードは、Javaシステム内に完全
に使用される可能性のないクラスおよびそのメソッドし
か破棄しないため、そうしたアクティブでないメソッド
のJITedコードを破棄しない。そこで、JITコン
パイラは、アクティブメソッドをすべてのスレッドスタ
ック中から見つけ出し、非アクティブメソッド(の一
部)を破棄してメモリをフリーにするJITedコード
破棄メカニズムを持っている。アクティブメソッドを正
確且つ高速に発見するために、JITedコードのフレ
ームだけを連結するフレーム鎖が欠かせない。
【0010】本発明の目的は、ベースポインタが省略さ
れた状況においてもスタック・トレースを行なうことが
できるようにすることである。
【0011】本発明においてコンパイル時には、メソッ
ドのコンパイル処理と共にスタックポインタを変化させ
るコードのアドレスと変化後のスタックフレームのサイ
ズに関する情報との対を記憶装置に記録し、当該対から
構成される変化表と初期フレームサイズとをコンパイル
されたメソッドに対応して登録する処理を行なう。変化
後のスタックフレームのサイズに関する情報は、好適に
は、初期フレームサイズからのスタックポインタの変化
量であるが、変化後のスタックフレームのサイズそのも
のでもよい。前者の場合には変化表は初期フレームサイ
ズを含むか、別途初期フレームサイズを用意する。
【0012】このようなコンパイル時の処理が行なわれ
ており且つ好適な実施形態におけるJITedコード実
行時に一時停止しトレースを行なう場合には、トレース
のため一時停止した時の実行コードのアドレスとスタッ
クポインタのアドレスを取得し且つ記憶装置に格納し、
実行コードのアドレスとスタックポインタのアドレスと
当該実行コードを含むメソッドの変化表とを用いて、ベ
ースポインタが指すべきベースアドレスを計算し且つ記
憶装置に格納する。
【0013】一方、好適な実施形態におけるJITed
ラストフレーム・レコード方式(所定のコンパイラによ
りコンパイルされた第1メソッドが所定のコンパイラに
よりコンパイルされていない第2メソッドを呼び出した
時に、第1メソッドのスタック・フレームを指すレコー
ドが生成される方式)を採用しており且つ好適な実施形
態における非JITedコード実行時に一時停止しトレ
ースを行なう場合には、前記レコードを参照して第1メ
ソッドのスタック・フレームのアドレスと第1メソッド
のスタック・フレームに保持されている実行再開アドレ
スとを取得し且つ記憶装置に格納し、第1メソッドのス
タック・フレームのアドレスと実行再開アドレスと第1
メソッドの変化表とを用いて、ベースポインタが指すべ
きベースアドレスを計算し記憶装置に格納する。
【0014】このようにすると、ベースポインタを省略
する最適化を行なっても、スタック・トレースを行なう
ことができる。従って、上述のようなJava言語仕様
に関する問題は解決し、ベースポインタの省略最適化を
行なうことにより、Javaのコンパイルコードの品質
を大きく向上させることができる。一方、JITedコ
ード破棄メカニズムを採用している環境では、品質を落
さずに効率的なアクティブメソッド検索手法を実現する
ことができる。
【0015】以上本発明の処理の流れを説明したが、本
発明はこれらの処理を実施する装置や、コンピュータに
これらの処理を実施させるプログラムの形態によっても
実現可能である。このプログラムを、フロッピー・ディ
スクやCD−ROM等の記憶媒体又は他の形態の記憶装
置に格納することは、通常当業者が行う事項である。
【0016】
【発明の実施の形態】本発明の装置構成を図5を用いて
説明する。サーバ・コンピュータ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は、通常のコンピュータの他、メモリの大き
さが小さかったり、ハードディスク等の補助記憶装置を
含まないような、いわゆるネットワーク・コンピュータ
や情報家電の場合もある。
【0017】サーバ・コンピュータ1では、Javaソ
ースコード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で実行する。
【0018】以下、本発明に関連するJITコンパイラ
56及びトレーサ60と、これらに関連する機能につい
て説明する。
【0019】図3はクライアント・コンピュータ5のメ
インメモリ上に展開された、本発明に関係する機能のブ
ロック図である。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や現在実行アドレスを含むコンテキスト
(図示せず)とを用いて、スタックをトレースする。
【0020】では、図3の各構成要素の動作をより詳細
に図6及び図7を用いて説明する。
【0021】図6はJITコンパイラ56がコンパイル
時に行う動作である。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のサイズは小さくて済む。
【0022】次にトレーサ60等がトレース時に行う動
作を説明する。但し、以下の説明では、特願平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フレー
ムが生成されるが、この切り換えも別途記録されている
ものとする。
【0023】では図7にトレーサ60等がトレース時に
行う動作を示す。なお、トレーサ60が動作するときに
は、スレッドは停止させられている。まず、トレーサ6
0はJITedコード内で停止しているか判断する(ス
テップ710)。JITedコードか否かという判断
は、コンテキストから判断できる。もし、JITedコ
ード内で停止していれば(例えば図1の状態)、トレー
サ60はコンテキストから停止アドレスaddrとSP
を取得する(ステップ720)。一方、JITedコー
ド内で停止しているわけではなく、非JITedコード
内で停止している場合には(例えば図2の状態)、トレ
ーサ60は、JITedラストフレーム・レコード(の
リスト)70の最も上の(最も新しい)情報を参照し
て、そのJITedラストフレーム・レコードが指すア
ドレスと、それが指すアドレスのフレームでの実行再開
アドレスとを取得し、それぞれSPとaddrとする
(ステップ730)。実行再開アドレスは、フレームに
記憶されている。
【0024】次に、トレーサ60は取得したaddrで
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)。このアドレスにフレームの切れ目がある。
【0025】次にトレーサ60は、この現在フレームが
JITedフレーム列の最後のフレームであるか判断す
る(ステップ770)。これは、非JITedコードが
JITedコードを呼び出す場合には、それらのフレー
ムの切れ目のアドレスは記録されているので、このアド
レスと計算されたベースポインタのアドレスを比較すれ
ばよい。もし、現在フレームがJITedフレーム列の
最後のフレームでなければ、トレーサ60は、次の(下
の)フレームでの実行再開アドレスを取得し、ベースポ
インタのアドレスをSPとし、実行再開アドレスをad
drとしてステップ740に戻る(ステップ780)。
【0026】もし、この現在フレームがJITedフレ
ーム列の最後のフレームであると判断された場合には、
トレーサ60は、次のJITedフレーム列が存在する
か否かで判断する(ステップ790)。これはJITe
dラストフレーム・レコード(のリスト)70の次のレ
コードが存在するかで判断できる。もし、次のJITe
dラストフレーム・レコードが存在しない場合には、処
理を終了する(ステップ800)。一方、次のJITe
dラストフレーム・レコードが存在する場合には、次の
JITedラストフレーム・レコードについてステップ
730を実行する。そして、トレーサ60はステップ7
40以降の処理を実施する。
【0027】以上の説明ではSPの初期フレームサイズ
からの変化量と初期フレームサイズの対を記録する例を
示したが、場合によっては変化後のSPが指しているス
タックフレームのサイズ自身を記録するようにしてもよ
い。この際には、初期フレームサイズを記録する必要は
ない。
【0028】なお、図6及び図7の処理の途中で取得さ
れる又は計算されるアドレスは記憶装置(例えばメイン
メモリ)に記憶される。
【0029】
【発明の効果】本発明によれば、ベースポインタを省略
する最適化を行っても、フレームトレースを行なうこと
ができる。従って、Javaの言語仕様を変更すること
なく、Javaのコンパイルコードの品質を大きく向上
させることができる。一方、JITedコード破棄メカ
ニズムが使用される環境では、効率的なアクティブメソ
ッド検索が可能になる。
【図面の簡単な説明】
【図1】 サブルーチンAがサブルーチンBを、サブル
ーチンBがサブルーチンCを呼び出したときのスタック
を示す線図である。
【図2】 JITedコードとそれ以外のコードのフレ
ームが混在するスレッドスタックを示す線図である。
【図3】 本発明によるスタックトレース方法の動作を
説明する線図である。
【図4】 ある時点でのスレッドスタックの一般的な状
態を示す線図である。
【図5】 本発明における装置構成の一例を示す図であ
る。
【図6】 図3および図5に示すJITコンパイラがコ
ンパイル時に行う動作を説明するフローチャートであ
る。
【図7】 図3および図5に示すトレーサがトレース時
に行う動作を説明するフローチャートである。
【符号の説明】
1 サーバ・コンピュータ 3 ネットワーク 5 クライアント・コンピュータ 10 Javaソースコード 12 Javaコンパイラ 14 バイトコード 52 JavaVM 54 Javaインタプリタ 56 Java JITコンパイラ 58 マシンコード 60 ガベージ・コレクタ 53 OS 55 ハードウエア(CPU及びメモリを含む)
フロントページの続き (72)発明者 小笠原 武史 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 Fターム(参考) 5B033 DE07 FA24 5B042 GA08 HH30 HH32 MC07 5B081 AA09 CC41

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】 メソッドのコンパイル処理と共にスタッ
    クポインタを変化させるコードのアドレスと変化後のス
    タックフレームのサイズに関する情報との対を記憶装置
    に記録し、当該対から構成される変化表をコンパイルさ
    れたメソッドに対応して登録するコンパイル方法。
  2. 【請求項2】 スタックポインタを変化させるコードの
    アドレスと変化後のスタックフレームのサイズに関する
    情報との対から構成される変化表が各メソッドに対応し
    て登録されている場合にスタックのトレースを行なう方
    法であって、 トレースのため一時停止した時の実行コードのアドレス
    とスタックポインタのアドレスを取得し且つ記憶装置に
    格納し、 前記実行コードのアドレスと前記スタックポインタのア
    ドレスと当該実行コードを含むメソッドの前記変化表と
    を用いて、ベースポインタが指すべきベースアドレスを
    計算し且つ記憶装置に格納するスタック・トレース方
    法。
  3. 【請求項3】 スタックポインタを変化させるコードの
    アドレスと変化後のスタックフレームのサイズに関する
    情報との対から構成される変化表が各メソッドに対応し
    て登録されており且つ所定のコンパイラによりコンパイ
    ルされた第1メソッドが前記所定のコンパイラによりコ
    ンパイルされていない第2メソッドを呼び出した時に生
    成される、前記第1メソッドのスタック・フレームを指
    すレコードが記憶されている場合にスタックのトレース
    を行なう方法であって、 前記レコードを参照して前記第1メソッドのスタック・
    フレームのアドレスと前記第1メソッドのスタック・フ
    レームに保持されている実行再開アドレスとを取得し且
    つ記憶装置に格納し、 前記第1メソッドのスタック・フレームのアドレスと前
    記実行再開アドレスと前記第1メソッドの前記変化表と
    を用いて、ベースポインタが指すべきベースアドレスを
    計算し記憶装置に格納するスタック・トレース方法。
  4. 【請求項4】 スタックポインタを変化させるコードの
    アドレスと変化後のスタックフレームのサイズに関する
    情報との対を記憶装置に記録する手段と、当該対から構
    成される変化表をコンパイルされたメソッドに対応して
    登録する手段とを有するコンパイル装置。
  5. 【請求項5】 スタックポインタを変化させるコードの
    アドレスと変化後のスタックフレームのサイズに関する
    情報との対から構成される変化表が各メソッドに対応し
    て登録されている場合に、スタックのトレースを行なう
    装置であって、 トレースのため一時停止した時の実行コードのアドレス
    とスタックポインタのアドレスを取得し且つ記憶装置に
    格納する手段と、 前記実行コードのアドレスと前記スタックポインタのア
    ドレスと当該実行コードを含むメソッドの前記変化表と
    を用いて、ベースポインタが指すべきベースアドレスを
    計算し且つ記憶装置に格納する手段と、 を有するスタック・トレース装置。
  6. 【請求項6】 スタックポインタを変化させるコードの
    アドレスと変化後のスタックフレームのサイズに関する
    情報との対を記憶装置に記録する機能と、当該対から構
    成される変化表をコンパイルされたメソッドに対応して
    登録する機能とを実現するためのコンパイラを記憶した
    記憶媒体。
  7. 【請求項7】 スタックポインタを変化させるコードの
    アドレスと変化後のスタックフレームのサイズに関する
    情報との対から構成される変化表が各メソッドに対応し
    て登録されている場合にスタックのトレースを行なうス
    タック・トレーサであって、 トレースのため一時停止した時の実行コードのアドレス
    とスタックポインタのアドレスを取得し且つ記憶装置に
    格納する機能と、 前記実行コードのアドレスと前記スタックポインタのア
    ドレスと当該実行コードを含むメソッドの前記変化表と
    を用いて、ベースポインタが指すべきベースアドレスを
    計算し且つ記憶装置に格納する機能と、 を実現するためのスタック・トレーサを格納した記憶媒
    体。
JP02194299A 1999-01-29 1999-01-29 コンパイル方法及び装置、並びにスタック・トレース方法及び装置 Expired - Lifetime JP4088379B2 (ja)

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)

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

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

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

Cited By (2)

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