JPH0353335A - コンパイラの処理方式 - Google Patents

コンパイラの処理方式

Info

Publication number
JPH0353335A
JPH0353335A JP18943889A JP18943889A JPH0353335A JP H0353335 A JPH0353335 A JP H0353335A JP 18943889 A JP18943889 A JP 18943889A JP 18943889 A JP18943889 A JP 18943889A JP H0353335 A JPH0353335 A JP H0353335A
Authority
JP
Japan
Prior art keywords
function
interrupt
code
processing
interruption
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
JP18943889A
Other languages
English (en)
Inventor
Megumi Kuwaki
桑木 めぐみ
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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP18943889A priority Critical patent/JPH0353335A/ja
Publication of JPH0353335A publication Critical patent/JPH0353335A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、コンパイラの処理方式に関し、特にそのオブ
ジェクトフード生戊方式に関する。
〔従来の技術〕
(1)関数呼出し時と割込み処理時のマイクロプロセッ
サの動作 一般のマイクロプロセッサでは、関数呼出しの場合には
、関数呼出し命令を使用してスタックにもどり先アドレ
スを積み、呼出す関数に制御を移す。呼出された関数か
ら復帰する場合には、通常の復帰命令を使用して、スタ
ックからもどり先アドレスを取り出して制御をもどす。
これに対して、割込み時には、ハードウェアによってス
タックにマイクロプロセッサの状態を示スプロセッサス
テータスワード(以降PsWと称する)ともどり先アド
レスを積み、割込み処理関数に制御を移す。呼出された
関数から復帰する場合には、割込みからの復帰命令を使
用して、ス゛タックからPSWともどり先アドレスを取
り出して制御をもどす。このように関数呼出し時と割込
み時では、スタックに積む情報や関数からの復帰命令が
異なっており、従って、関数呼出しによって呼出される
べき関数を割込みから直接呼出したり、割込みによって
呼出されるべき関数を関数呼出しによって呼出すとスタ
ックが狂い、異常動作を起こす。
(2)従来のコンパイラを使用した割込み処理プログラ
ムの作成方法。
従来、高級言語を使用して割込み処理プログラムを作或
する場合には、次の2通りの方法がある。
l)高級言語のみで割込み処理プログラムを作成する。
この場合、コンパイラが機能拡張されていて、何等かの
手段で関数が割込み処理関数であることを指定すること
で、コンパイラが指定された関数に対して(1)で述べ
た割込みから直接呼出し得るコードを生成する機能を有
することが必要である。
2)割込み処理関数の呼出しを行なうインタフェースプ
ログラムをアセンブリ言語で作威し、割込み時には前記
アセンブリ言語プログラムから高級言語で書いた割込み
処理関数本体を呼出す。
(3)  ソフトウェアデバッガを使用した割込み処理
を伴うプログラムのデバッグ方法 多くのソフトウェアデバッガには、着目している被デバ
ッグプログラム中の関数の実行とは別に、被デバッグプ
ログラム中の関数を呼出して実行する機能を有する(以
下、関数呼出し機能という)。関数呼出し機能は、着目
している被デバッグプログラム中の関数の実行とは非同
期に関数を呼出して実行することが出来るため、割込み
が発生してその関数が呼出されたのと同様な状況を疑似
的に作り出すことができる。そのため、ソフトウェアデ
バッガの関数呼出し機能を割込み処理を伴うプログラム
のデバッグに使用することがある。この関数呼出し機能
は、関数呼出しで呼出される関数を対象にしているため
、割込みから直接呼出される関数に対しては使用するこ
とができない。
第1表は、C言語ソースプログラムの一例である。ソー
スプログラム中の文r#pragma inter−r
upt(”handle”)」によって、関数hand
leが割込み処理関数であることを指定している。
第   1   表 #pragma interrupt llhandl
e”void  handleO { /* 割込み処理 本体 */ refurn+ } 第2表は、第1表のソースプログラムに対して、従来の
Cコンパイラが生成するオブジェクトコードをμPD7
0616のアセンブリ言語を使用して表示したものであ
る。この従来のCコンパイラは、従来の技術の(2) 
1 )で述べた機能拡張されたCコンパイラを例にして
いる。
.text handler= 第   2   表 ;命令セクションの定義 ;割込みから呼出されるアドレス :割込み処理 本体 IRET      :割込み処理からの復帰L   
                         
  J第3表は、第1表のソースプログラムに対して、
