JPH1139169A - コンパイル方法,コンパイラ,例外ハンドラ及びプログラム記憶媒体 - Google Patents

コンパイル方法,コンパイラ,例外ハンドラ及びプログラム記憶媒体

Info

Publication number
JPH1139169A
JPH1139169A JP9194038A JP19403897A JPH1139169A JP H1139169 A JPH1139169 A JP H1139169A JP 9194038 A JP9194038 A JP 9194038A JP 19403897 A JP19403897 A JP 19403897A JP H1139169 A JPH1139169 A JP H1139169A
Authority
JP
Japan
Prior art keywords
exception
program
procedure
processing
basic block
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.)
Pending
Application number
JP9194038A
Other languages
English (en)
Inventor
Ryuji Sakai
隆二 境
Yoichiro Takeuchi
陽一郎 竹内
Masahiro Miura
雅弘 三浦
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP9194038A priority Critical patent/JPH1139169A/ja
Priority to US09/116,220 priority patent/US6113651A/en
Priority to KR1019980028991A priority patent/KR100334743B1/ko
Publication of JPH1139169A publication Critical patent/JPH1139169A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 レジスタの使用効率を低下させずに、かつ例
外ハンドラの処理で生きている変数を破壊することなく
効率的な目的コードを生成させる。 【解決手段】 プログラムのある範囲で例外が発生した
場合に、プログラムの一部として記述された例外処理プ
ログラムに処理の流れを引き渡す引渡処理に対応したコ
ード生成を行い、例外に対する処理を実行可能とするプ
ログラム言語,のコンパイル方法において、例外処理プ
ログラムによる処理以降使用される可能性のある生きて
いる変数を、引渡処理では内容変更されないレジスタに
割り付けるようにオブジェクトを生成するコンパイル方
法である。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明はコンパイル方法,
コンパイラ,例外ハンドラ及びプログラム記憶媒体、更
に詳しくは、コンピュータの例外処理を効果的に扱うこ
とができるプログラミング言語の機械語への翻訳、ある
いはその翻訳されたプログラムの効率的な取扱、につい
てのコンパイル方法,コンパイラ,例外ハンドラ及びプ
ログラム記憶媒体に関するものである。
【0002】
【従来の技術】コンパイラは、コンピュータで使用する
プログラムについて、プログラミング言語で記述された
ソースプログラム(ソースファイル)を機械語に翻訳し
てオブジェクト(オブジェクトファイル)を作成するソ
フトウエアである。
【0003】プログラミング言語には種々あるが、近
年、例外処理をユーザプログラムのレベルでユーザが指
示したように処理できる言語も用いられるようになって
きている。ここで、例外処理は、プログラム実行中に好
ましくない処理が発生した時に、これに対して対処する
処理であり、例えばある変数を0で割ったような場合に
ついての処理である。また、このような例外としては、
使用すべき配列の領域を違反して使用することやヌルポ
インタ(0番地参照),I/Oエラー等が考えられる。
【0004】このように、例外処理を効果的に扱うこと
ができるプログラミング言語では、プログラムの特定の
範囲を指定し、その範囲の中で発生した例外を認識し
て、プログラムの流れをコントロールすることができ
る。具体的には、 という構文でプログラムを書く。このとき、tryで囲
まれた範囲(以下、try節(トライ節)と呼ぶ)文
1.1,文1.2,……,文1.Nで、式2に対応する
例外が発生した場合、対応するcatchで囲まれた部
分(以下、catch節(キャッチ節)と呼ぶ)文2.
1,……へプログラムの流れが移る。すなわち、トライ
節で発生した例外をキャッチ節で処理しているのであ
る。
【0005】このような処理を模式的に示すと図9のよ
うになる。図9はプログラム実行中に例外が発生した時
の処理の流れの例を示す図である。
【0006】まず、プログラム81のトライ節82を実
行中に例外83が発生すると、その処理流れが例外ハン
ドラ84に移る。例外ハンドラ84は、通常の場合複数
あるキャッチ節85(#1,#2,..#n)の何れ
に、発生した例外が該当するかを判断し、対応したキャ
ッチ節85に処理の流れを移す。この例外ハンドラ84
は、例外処理の割り振り用のプログラムであり、OS
(オペレーティングシステム)のカーネルレベルに設け
られている場合もあるが、ここでは、ライブラリ内のオ
ブジェクトとして予め用意され、リンカによってプログ
ラム本体となるオブジェクトにリンクされたものであ
る。
【0007】ここで、キャッチ節#2に例外83を処理
するプログラムが設けられていたとし、処理流れは、例
外ハンドラ84によって、キャッチ節#2に移される。
キャッチ節#2は所定の例外処理を実行し、予め定めら
れた例外処理後の移動先86に処理を移す。
【0008】以上の一連の処理により、例外発生から例
外処理終了、通常処理への復帰までの動作が確保され
る。ところで、プログラムは、メインループから始っ
て、他のオブジェクトや関数を呼び出し、いわば階層的
に処理が行われる,ネスト構造をなしている。
【0009】このような場合に、例外処理がどのように
実行されているを以下に説明する。例えば現在の手続き
が呼び出された関数であり、例外が発生したが対応する
catchがない場合には、現在実行中の手続きから即
リターンし、リターンした場所で例外が発生したものと
して、例外処理を続行する。
【0010】図10は、呼び出し関数中で例外が発生し
た場合の処理を説明するためのプログラム例を示す図で
ある。同図において、FUNC1から呼び出されたFU
NC3の中のトライ節の文1.1で例外が発生したとす
る。このとき、FUNC3内にこの例外に対応するキャ
ッチ節がなければ、処理がFUNC1のFUNC3を呼
び出した直後に一旦戻り、そこからもう一度例外ハンド
ラに行ってFUNC1内に対応する例外処理があるか否
かが調べられる。この場合、上記例外がFUNC1のキ
ャッチ節(式4)に対応するものであれば、文4.1へ
プログラムの流れが移る。
【0011】図11は階層的に関数を呼び出して処理を
実行する場合のネスト構造を例示する図である。例えば
同図のようなネストループを有する場合に、関数94に
て例外95が発生した場合、例外ハンドラ84は関数9
4内にて対応する例外処理を実行するキャッチ節を探す
が、なければ当該関数94を呼び出した関数93の戻り
点96に戻す。関数93では、ここからまた例外ハンド
ラ84に処理を移し、同様な動作が順次繰り返されて、
各関数94,93,92に対応するキャッチ節がなけれ
ば最終的には関数91まで戻る。この過程において、各
戻り点96,97,98から一々例外ハンドラ84に処
理が移行することとなる。
【0012】コンパイラは、ソースファイルをこのよう
な仕組みを正しく動作する機械語に翻訳しなければなら
ない。このためコンパイラは、tryで囲まれている範
囲(文1.1の先頭から文1.Nの最後まで)、例外の
種類(式2,式3,…)、その例外が起きたときに制御
を移す場所(文2.1,文3.1などの先頭)を記述し
たテーブル(以下、例外情報テーブルという)を保持し
ておき、かつ、例外が発生したら、例外ハンドラへ制御
を移すような機械語命令列を生成する。
【0013】例外ハンドラは、この例外情報テーブルを
調べて対応するcatch節へプログラムの流れを変更
する処理を行うものである。なお、例外情報テーブル構
造は、「try節の開始場所」、「try節の終了場
所」、「対応するcatch節の開始場所」、「例外の
種類」からなっている。
【0014】
【発明が解決しようとする課題】上記した一連の例外処
理方法の場合では例外が発生したとき、トライ節の中で
例外が発生する直前までに定義された変数を、キャッチ
節の中やキャッチ節以降の部分で参照することがあるの
で、例外ハンドラの処理では、これらの値を壊さないよ
うにしなければならない。
【0015】これを実現するには、2通りのやり方があ
る。一の方法は、例外ハンドラの先頭で、例外ハンドラ
が使用するすべてのレジスタの値をメモリへ退避し、例
外ハンドラから戻るとき(キャッチ節へ入るとき)に、
退避したレジスタの値をレジスタへ書き戻す方法であ
る。
【0016】他の方法は、プログラムをコンパイルする
ときに、キャッチ節の入り口で生きている変数をレジス
タに割り付けずにメモリへ割り付けるという方法であ
る。ここで、ある時点で変数xが生きているというの
は、それ以降変数xの内容を参照する可能性があること
をいう。このような変数xを生きている変数といい、小
れ以外ものがいわば死んでいる変数である。
【0017】従来、上記何れかの方法に対応してコンパ
イルが行われているわけであるが、まず上記一の方法に
対応してコンパイルした場合には、例外ハンドラの処理
が遅くなるという問題や、対応するキャッチ節が見つか
らずに手続きからリターンするときに、その手続きが壊
したレジスタを元に戻す処理を行うために、手続きが壊
すレジスタの情報を何らかの方法で持っていなければな
らないという問題がある。一方、上記他の方法に対応し
てコンパイルした場合には、例外処理のために、変数を
レジスタに割り付けるのを制限することになり、例外が
起こらない場合の処理さえも実行効率を落としてしまう
という問題がある。
【0018】また、例外処理をユーザプログラムのレベ
ルでユーザが指示したように処理できるプログラム言語
のコンパイラでは、次にような問題点もある。すなわ
ち、例外発生によってプログラムの流れが変わるので、
例外が発生する可能性のある部分の前後で、コンパイル
時の最適化によって命令を並べ変えることがない。並べ
変えると、キャッチ節の入り口で生きている変数の値が
保証できなくなるからである。
【0019】さらに、トライ節の中のプログラムシーケ
ンスのどこで例外が発生するのか、プログラム実行時で
ないと判らないため、プログラムコンパイル時には、例
外が発生する可能性のあるすべてのところで、例外が発
生したか、していないかを一々チェックする必要があ
る。例えば、図11に示した場合のように、手続きから
戻ったときに、その呼び出した手続きの中で例外が発生
していないかをチェックし、例外発生なら、例外情報テ
ーブルと現在の位置を例外ハンドラへ渡す処理を行う命
令列を生成する必要がある。これは、例外が発生しない
ときのプログラム実行時間も増大する原因となる。
【0020】本発明は、このような実情を考慮してなさ
れたもので、その第1の目的は、レジスタの使用効率を
低下させずに、かつ、例外ハンドラの処理で生きている
変数を破壊することなく効率的な目的コードを生成させ
ることが可能なコンパイル方法,コンパイラ及びプログ
ラム記憶媒体を提供することにある。
【0021】第2の目的は、呼び出された手続き内で例
外が発生し、その例外に対応する処理が当該手続き内に
なく、呼び出し先に処理が戻る時でも効率的に例外につ
いての処理を継続することが可能なコンパイル方法,コ
ンパイラ,例外ハンドラ及びプログラム記憶媒体を提供
することにある。
【0022】
【課題を解決するための手段】上記課題を解決するため
に、請求項1に対応する発明は、プログラムのある範囲
で例外が発生した場合に、プログラムの一部として記述
された例外処理プログラムに処理の流れを引き渡す引渡
処理に対応したコード生成を行い、例外に対する処理を
実行可能とするプログラム言語,のコンパイル方法にお
いて、例外処理プログラムによる処理以降使用される可
能性のある生きている変数を、引渡処理では内容変更さ
れないレジスタに割り付けるようにオブジェクトを生成
するコンパイル方法である。
【0023】本発明は、このような手段を設けたので、
レジスタの使用効率を低下させずに、かつ、例外ハンド
ラ等の引渡処理の入口で生きている変数を破壊すること
なく効率的な目的コードを生成させることができる。
【0024】次に、請求項2に対応する発明は、請求項
1に対応する発明において、内容変更されないレジスタ
として、引渡処理がリンケージ規約で規定された手続き
に従えばその内容が壊されないレジスタを用いるコンパ
イル方法である。
【0025】本発明は、このような手段を設けたので、
リンケージ規約に基づき、請求項1に対応する発明と同
様な作用効果を奏することができる。また、請求項3に
対応する発明は、請求項1又は2に対応する発明におい
て、プログラムを分岐処理を単位に基本ブロックに分割
するとともに、各基本ブロック内で定義される定義変数
と、この定義変数を除く各基本ブロック内において使用
される使用変数を抽出し、各基本ブロックにおける定義
変数及び使用変数に基づき、データフロー解析を行うこ
とで各基本ブロックの入り口において生きている変数を
調べ、この各基本ブロックの入り口において生きている
変数から例外処理プログラムによる処理以降生きている
変数を決定するコンパイル方法である。
【0026】本発明は、このような手段を設けたので、
データフロー解析により確実に生きている変数を調べる
ことで、より一層確実に、請求項1又は2に対応する発
明と同様な作用効果を奏することができる。
【0027】さらに、請求項4に対応する発明は、請求
項3に対応する発明において、例外処理プログラムの入
口で生きている変数を定義している基本ブロック内の場
所の直前及び直後で、その基本ブロックをさらに分割す
ることにより、通常コンパイラが行う命令スケジュール
等の最適化を可能とするコンパイル方法である。
【0028】本発明は、このような手段を設けたので、
命令スケジュール等の最適化を行うような場合であって
も、請求項3に対応する発明と同様な作用効果を奏する
ことができる。
【0029】さらにまた、請求項5に対応する発明は、
請求項1〜4に対応する発明において、プログラムのあ
る範囲はトライ節とし、例外処理プログラムは少なくと
も1つのキャッチ節からなり、例外が発生してから例外
処理プログラムに処理の流れを引き渡す引渡処理は、プ
ログラム外に設けられる例外ハンドラであるコンパイル
方法である。
【0030】本発明は、このような手段を設けたので、
トライ節(try節)やキャッチ節(catch節)を
用いた場合でも、請求項1〜4に対応する発明と同様な
作用効果を奏することができる。
【0031】一方、請求項6に対応する発明は、プログ
ラムのある範囲で例外が発生した場合に、プログラムの
一部として記述された例外処理プログラムに処理の流れ
を引き渡す引渡処理に対応したコード生成を行い、例外
に対する処理を実行可能とするプログラム言語,のコン
パイル方法において、引渡処理が処理の流れを変更する
際に参照する,例外処理プログラムに関する情報を保持
した例外情報テーブルを生成し、各手続きに対する例外
情報テーブルの相対位置をその手続きの入口からの固定
オフセットの位置に配置し、新たな手続き呼び出し時
に、手続き呼び出し側により呼び出される手続きの入口
アドレスを、当該呼び出される手続きがアクセス可能な
領域に格納することにより、各手続きの例外情報テーブ
ルを一定の規則で参照することが可能なオブジェクトを
生成するコンパイル方法である。
【0032】本発明は、このような手段を設けたので、
例えば呼び出された手続き内で例外が発生し、その例外
に対応する処理が当該手続き内になく、呼び出し先に処
理が戻るような場合にも、一定の規則で例外情報テーブ
ルを引くことができ効率的な処理を実行することができ
る。
【0033】次に、請求項7に対応する発明は、請求項
6に対応する発明において、手続きからのリターン処理
のアドレスを一定の規則で引くことを可能とすること
で、引渡処理が例外に対応する例外処理プログラムを発
見できないときには、手続きからのリターン処理へジャ
ンプして、当該手続きでセーブしたレジスタを復元可能
なオブジェクトを生成するコンパイル方法である。
【0034】本発明は、このような手段を設けたので、
例えば呼び出された手続き内で例外が発生し、その例外
に対応する処理が当該手続き内になく、呼び出し先に処
理が戻るような場合にも、一定の規則で呼び出し先のレ
ジスタ復元を行い例外情報テーブルを引くことができ、
効率的な処理を実行することができる。
【0035】また、請求項8に対応する発明は、請求項
7記載のコンパイル方法で生成されたオブジェクトで例
外が発生した時に用いられる,例外が発生してから例外
処理プログラムに処理の流れを引き渡す引渡処理である
例外ハンドラにおいて、例外に対応する例外処理プログ
ラムを発見できないときには、スタックフレーム上の手
続きからの返りアドレスを自己の処理開始アドレスに置
き換えて、手続きからのリターン処理にジャンプするこ
とによって、手続き呼び出し側の手続きへ戻ると同時に
手続き呼び出し側の手続きについての引渡処理を開始す
ることを特徴とする例外ハンドラである。
【0036】本発明は、このような手段を設けたので、
例えば呼び出された手続き内で例外が発生し、その例外
に対応する処理が当該手続き内になく、呼び出し先に処
理が戻るような場合にも、例外ハンドラが効率的に例外
についての処理を継続することができる。
【0037】さらに、請求項9に対応する発明は、プロ
グラムのある範囲で例外が発生した場合に、プログラム
の一部として記述された例外処理プログラムに処理の流
れを引き渡す引渡処理に対応したコード生成を行い、例
外に対する処理を実行可能とするプログラム言語,に対
応したコンパイラにおいて、例外処理プログラムによる
処理以降使用される可能性のある生きている変数を、引
渡処理では内容変更されないレジスタに割り付けるよう
にオブジェクトを生成するコンパイラである。
【0038】本発明は、このような手段を設けたので、
請求項1に対応する発明と同様な作用効果を奏すること
ができる。さらにまた、請求項10に対応する発明は、
プログラムのある範囲で例外が発生した場合に、プログ
ラムの一部として記述された例外処理プログラムに処理
の流れを引き渡す引渡処理に対応したコード生成を行
い、例外に対する処理を実行可能とするプログラム言
語,に対応したコンパイラにおいて、引渡処理が処理の
流れを変更する際に参照する,例外処理プログラムに関
する情報を保持した例外情報テーブルを生成し、プログ
ラムにおける各手続きに対する例外情報テーブルの相対
位置をその手続きの入口からの固定オフセットの位置に
配置し、新たな手続き呼び出し時に、手続き呼び出し側
により呼び出される手続きの入口アドレスを、当該呼び
出される手続きがアクセス可能な領域に格納することに
より、各手続きの例外情報テーブルを一定の規則で参照
することが可能なオブジェクトを生成するコンパイラで
ある。
【0039】本発明は、このような手段を設けたので、
請求項6に対応する発明と同様な作用効果を奏すること
ができる。一方、請求項11に対応する発明は、プログ
ラムのある範囲で例外が発生した場合に、プログラムの
一部として記述された例外処理プログラムに処理の流れ
を引き渡す引渡処理に対応したコード生成を行い、例外
に対する処理を実行可能とするプログラム言語,をコン
パイルするコンパイルプログラムを記憶したコンピュー
タ読取り可能なプログラム記憶媒体にあって、コンパイ
ルプログラムは、コンピュータに、例外処理プログラム
による処理以降使用される可能性のある生きている変数
を、引渡処理では内容変更されないレジスタに割り付け
る手順を実行させるプログラム記憶媒体である。
【0040】本発明は、このような手段を設けたので、
請求項1に対応する発明と同様な作用効果を奏すること
ができる。また、請求項12に対応する発明は、プログ
ラムのある範囲で例外が発生した場合に、プログラムの
一部として記述された例外処理プログラムに処理の流れ
を引き渡す引渡処理に対応したコード生成を行い、例外
に対する処理を実行可能とするプログラム言語,をコン
パイルするコンパイルプログラムを記憶したコンピュー
タ読取り可能なプログラム記憶媒体にあって、コンパイ
ルプログラムは、コンピュータに、プログラムを分岐処
理を単位に基本ブロックに分割するとともに、各基本ブ
ロック内で定義される定義変数と、この定義変数を除く
各基本ブロック内において使用される使用変数を抽出す
る手順と、各基本ブロックにおける定義変数及び使用変
数に基づき、データフロー解析を行うことで各基本ブロ
ックの入り口において生きている変数を調べる手順と、
この各基本ブロックの入り口において生きている変数か
ら例外処理プログラムによる処理以降生きている変数を
決定する手順と、例外処理プログラムによる処理以降生
きている変数を、引渡処理がリンケージ規約で規定され
た手続きに従えばその内容が壊されないレジスタに割り
付ける手順とを実行させるプログラム記憶媒体である。
【0041】本発明は、このような手段を設けたので、
請求項3に対応する発明と同様な作用効果を奏すること
ができる。さらに、請求項13に対応する発明は、プロ
グラムのある範囲で例外が発生した場合に、プログラム
の一部として記述された例外処理プログラムに処理の流
れを引き渡す引渡処理に対応したコード生成を行い、例
外に対する処理を実行可能とするプログラム言語,をコ
ンパイルするコンパイルプログラムを記憶したコンピュ
ータ読取り可能なプログラム記憶媒体にあって、コンパ
イルプログラムは、コンピュータに、引渡処理が処理の
流れを変更する際に参照する,例外処理プログラムに関
する情報を保持した例外情報テーブルを生成する手順
と、プログラムにおける各手続きに対する例外情報テー
ブルの相対位置をその手続きの入口からの固定オフセッ
トの位置に配置する手順と、新たな手続き呼び出し時
に、手続き呼び出し側により呼び出される手続きの入口
アドレスを、当該呼び出される手続きがアクセス可能な
領域に格納する処理を生成する手順と、手続きからのリ
ターン処理のアドレスを一定の規則で引くことを可能と
することで、引渡処理が例外に対応する例外処理プログ
ラムを発見できないときには、手続きからのリターン処
理へジャンプして、当該手続きでセーブしたレジスタを
復元する処理を生成する手順とを実行させるプログラム
記憶媒体である。本発明は、このような手段を設けたの
で、請求項7に対応する発明と同様な作用効果を奏する
ことができる。
【0042】
【発明の実施の形態】以下、本発明の実施の形態につい
て説明する。図1は本発明の実施の形態に係るコンパイ
ラ等によりソールファイルが処理されるシステムを例示
したブロック図である。
【0043】このシステムは、例えば磁気ディスク等の
記録媒体に記録されたプログラムを読み込み、このプロ
グラムによって動作が制御されるコンピュータによって
実現される。
【0044】このシステムにおいて、まず、ソースファ
イル1がコンパイラ2により機械語に翻訳されてオブジ
ェクトファイル3が作成される。次に、リンカ4によっ
てオブジェクトファイル3と例外ハンドラ5を含むライ
ブラリ6がリンクされ、実行ロードモジュール7が作成
される。
【0045】ここで、ソースファイル1は、例外処理を
ユーザプログラムのレベルでユーザが指示したように処
理できるプログラム言語で記述されたものであり、コン
パイラ2は、当該プログラム言語のコンパイルに対応し
たものである。
【0046】次に、コンパイラの処理手順について図2
〜図6を用いて説明する。図2は本実施形態のコンパイ
ラの処理を示す流れ図である。コンパイラ2、まず、通
常の分岐処理に応じ、分岐の直後と、分岐のターゲット
で、プログラムシーケンスを基本ブロックに分割し、制
御フローグラフを作成する(ST1)。
【0047】図3はプログラムシーケンスが基本ブロッ
クに分割された様子を例示する説明図である。図3
(a)は、ソースプログラムのプログラムシーケンスを
示している。ここで、例えばブロックAにif文等の分
岐命令があれば、それ以降の処理は複数に分岐し得るこ
ととなる。これに対応するのが同図中ブロックB及びC
であり、各ブロックB及びCからの処理がブロックDに
引き継がれるものとする。
【0048】この場合、ステップST1の処理によって
各ブロックA,B,C及びDは、図3(b)に示すよう
に、基本ブロック10a,10b,10c及び10d
(以下、基本ブロック10、あるいは基本ブロック10
i,10j,10l,10m,...,10n等とも称
する)に分割される。このような基本ブロック10を相
互の関係で接続し示したものが、図3(b)に例示する
制御フローグラフである。
【0049】次に、各基本ブロック10について、各基
本ブロック10が参照する変数USEと定義する変数D
EFの集合を求める。これをもとに(1)式に示すデー
タフロー方程式を解く(ST2)。
【0050】
【数1】
【0051】ここで、USEi は基本ブロック10iが
参照する変数、DEFi は、基本ブロック10iが定義
する変数、next(i) は、基本ブロック10iから制御が
移る可能性のある基本ブロック10、各INi の初期値
は、空集合である。これらについて、図4及び図5に示
す例を用いて説明する。
【0052】図4は変数USEと定義する変数DEFに
ついて例示する図である。また、図5は集合INi につ
いて例示する図である。図4に示すように、ある基本ブ
ロック10iで定義される変数Xは、変数DEFi であ
る。また、同図において、変数A,Bは、基本ブロック
10i内で使用されているが、定義されているわけでは
ないので、参照する変数USEi である。同様に、変数
Zは変数DEFi である。また、変数X,Yは、変数U
SEi であるが、このうち変数Xは基本ブロック10i
で定義されているので、結局は、変数DEFi である。
【0053】したがって、図4に示す例では、変数DE
Fi は{X,Z,.,.}、変数USEi は{A,B,
Y,...}となる。図5は集合INi について例示す
る図である。
【0054】同図に示すように、この場合のnext(i) ,
すなわち基本ブロック10iの制御が移る可能性のある
基本ブロックは基本ブロック10l及び基本ブロック1
0mである。したがって、この場合の集合INi は、同
図に示すようにUSEi と(INl −DEFi )と(I
Nm −DEFi )の和集合となる。
【0055】ここで、仮にINl とINm が各基本ブロ
ック10l及び10mで使用される変数USEと一致し
ているものすると、上記和集合は、次の基本ブロックで
使用される変数USEから自基本ブロックで定義される
変数DEFを差し引き、さらにこれと自基本ブロックの
使用変数USEとの和集合を取ることを意味する。した
がって、この場合、集合INi は自基本ブロック及び次
基本ブロックで参照される可能性がある変数を意味す
る。また、集合INi からは自基本ブロックの定義変数
DEFが差し引かれているから、集合INi は、基本ブ
ロック10iの入口で生きている変数を意味することと
なる。
【0056】この場合は、基本ブロック10iと基本ブ
ロック10l及び10mとの関係で説明した。しかし、
(1)式の示すデータフロー方程式は、すべての基本ブ
ロック10についての連立方程式となっているので、こ
れを解くことにより、すべての基本ブロック10を考慮
した各基本ブロック10の入口で生きている変数が求ま
ることとなる。
【0057】このように、各基本ブロック10の入口で
生きている変数がわかれば、各キャッチ節の入口で生き
ている変数も解析されたこととなる。つまり、ある基本
ブロック10から例外ハンドラに処理が移行して、その
後キャッチ節に処理が移行するため、ある基本ブロック
10の入口で生きている変数は、キャッチ節の入口でも
生きていなければならないからである。
【0058】次に、以下の条件を満たす時にはさらに基
本ブロック10の分割を行う。具体的には、トライ節の
中で、キャッチ節の入口で生きている変数を定義してい
るものがあれば、その直前及び直後で基本ブロックを3
つに分割する(ST3)。
【0059】図6はキャッチ節の入口で生きている変数
を定義しているトライ節の基本ブロックの直前直後で基
本ブロックを分割する様子を示す図である。同図に示す
ように基本ブロック10iに変数Xが定義されていると
すると、その前後で基本ブロック10i1,10i2及
び10i3に分割される。この場合基本ブロック10i
2は、変数Xを定義する部分である。このような分割が
されるのは、コンパイラ機能としての命令スケジュール
により実行の効率化を図るべく各命令の実行順序が入れ
替えられた場合に、問題が生じ得るからである。
【0060】例えば図6の基本ブロック10i1の部分
で例外11が発生した場合(図6(b)、図6
(c))、仮に命令スケジュールにより基本ブロック1
0i2の部分が例外11の発生位置より前の位置に配置
されており、かつ、変数Xが対応するキャッチ節で生き
ていれば、キャッチ節では本来のソースプログラムで意
図したものと異なる処理を行うこととなる(図6
(c))。
【0061】また、例えば基本ブロック10i3の部分
で例外12が発生した場合、仮に命令スケジュールによ
り基本ブロック10i2の部分が例外12が発生位置よ
り後に配置されており、かつ、変数Xが対応するキャッ
チ節で生きている場合も同様である(図6(c))。
【0062】したがって、上記したように、かかる場合
には基本ブロック10iを前後で分割し、後述するよう
に、基本ブロック10単位で命令スケジュールの最適化
を行うようにしている。なお、コンパイルの方法によっ
ては、命令スケジュールを行っても命令の実行順序が保
証されるもののあり、かかる方法を用いる場合には、本
ステップST3は不要である。
【0063】次に、コンパイラ2は、この状態で、すな
わち基本ブロック10を最適化の単位として、一般的な
最適化を行う(ST4)。その内容としては、共通部分
式削除、定数伝播、強度軽減、ループ不変式移動、命令
スケジュール等である。
【0064】次に、コンパイラ5は、キャッチ節の入口
で生きている変数が手続き呼び出しで壊されるレジスタ
に割付かないように、レジスタを割り付ける(ST
5)。この割り付けは、具体的には以下のようにして行
われる。
【0065】RISCタイプのMPUで一般的な規約と
してリンケージ規約というものがある。これは、関数呼
び出しの前後で値が変わらないレジスタ群#1と、値が
変わる(すなわちその内容が破壊される)かもしれない
レジスタ群#2をわけて使う規約である。このような規
約を用いる場合には、ある関数を呼び出す際、その時点
で生きている変数を上記レジスタ群#1に割り付けてお
き、死んでいる変数を上記レジスタ群#1に割り付ける
ようにしておけば、関数の呼び出し前後で、内容が破壊
されてはいけない変数についてその値が保証するわけで
ある。
【0066】本ステップST5におけるレジスタ割り付
けでは、各変数のレジスタ割り付けに関し、例外ハンド
ラ5への処理移行についてこの考え方を応用する。すな
わち上記各ステップの処理により、キャッチ節の入口で
の生きている変数はわかっているから、例外ハンドラ5
を一種の関数と見立てて、ある例外ハンドラ5への処理
移行の時点において、キャッチ節の入口で生きている変
数を上記レジスタ群#1に割り付けておき、死んでいる
変数を上記レジスタ群#1に割り付けるようにするので
ある。
【0067】このように例外ハンドラ5への処理移行に
対しても、リンケージ規約で規定された手続きにより内
容が破壊されないレジスタにキャッチ節の入口で生きて
いる変数を割り付けることで、各変数を不必要にメモリ
に割り付けることなく、かつ例外ハンドラ5での処理後
に生きている変数の内容を保証するものである。
【0068】なお、この機能を十全に発揮するには、例
外ハンドラ5は、できるだけ上記レジスタ群#2を使用
するようにプログラムされていなければならない。最後
に、コンパイラ2は、例外情報テーブルや、手続きから
のリターン処理が手続きの入口のアドレスから探索でき
るようなコードを生成する(ST6)。
【0069】具体的には、手続き呼び出し側では、一次
レジスタrtに、呼び出す手続きの入口アドレスを格納
し、呼び出された側では、手続きでセーブされる固定の
レジスタreにrtの値を格納し、呼び出された手続き
が、入口アドレスを判るようにする。また、手続きの入
口の前に、例外情報テーブルへのオフセットなどの各種
情報を配置し、手続きからのリターン処理の前に、例外
情報テーブルを配置する。
【0070】図7は本実施形態のコンパイラにより作成
されたオブジェクト構成例を示す説明図である。すなわ
ち、図7に示されるようなオブジェクトが、上記各ステ
ップST1〜ST6を経て作成されることとなる。
【0071】次に、このようにコード生成されたオブジ
ェクトを取り扱う例外ハンドラの動作について説明す
る。図8は本実施形態の例外ハンドラの処理を示すプロ
グラムを含む図である。
【0072】例外を発生した処理は、例外の種類Kと例
外の起きた場所Aを引数にして、例外ハンドラ5の入口
へ分岐する。例外ハンドラ5は、レジスタreの値から
例外情報テーブルや、例外が起きた場所のオフセット
A’を求め(処理(a))、例外情報テーブルの中か
ら、例外に対応するものを探す(処理(b))。
【0073】見つかった場合は、対応するキャッチ節の
開始場所を求めてそこへ分岐する(処理(c))。見つ
からなかった場合は、手続きからの返りアドレスをスタ
ックフレームから求めてAへ代入し、返りアドレスを例
外ハンドラに書き換えて、手続きからのリターン処理へ
分岐する(処理(d))。
【0074】なお、処理(d)において、jmp T+
4とすることで、手続きからのリターン処理へ分岐でき
るのは、図7に示すように例外情報テーブルが手続きか
らのリターン処理の直前に配置されているからである。
また、この場合、例外情報テーブルの構成からして最終
の例外情報テーブルアドレスのT+4番地がリターン処
理のアドレスになるからである。
【0075】リターン処理へ分岐すると、レジスタの復
元を行い、例外ハンドラ5から例外が発生した処理(関
数等)を呼び出した処理(関数等)へリターンする。し
かし、この場合、上記処理(d)により、スタックフレ
ーム上の手続きからの返りアドレスが、例外ハンドラの
入口アドレスに書き替えられているので、そのまま例外
ハンドラへ制御が移り、例外処理が続行される。なお、
このとき、レジスタreも復元されているので、正しく
例外情報テーブルを引くことができ、あたかも、例外が
発生した処理を呼び出した処理のリターン場所から例外
ハンドラ5に処理が移ったように動作する。
【0076】したがって、図11で示したように、プロ
グラムがネスト構造を有する場合に、一々呼び出し元の
関数等に一旦戻ってから再び例外ハンドラ5に処理が移
るのではなく、対応するキャッチ節を発見するまで例外
ハンドラ5での処理が継続される。この場合に、その各
レジスタ情報(レジスタre等)のみが呼び出し元のも
のに書き替えられ、呼び出し元に対応して正しく例外情
報テーブルを引いていくこととなる。
【0077】また、コンパイラ2は、この例外ハンドラ
5の動作に対応して、命令列を生成することとなる。つ
まり図11の場合における従来技術で示した命令列,す
なわち手続きから戻ったときに、その呼び出した手続き
の中で例外が発生していないかをチェックし、例外発生
なら、例外情報テーブルと現在の位置を例外ハンドラへ
渡す処理を行う命令列を一々生成する必要はない。
【0078】上述したように、本発明の実施の形態に係
るコンパイル方法及びコンパイラは、try−catc
hのような例外を効果的に扱うことが出来る構文をもつ
プログラミング言語のコンパイルにあって、try−c
atch間で生きている変数を、例外ハンドラがリンケ
ージ規約で規定された手続きに従えばその内容が壊され
ないレジスタに割り付けるようにオブジェクトを生成す
るようにしたので、レジスタの使用効率を低下させず
に、かつ、例外ハンドラの処理で生きている変数を破壊
することなく効率的な目的コード(オブジェクトコー
ド)を生成させることができる。
【0079】これは、RISCプロセッサのようにレジ
スタを多く実装したコンピュータに対して、特に有効で
ある。また、レジスタのセーブ情報がなくとも、例外処
理による手続きの巻き戻し処理を正しく行うことが出来
る。
【0080】上述したように、本発明の実施の形態に係
るコンパイル方法,コンパイラ及び例外ハンドラは、t
ry−catch間で生きている変数をレジスタに割り
付け、かつ、レジスタセーブ情報を使わない場合でも、
スタックフレーム上の返りアドレスを書き換えるように
したので、手続きから戻ったところで例外をチェックす
る必要がなくなり、例外が発生しない場合のノーマルパ
スでの実行効率の低下を抑えることができる。
【0081】したがって、呼び出された手続き内で例外
が発生し、その例外に対応する処理が当該手続き内にな
く、呼び出し先に処理が戻るような場合でも、効率的に
例外についての処理を継続することができる。
【0082】なお、本発明は、上記各実施の形態に限定
されるものでなく、その要旨を逸脱しない範囲で種々に
変形することが可能である。また、実施形態に記載した
手法は、計算機に実行させることができるプログラムと
して、例えば磁気ディスク(フロッピーディスク、ハー
ドディスク等)、光ディスク(CD−ROM、DVD
等)、半導体メモリ等の記憶媒体に格納し、また通信媒
体により伝送して頒布することもできる。本装置を実現
する計算機は、記憶媒体に記録されたプログラムを読み
込み、このプログラムによって動作が制御されることに
より上述した処理を実行する。
【0083】
【発明の効果】以上詳記したように本発明によれば、レ
ジスタの使用効率を低下させずに、かつ、例外ハンドラ
の処理で生きている変数を破壊することなく効率的な目
的コードを生成させることができるコンパイル方法,コ
ンパイラ及びプログラム記憶媒体を提供することができ
る。
【0084】また、本発明によれば、呼び出された手続
き内で例外が発生し、その例外に対応する処理が当該手
続き内になく、呼び出し先に処理が戻る時でも効率的に
例外についての処理を継続することが可能なコンパイル
方法,コンパイラ,例外ハンドラ及びプログラム記憶媒
体を提供することができる。
【図面の簡単な説明】
【図1】本発明の実施の形態に係るコンパイラ等により
ソールファイルが処理されるシステムを例示したブロッ
ク図。
【図2】同実施形態のコンパイラの処理を示す流れ図。
【図3】同プログラムシーケンスが基本ブロックに分割
された様子を例示する説明図。
【図4】変数USEと定義する変数DEFについて例示
する図。
【図5】集合INi について例示する図。
【図6】キャッチ節の入口で生きている変数を定義して
いるトライ節の基本ブロックの直前直後で基本ブロック
を分割する様子を示す図。
【図7】同実施形態のコンパイラにより作成されたオブ
ジェクト構成例を示す説明図。
【図8】同実施形態の例外ハンドラの処理を示すプログ
ラムを含む図。
【図9】プログラム実行中に例外が発生した時の処理の
流れの例を示す図。
【図10】呼び出し関数中で例外が発生した場合の処理
を説明するためのプログラム例を示す図。
【図11】階層的に関数を呼び出して処理を実行する場
合のネスト構造を例示する図。
【符号の説明】
1…ソースファイル 2…コンパイラ 3…オブジェクトファイル 4…リンカ 5…例外ハンドラ 6…ライブラリ 7…実行ロードモジュール 10,10a,10b,10c,10d,10i,10
j,10l,10m…基本ブロック

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 プログラムのある範囲で例外が発生した
    場合に、前記プログラムの一部として記述された例外処
    理プログラムに処理の流れを引き渡す引渡処理に対応し
    たコード生成を行い、前記例外に対する処理を実行可能
    とするプログラム言語,のコンパイル方法において、 前記例外処理プログラムによる処理以降使用される可能
    性のある生きている変数を、前記引渡処理では内容変更
    されないレジスタに割り付けるようにオブジェクトを生
    成することを特徴とするコンパイル方法。
  2. 【請求項2】 前記内容変更されないレジスタとして、
    前記引渡処理がリンケージ規約で規定された手続きに従
    えばその内容が壊されないレジスタを用いることを特徴
    とする請求項1記載のコンパイル方法。
  3. 【請求項3】 前記プログラムを分岐処理を単位に基本
    ブロックに分割するとともに、各基本ブロック内で定義
    される定義変数と、この定義変数を除く各基本ブロック
    内において使用される使用変数を抽出し、 各基本ブロックにおける定義変数及び使用変数に基づ
    き、データフロー解析を行うことで各基本ブロックの入
    り口において生きている変数を調べ、 この各基本ブロックの入り口において生きている変数か
    ら前記例外処理プログラムによる処理以降生きている変
    数を決定することを特徴とする請求項1又は2記載のコ
    ンパイル方法。
  4. 【請求項4】 前記例外処理プログラムの入口で生きて
    いる変数を定義している前記基本ブロック内の場所の直
    前及び直後で、その基本ブロックをさらに分割すること
    により、通常コンパイラが行う命令スケジュール等の最
    適化を可能とする請求項3記載のコンパイル方法。
  5. 【請求項5】 前記プログラムのある範囲はトライ節と
    し、前記例外処理プログラムは少なくとも1つのキャッ
    チ節からなり、 前記例外が発生してから前記例外処理プログラムに処理
    の流れを引き渡す引渡処理は、前記プログラム外に設け
    られる例外ハンドラであることを特徴とする請求項1乃
    至4のうち何れか1項記載のコンパイル方法。
  6. 【請求項6】 プログラムのある範囲で例外が発生した
    場合に、前記プログラムの一部として記述された例外処
    理プログラムに処理の流れを引き渡す引渡処理に対応し
    たコード生成を行い、前記例外に対する処理を実行可能
    とするプログラム言語,のコンパイル方法において、 前記引渡処理が処理の流れを変更する際に参照する,前
    記例外処理プログラムに関する情報を保持した例外情報
    テーブルを生成し、 各手続きに対する前記例外情報テーブルの相対位置をそ
    の手続きの入口からの固定オフセットの位置に配置し、 新たな手続き呼び出し時に、手続き呼び出し側により呼
    び出される手続きの入口アドレスを、当該呼び出される
    手続きがアクセス可能な領域に格納することにより、各
    手続きの例外情報テーブルを一定の規則で参照すること
    が可能なオブジェクトを生成することを特徴とするコン
    パイル方法。
  7. 【請求項7】 前記手続きからのリターン処理のアドレ
    スを一定の規則で引くことを可能とすることで、前記引
    渡処理が前記例外に対応する例外処理プログラムを発見
    できないときには、手続きからのリターン処理へジャン
    プして、当該手続きでセーブしたレジスタを復元可能な
    オブジェクトを生成することを特徴とする請求項6記載
    のコンパイル方法。
  8. 【請求項8】 前記請求項7記載のコンパイル方法で生
    成されたオブジェクトで例外が発生した時に用いられ
    る,前記例外が発生してから前記例外処理プログラムに
    処理の流れを引き渡す引渡処理である例外ハンドラにお
    いて、 前記例外に対応する例外処理プログラムを発見できない
    ときには、スタックフレーム上の手続きからの返りアド
    レスを自己の処理開始アドレスに置き換えて、前記手続
    きからのリターン処理にジャンプすることによって、手
    続き呼び出し側の手続きへ戻ると同時に前記手続き呼び
    出し側の手続きについての前記引渡処理を開始すること
    を特徴とする例外ハンドラ。
  9. 【請求項9】 プログラムのある範囲で例外が発生した
    場合に、前記プログラムの一部として記述された例外処
    理プログラムに処理の流れを引き渡す引渡処理に対応し
    たコード生成を行い、前記例外に対する処理を実行可能
    とするプログラム言語,に対応したコンパイラにおい
    て、 前記例外処理プログラムによる処理以降使用される可能
    性のある生きている変数を、前記引渡処理では内容変更
    されないレジスタに割り付けるようにオブジェクトを生
    成することを特徴とするコンパイラ。
  10. 【請求項10】 プログラムのある範囲で例外が発生し
    た場合に、前記プログラムの一部として記述された例外
    処理プログラムに処理の流れを引き渡す引渡処理に対応
    したコード生成を行い、前記例外に対する処理を実行可
    能とするプログラム言語,に対応したコンパイラにおい
    て、 前記引渡処理が処理の流れを変更する際に参照する,前
    記例外処理プログラムに関する情報を保持した例外情報
    テーブルを生成し、 前記プログラムにおける各手続きに対する前記例外情報
    テーブルの相対位置をその手続きの入口からの固定オフ
    セットの位置に配置し、 新たな手続き呼び出し時に、手続き呼び出し側により呼
    び出される手続きの入口アドレスを、当該呼び出される
    手続きがアクセス可能な領域に格納することにより、各
    手続きの例外情報テーブルを一定の規則で参照すること
    が可能なオブジェクトを生成することを特徴とするコン
    パイラ。
  11. 【請求項11】 プログラムのある範囲で例外が発生し
    た場合に、前記プログラムの一部として記述された例外
    処理プログラムに処理の流れを引き渡す引渡処理に対応
    したコード生成を行い、前記例外に対する処理を実行可
    能とするプログラム言語,をコンパイルするコンパイル
    プログラムを記憶したコンピュータ読取り可能なプログ
    ラム記憶媒体にあって、 前記コンパイルプログラムは、コンピュータに、前記例
    外処理プログラムによる処理以降使用される可能性のあ
    る生きている変数を、前記引渡処理では内容変更されな
    いレジスタに割り付ける手順を実行させることを特徴と
    するプログラム記憶媒体。
  12. 【請求項12】 プログラムのある範囲で例外が発生し
    た場合に、前記プログラムの一部として記述された例外
    処理プログラムに処理の流れを引き渡す引渡処理に対応
    したコード生成を行い、前記例外に対する処理を実行可
    能とするプログラム言語,をコンパイルするコンパイル
    プログラムを記憶したコンピュータ読取り可能なプログ
    ラム記憶媒体にあって、 前記コンパイルプログラムは、コンピュータに、 前記プログラムを分岐処理を単位に基本ブロックに分割
    するとともに、各基本ブロック内で定義される定義変数
    と、この定義変数を除く各基本ブロック内において使用
    される使用変数を抽出する手順と、 各基本ブロックにおける定義変数及び使用変数に基づ
    き、データフロー解析を行うことで各基本ブロックの入
    り口において生きている変数を調べる手順と、 この各基本ブロックの入り口において生きている変数か
    ら前記例外処理プログラムによる処理以降生きている変
    数を決定する手順と、 前記例外処理プログラムによる処理以降生きている変数
    を、前記引渡処理がリンケージ規約で規定された手続き
    に従えばその内容が壊されないレジスタに割り付ける手
    順とを実行させることを特徴とするプログラム記憶媒
    体。
  13. 【請求項13】 プログラムのある範囲で例外が発生し
    た場合に、前記プログラムの一部として記述された例外
    処理プログラムに処理の流れを引き渡す引渡処理に対応
    したコード生成を行い、前記例外に対する処理を実行可
    能とするプログラム言語,をコンパイルするコンパイル
    プログラムを記憶したコンピュータ読取り可能なプログ
    ラム記憶媒体にあって、 前記コンパイルプログラムは、コンピュータに、 前記引渡処理が処理の流れを変更する際に参照する,前
    記例外処理プログラムに関する情報を保持した例外情報
    テーブルを生成する手順と、 前記プログラムにおける各手続きに対する前記例外情報
    テーブルの相対位置をその手続きの入口からの固定オフ
    セットの位置に配置する手順と、 新たな手続き呼び出し時に、手続き呼び出し側により呼
    び出される手続きの入口アドレスを、当該呼び出される
    手続きがアクセス可能な領域に格納する処理を生成する
    手順と、 前記手続きからのリターン処理のアドレスを一定の規則
    で引くことを可能とすることで、前記引渡処理が前記例
    外に対応する例外処理プログラムを発見できないときに
    は、手続きからのリターン処理へジャンプして、当該手
    続きでセーブしたレジスタを復元する処理を生成する手
    順とを実行させることを特徴とするプログラム記憶媒
    体。
JP9194038A 1997-07-18 1997-07-18 コンパイル方法,コンパイラ,例外ハンドラ及びプログラム記憶媒体 Pending JPH1139169A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP9194038A JPH1139169A (ja) 1997-07-18 1997-07-18 コンパイル方法,コンパイラ,例外ハンドラ及びプログラム記憶媒体
US09/116,220 US6113651A (en) 1997-07-18 1998-07-16 Compile method, a compiler, an exception handler, and a program recording medium
KR1019980028991A KR100334743B1 (ko) 1997-07-18 1998-07-18 컴파일 방법, 컴파일러 및 컴퓨터 프로그램 제품

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9194038A JPH1139169A (ja) 1997-07-18 1997-07-18 コンパイル方法,コンパイラ,例外ハンドラ及びプログラム記憶媒体

Publications (1)

Publication Number Publication Date
JPH1139169A true JPH1139169A (ja) 1999-02-12

Family

ID=16317909

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9194038A Pending JPH1139169A (ja) 1997-07-18 1997-07-18 コンパイル方法,コンパイラ,例外ハンドラ及びプログラム記憶媒体

Country Status (3)

Country Link
US (1) US6113651A (ja)
JP (1) JPH1139169A (ja)
KR (1) KR100334743B1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006196002A (ja) * 2005-01-14 2006-07-27 Microsoft Corp 非同期プログラムフローのモデリングを含むソフトウェアツール

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6363522B1 (en) * 1999-04-23 2002-03-26 Sun Microsystems, Inc. Method and apparatus for handling exceptions as normal control flow
US6757892B1 (en) * 1999-06-24 2004-06-29 Sarnoff Corporation Method for determining an optimal partitioning of data among several memories
US6668368B1 (en) * 1999-09-29 2003-12-23 Lucent Technologies Inc. Variable-extracting command line generator
US6487716B1 (en) * 1999-10-08 2002-11-26 International Business Machines Corporation Methods and apparatus for optimizing programs in the presence of exceptions
US7086066B2 (en) * 2000-03-31 2006-08-01 Schlumbergersema Telekom Gmbh & Co. Kg System and method for exception handling
KR20030062406A (ko) * 2000-09-01 2003-07-25 터트 시스템즈 인코포레이티드 데이타 통신 디바이스에서 구성정보를 프리컴파일하는방법 및 시스템
US7512935B1 (en) * 2001-02-28 2009-03-31 Computer Associates Think, Inc. Adding functionality to existing code at exits
US20040098639A1 (en) * 2002-11-14 2004-05-20 Liu Bao Gang Debugging kernel-loadable modules and suspending and replacing functions in non-microkernel operating systems
JP3899046B2 (ja) * 2003-03-20 2007-03-28 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ装置、コンパイラプログラム、記録媒体、及びコンパイル方法
US7216337B2 (en) 2003-04-14 2007-05-08 Microsoft Corporation Automatic determination of invalid call sequences in software components
US7631304B2 (en) * 2005-01-14 2009-12-08 Bearman Ian M Software tool with modeling of asynchronous program flow
US7987446B2 (en) * 2007-04-24 2011-07-26 International Business Machines Corporation Method for automating variables in end-user programming system
US8312438B2 (en) * 2007-08-02 2012-11-13 Sap Ag Low impact debugging protocol
US20100122073A1 (en) * 2008-11-10 2010-05-13 Ravi Narayanaswamy Handling exceptions in software transactional memory systems
US9207921B2 (en) * 2009-06-22 2015-12-08 Oracle America, Inc. Fault tolerant compilation with automatic optimization adjustment
US9274770B2 (en) * 2009-06-22 2016-03-01 Oracle America, Inc. Fault tolerant compilation with automatic error correction
US9557917B2 (en) * 2014-11-10 2017-01-31 International Business Machines Corporation Conditional stack frame allocation
CN114968370A (zh) * 2021-02-25 2022-08-30 华为技术有限公司 一种异常处理方法及相关装置
CN113485884B (zh) * 2021-06-08 2023-06-06 北京控制工程研究所 一种基于处理器特性的星载软件异常状态监测方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2545789B2 (ja) * 1986-04-14 1996-10-23 株式会社日立製作所 情報処理装置
US5729676A (en) * 1993-12-10 1998-03-17 Nec Corporation Method of generating data for evaluating programs
US5628016A (en) * 1994-06-15 1997-05-06 Borland International, Inc. Systems and methods and implementing exception handling using exception registration records stored in stack memory
US5784613A (en) * 1995-09-12 1998-07-21 International Busines Machines Corporation Exception support mechanism for a threads-based operating system
US5815702A (en) * 1996-07-24 1998-09-29 Kannan; Ravi Method and software products for continued application execution after generation of fatal exceptions
US5778233A (en) * 1996-10-11 1998-07-07 International Business Machines Corporation Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program
US5946492A (en) * 1997-02-19 1999-08-31 International Business Machines Corporation Compiler that reduces call stack size through identification of stackless variables
US5948113A (en) * 1997-04-18 1999-09-07 Microsoft Corporation System and method for centrally handling runtime errors

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006196002A (ja) * 2005-01-14 2006-07-27 Microsoft Corp 非同期プログラムフローのモデリングを含むソフトウェアツール

Also Published As

Publication number Publication date
KR100334743B1 (ko) 2002-08-21
KR19990013980A (ko) 1999-02-25
US6113651A (en) 2000-09-05

Similar Documents

Publication Publication Date Title
JPH1139169A (ja) コンパイル方法,コンパイラ,例外ハンドラ及びプログラム記憶媒体
US6072951A (en) Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure)
US5778212A (en) Interprocedural analysis user interface
US6993754B2 (en) Annotations to executable images for improved dynamic optimization functions
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
US6446258B1 (en) Interactive instruction scheduling and block ordering
JP4181326B2 (ja) コード最適化のための方法、装置及びプログラム
US5812855A (en) System and method for constaint propagation cloning for unknown edges in IPA
JP3974742B2 (ja) コンパイル装置、最適化方法および記録媒体
US20120159461A1 (en) Program optimizing apparatus, program optimizing method, and program optimizing article of manufacture
US20030237080A1 (en) System and method for improved register allocation in an optimizing compiler
JP2000347874A (ja) レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置
JP2000507373A (ja) インタラクティブソフトウェア開発システム
CA2306517A1 (en) Method and apparatus for debugging optimized code
US7124407B1 (en) Method and apparatus for caching native code in a virtual machine interpreter
CA2306519A1 (en) Method and apparatus for handling exceptions as normal control flow
US7086044B2 (en) Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
US7036116B2 (en) Percolating hot function store/restores to colder calling functions
US8458671B1 (en) Method and system for stack back-tracing in computer programs
US5301327A (en) Virtual memory management for source-code development system
US7152223B1 (en) Methods and systems for compiling and interpreting one or more associations between declarations and implementations in a language neutral fashion
US6925636B2 (en) Method and apparatus for refining an alias set of address taken variables
EP0406028A2 (en) Incremental compiler for source code development system
US20050125783A1 (en) Program optimization with intermediate code
JP2003216442A (ja) プログラム変換方法、これを用いたコンピュータ装置及びプログラム