割込み処理関数の指定がない場合にコンパイラが生成す
るオブジェクトコードをμPD70616のアセンブリ
言語を使用して表示したものである。
第   3   表 .text      :命令セクションの定義;関数
処理 本体 〔発明が解決しようとする課題〕 上述した従来のコンパイラの処理方式では、工)の方法
では、ソフトウェアデバッガを使用した場合に、ソフト
ウェアデバッガの機能を使用して割込みの発生をシミュ
レートすることができない問題点がある。2)の方法で
は、割込み処理関数を呼出すために別にアセンブリ言語
でインタフェースプログラムを作成しなければならず、
しかも、アセンブリ言語プログラムから割込み処理関数
を呼出すオーバヘッドが生じる問題点がある。
本発明の目的は、ソフトウェアデバッガの機能を使用し
て割込みの発生をシミュレートすることが機能であり、
またアセンブリ言語を使用することなく高級言語のみで
割込み処理関数を記述することができ、生成されるオブ
ジェクトコードについても不要なオーバヘッドを生じな
いようにしたコンパイラの処理方式を提供することにあ
る。
〔課題を解決するための手段〕
本発明のコンパイラ処理方式の構成は、特定の関数に対
して割込み処理関数であることを指定する指定手段と、
この指定手段により指定された関数をフンパイルしオブ
ジェクトコードを作或するフード作戊手段と、前記指定
された関数をフンパイルしオブジェクトコードを作成す
る場合に、必要なレジスタを退避したりスタックフレー
ムを生威したりする関数のプロローグ処理においては割
込み発生時にハードウェアによってスタックに退避され
る情報をソフトウェアによってスタックに退避するため
に必要な命令列を生成する命令列生戊手段と、呼出され
た関数から復帰する関数のエピローグ処理においては通
常の復帰命令ではなく割込みからの復帰命令を生成する
復帰命令生成手段とを有し、前記指定された関数に対し
て生成したオブジェクトコードが通常の関数呼出しと割
込みとの両方から呼出すことができるようにしたことを
特徴とする。
〔実施例〕
次に、本発明の実施例について図面を参照して説明する
本実施例の説明には、マイクロプロセッサμPD706
16を対象マイクロフロセッサとしたC言語用のコンパ
イラを用い、本実施例の動作の結果生成されるオブジェ
クトコードを従来のものと比較しながら説明する。
第4表は、第1表のソースプログラムに対して、本発明
のCコンパイラが生成するオブジェクトコードをμPD
70616のアセンブリ言語を使用して表示したもので
ある。これは、第2表のオブジェクトコードと較べて、
前処理部Aが追加されている。この前処理部Aでは、関
数呼出しによってスタックに積まれたもどりアドレスを
取り出し、PSWをスタックに積み、取り出したもどり
アドレスをスタックに積み直すことで割込み発生時にハ
ードウェアによってスタックに積まれる情報をソフトウ
ェアでスタックに積んでいる。関数呼出しによってこの
関数を呼出す場合には、シンボルーhandleで表さ
れるアドレスを呼出す。割込みで呼出す場合には、シン
ボル−Jandleで表されるアドレスを呼出すように
割込みベクタの設定を行なうことで、この割込み処理関
数は、割込みからも関数呼出しからも呼出すことが可能
となる。このオブジェクトコードを比較すると、割込み
時に実行されるコードは全く同じで、新たなオーバヘッ
ドは生じていない。
第   4   表 .Iext     +命令セクションの定義hand
ler: ;関数呼出しから呼出されるアドレス ;割込み処理 本体 第1図は本実施例のシステム構成を示すブロック図であ
る。本実施例のCコンパイラ1は、入力部2でソースプ
ログラム7を入力する。次に、構文解析部3で入力した
ソースプログラムを解析スる。この構文解析中に上述し
た割込み処理関数の指定があると、シンボルテーブルに
登録された指定された関数名のシンボル情報に割込み関
数の指定が行なわれたことを示す情報を付加する。この
構文解析部3は、構文解析の結果と旦て一連の単純な命
令列である中間コードを生成する。この中間コードには
、関数のプロローグ処理命令やエピローグ処理命令が含
まれる。オブジェクト出力部4では、構文解析部3で生
成された中間コードを入力し、シンボルテーブルの情報
を参照してオブジェクトコードを生威し、オブジェクト
プログラム8に出力する。
第2図は、本実施例のオブジェクト出力部の処理を流れ
図で示したものである。従来のコンパイラのオブジェク
トコード出力部に対して、判定処理12.15と、コー
ド生成処理l6を追加したものである。この処理は単純
であり、処理オブジェクトコード生成時に入力した中間
コードが関数のプロローグ処理命令やエピローグ処理命
令であり、かつこの関数が割込み処理関数として指定さ
れている場合には、そのプロローグ処理命令、およびエ
ピローグ処理命令に対して上述のオブジェクトコードな
生成する。それ以外は、従来のオブジェクトコードの生
成処理と同じ処理を行なう。関数が割込み処理関数とし
て指定されているか否かの判定は、構文解析部で出力さ
れたシンボルテーブルの情報によって行なう。
〔発明の効果〕
以上説明したように、本発明は、ソフトウェアデバッガ
の機能を使用して割込みの発生をシミュレートすること
が可能であり、またアセンブリ言語を使用することなく
高級言語のみで割り込み処理関数を記述することができ
、生成されるオブジェクトコードについても不要なオー
バヘッドを生じないという効果がある。
【図面の簡単な説明】
第1図は本発明の一実施例のシステム構戒を示すブロッ
ク図、第2図は第1図のオブジェクト出力部の処理の流
れ図である。 1・・・・・・コンパイラ、2・・・・・・入力部、3
・・・・・・構文解析部、4・・・・・・オブジェクト
出力部、5・・・・・・シンボル情報出力部、6・・・
・・・シンボル情報入力部、7・・・・・・ソースプロ
グラム、8・・・・・・オブジェクトプログラム、9・
・・・・・シンボルテーブル、10・・・・・・中間コ
ード、11・・・・・・中間コードの入力処理、12・
・・・・・中間コードの判定処理、13・・・・・・従
来のコンパイラのコード生成処理、l4・・・・・・中
間コードの終了判定処理、15・・・・・・関数の判定
処理、16・・・・・・割込み処理関数のプロローグ処
理またはエピローグ処理コード生成処理。

Claims (1)

    【特許請求の範囲】
  1. 特定の関数に対して割込み処理関数であることを指定す
    る指定手段と、この指定手段により指定された関数をコ
    ンパイルしオブジェクトコードを作成するコード作成手
    段と、前記指定された関数をコンパイルしオブジェクト
    コードを作成する場合に、必要なレジスタを退避したり
    スタックフレームを生成したりする関数のプロローグ処
    理においては割込み発生時にハードウェアによってスタ
    ックに退避される情報をソフトウェアによってスタック
    に退避するために必要な命令列を生成する命令列生成手
    段と、呼出された関数から復帰する関数のエピローグ処
    理においては通常の復帰命令ではなく割込みからの復帰
    命令を生成する復帰命令生成手段とを有し、前記指定さ
    れた関数に対して生成したオブジェクトコードが通常の
    関数呼出しと割込みとの両方から呼出すことができるよ
    うにしたことを特徴とするコンパイラの処理方式。
JP18943889A 1989-07-21 1989-07-21 コンパイラの処理方式 Pending JPH0353335A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP18943889A JPH0353335A (ja) 1989-07-21 1989-07-21 コンパイラの処理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP18943889A JPH0353335A (ja) 1989-07-21 1989-07-21 コンパイラの処理方式

Publications (1)

Publication Number Publication Date
JPH0353335A true JPH0353335A (ja) 1991-03-07

Family

ID=16241251

Family Applications (1)

Application Number Title Priority Date Filing Date
JP18943889A Pending JPH0353335A (ja) 1989-07-21 1989-07-21 コンパイラの処理方式

Country Status (1)

Country Link
JP (1) JPH0353335A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001347879A (ja) * 2000-04-05 2001-12-18 Shinichi Okamoto キャンピングカー

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001347879A (ja) * 2000-04-05 2001-12-18 Shinichi Okamoto キャンピングカー

Similar Documents

Publication Publication Date Title
US6249907B1 (en) Method system and article of manufacture for debugging a computer program by encoding user specified breakpoint types at multiple locations in the computer program
US5740413A (en) Method and apparatus for providing address breakpoints, branch breakpoints, and single stepping
JPH03188535A (ja) プログラム・エラー検出方法
Lee Exception handling in C programs
JPH0353335A (ja) コンパイラの処理方式
JPH0766342B2 (ja) プログラムテスト装置
JPH0736734A (ja) アーギュメント値のチェック方法
Gondzio Microprocessor debugging techniques and their application in debugger design
JPH05334119A (ja) プログラムデバッグ方法
JPH0766343B2 (ja) プログラムテスト装置
JP3992122B2 (ja) ソースプログラム翻訳方法、ソースプログラム翻訳装置およびコンピュータ読取可能なプログラム記憶媒体
JPH0695910A (ja) 異常処理のための対話型デバッグ制御方式
JPH0488438A (ja) 高級言語による原始プログラムに対するデバッガの一命令実行方式
JPS63178341A (ja) プログラムデバツグ方式
JPH04169941A (ja) デバッグ情報出力処理方式
JPH01274253A (ja) ソフトウェアブレーク方式
JPH01152505A (ja) Pcのプログラムデバッグ方式
JPS63178343A (ja) 中断点の設定方式
JPH03246734A (ja) デバッガのジャンプ先アドレスチェック方法および装置
JPS6292032A (ja) プログラムテスト方法
JPH0340143A (ja) パイプライン方式計算機におけるデバッグ方式
JPH0358232A (ja) プリプロセッサ呼び出し方式
JP2006350676A (ja) 組込みシステムのプログラムデバッグ方法
JPH0239332A (ja) ソフトウェアブレーク方式
JPH1083311A (ja) シミュレータ