JP2735523B2 - プロシージャ・ステップ処理方法 - Google Patents
プロシージャ・ステップ処理方法Info
- Publication number
- JP2735523B2 JP2735523B2 JP7311242A JP31124295A JP2735523B2 JP 2735523 B2 JP2735523 B2 JP 2735523B2 JP 7311242 A JP7311242 A JP 7311242A JP 31124295 A JP31124295 A JP 31124295A JP 2735523 B2 JP2735523 B2 JP 2735523B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- subprogram
- execution
- procedure
- event
- 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 - Fee Related
Links
Landscapes
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
Description
ミュレータにおける、プロシージャ・ステップ実行の非
検査対象であるユーザプログラム中のサブプログラムの
分岐命令のステップ実行処理方法に関するものである。
ラムへの分岐命令(以下CALL命令という)をステッ
プ実行する場合、サブプログラムの実行終了までをシン
グルステップ実行として行う実行処理について記述して
いる。
(202)により従来のシングルステップ実行でステッ
プ実行させた場合、分岐先のサブプログラムX(20
4)の先頭アドレスでステップ実行処理を終了する。そ
れに対してプロシージャ・ステップ実行では、分岐先の
サブプログラムX(204)を実行し、メインプログラ
ム(201,ここではメインプログラムとはCALL命
令の存在する非検査対象であるユーザプログラムを示
す)に戻った時点、つまりメインプログラム201の中
におけるCALL命令(202)の次命令であるMOV
命令(206)でプロシージャ・ステップ実行(20
5)が終了する。
るプロシージャ・ステップ実行処理は、インサーキット
エミュレータに搭載される実行前検出機能を用いる。こ
の実行前検出機能とは、イベント検出器に設定した条件
が被検査対象であるプログラムの実行中に発見された場
合、ただちに実行処理を中断する機能である。この実行
前検出機能を用いて、メインプログラム中にCALL命
令が存在するメインプログラム中のCALL命令の次命
令に実行前検出機能を検出させることで実現していた
が、次のような制限があった。再帰呼び出しや、サブプ
ログラム内からでもプロシージャ・ステップを行うプロ
グラムにおいては、CALL命令の戻りアドレスを何度
も通過する場合が発生するため、CALL命令で呼び出
したサブプログラムが正常終了する前に実行前検出機能
が検出される場合があった。
中のメインプログラム(301)にCALL命令(30
2)を発見した場合、このCALL命令(302)の次
命令であるNOP命令(303)に実行前検出器をイベ
ントブレーク(イベントブレークとは、実行前(後)検
出器を用いて被検査対象であるプログラムの実行処理を
中断すること)として設定、イベントが検出されるまで
リアルタイムエミュレーションを行い、イベントが検出
された時点でイベントブレークを解除し、プロシージャ
・ステップ実行の処理を終了させるようにしてプロシー
ジャ・ステップ実行処理を実現している。
行前検出機能と実行後検出機能が搭載されるが、実行前
検出機能が搭載されていない場合、従来技術としてイン
サーキットエミュレータを制御するソフトウェア(以
下、ファームウェアという)のみで行うプロシージャ・
ステップ実行中にCALL命令を発見した場合の処理に
ついて、図5のフローチャートにより説明する。
Tという)を設け(初期値は0とする)、ステップ実行
中のメインプログラムに、CALL命令を発見すると
(S1)、サブプログラムのステップ実行を行い、CO
UNTに1を加算する。すなわちCALL命令で呼び出
されるサブプログラムの実行処理を開始する(S2
1)。このサブプログラムの実行処理は、1命令ごとに
CALL命令か(S22)及びRET命令なのか(S2
3)を確認しながら、シングルステップ実行を行う。そ
の際にCALL命令を発見するとCOUNTに1を加算
し(S24)、同様にRET命令を発見した時には1を
減算し(S26)、RET命令を実行(S27)する。
そしてCOUNT値が0でなければステップS25に戻
り、1命令ステップ実行を行い、COUNTの値が0に
なった時点で(S28)サブプログラムの実行処理終了
(S29)と判断し、CALL命令のプロシージャ・ス
テップ処理を終了させ、プロシージャ・ステップ実行処
理を実現している。
示すように、ステップ実行中のメインプログラム(40
1)にCALL命令(402)を発見すると、COUN
Tを加算(403)し、サブプログラムX(404)の
シングルステップを開始する。さらに、このサブプログ
ラム404でCALL命令(405)を発見するとCO
UNTの加算(406)を行い、サブプログラムY(4
08)を実行し、さらにこのサブプログラムY(40
3)の実行中に、このサブプログラム(Y)の終了を示
す命令のRET命令(407)を発見すると、サブプロ
グラムY(408)からサブプログラムX(404)に
戻るが、この戻った時点でCOUNTの減算(409)
を行う。このサブプログラムX(404)でRET命令
(411)を発見した時にも同様にCOUNTの減算
(410)を行う。ここでCOUNTの値は0(61
0)となり、シングルステップの処理を終了する。
ウントする処理を採用した理由は、再帰呼び出しや、サ
ブプログラム内からでもプロシージャ・ステップが正確
に行えるようにする為である。これは再帰呼び出しや、
サブプログラム内からのプロシージャ・ステップを行っ
た場合、CALL命令の戻りアドレスを何度も通過する
場合が発生する為、従来方法としてサブプログラムの実
行処理を、スタックに退避された戻りアドレスとプログ
ラムカウンタPCが一致した時に、処理を終了するとい
う方法をとることが出来ないからである。従ってサブル
ーチンの深さ(ネスト)をCALL,RET命令により
加減算を行う方法で管理しプロシージャステップを実現
していた。
は、サブプログラムSUB_ Aを呼び出す命令である
CALL !SUB_ Aからプロシージャ・ステップ
を行った場合、ラベルJMPの実行前でプロシージャ
・ステップが終了しなければいけない。しかしSUB_
Aは、RP1レジスタの値が0と一致するか否かを比
較する命令CMP RP1、#0、その比較結果が一
致した場合にラベルJMPにブランチする命令BE
$?JMP、RP1レジスタの値を1減算する命令S
UBW_ RP1、#1による再帰呼び出しを行うサブ
プログラムの為、RP1レジスタの初期値が1の場合に
は、JMPが2度も実行されることになる。
い場合、前述のスタックに退避された戻りアドレスとプ
ログラムカウンタPCの一致を検出する処理の場合、サ
ブプログラム深さ1以上(プロシージャ・ステップの開
始位置は深さ0とした場合)のJMPでプロシージャ
・ステップが終了してしまう。このような問題を回避す
るためにCALL,RET命令をカウントする処理を追
加し実現していた。
ムでは、インサーキットエミュレータに実行前検出機能
が搭載されない場合にファームウェアにて行っていたプ
ロシージャ・ステップ実行処理において、CALL命令
で呼び出されたサブプログラムがメインプログラムに戻
る手段として、サブプログラムの終了を示すRET命令
を使用しない場合(例えばBR命令で戻りアドレスにブ
ランチした場合など)にプロシージャ・ステップが正常
な動作を行わないことである。それは、従来処理がCA
LL命令数とRET命令数を加減算することで処理を実
現しているので、RET命令を使用しない場合にはその
加減算の関係が狂ってしまうためである。
7に示すように、ステップ実行中のメインプログラム
(401)にCALL命令(402)を発見すると、C
OUNTを加算(403)、サブプログラムX(40
4)のシングルステップを開始する。さらにCALL
Y(405)を発見するとCOUNTの加算(406)
を行う。その後サブプログラムY(408)からサブプ
ログラムX(404)へ、またサブプログラムX(40
4)からサブプログラムY(408)への移行時に、ス
タックエリアへ退避された戻りアドレスを読み出す命令
POP RP1(415)と、読み出したアドレスへブ
ランチするBR命令(416)を用いて戻った場合、及
びサブプログラムX(404)からメインプログラム
(401)へ、サブプログラムX(404)への移行時
に、スタックエリアへ退避された戻りアドレスを読み出
す命令POP RP1(416)と、読出したアドレス
へブランチするBR命令(417)を用いて戻った場合
には、メインプログラムに戻った時点でのCOUNTの
値は2(419)である為、シングルステップの処理を
終了しない。従って、プロシージャ・ステップ実行処理
はシングルステップが中断せず、正常処理が行われな
い。
し、CALL命令で呼出されたサブプログラムがメイン
プログラムに戻る場合に、RET命令を用いないプログ
ラムを使用した時にも、その処理を正常に終了できるよ
うにしたプロシージャ処理方法を提供することにある。
対象であるユーザプログラムを実行するインサーキット
エミュレータによりシングルステップ実行可能なデバッ
グ処理を行うプロシージャ・ステップ処理方法におい
て、前記ユーザプログラム中のサブプログラムへの分岐
命令のプロシージャ・ステップ実行処理を実行する前
に、戻りアドレスを退避するスタックエリアに前記イン
サーキットエミュレータの実行後検出を行うアクセスブ
レークイベントを設定し、前記スタックエリアへ退避し
た戻りアドレス値とプログラムカウント値との一致を検
出し、この検出結果が一致した場合はステップ実行処理
を終了し、前記検出結果が一致しない場合にはこの検出
結果が一致するまでステップ実行処理を継続することを
特徴とする。
令とRET命令の数の一致によるカウント処理を使用せ
ず、スタックエリアに退避される戻りアドレスのスタッ
クアドレスにアクセスブレークイベント(アクセスブレ
ークイベントとは実行後検出器を用いて、この実行後検
出器に設定したアクセス条件を、検査対象であるプログ
ラムが実行処理中にアクセスした場合、実行処理を中断
することを指す)を仕掛ける処理及びメインプログラム
への戻りアドレスとプログラムカウントの値が一致した
ことを検出する処理を有する。
れる戻りアドレスのスタックアドレスにアクセスブレー
クイベントを仕掛けるということは、CALL命令のス
テップ実行によってサブプログラムへ移行する際に、ス
タックエリアに退避された戻りアドレスのスタックアド
レスにアクセスブレークイベントを設定し、リアルタイ
ムエミュレーションを行うことによって、CALL命令
の次命令のアクセスが行われた時にアクセスブレークイ
ベントを発生させ、CALL命令の次命令から再実行可
能な状態でリアルタイムエミュレーションを中断する処
理である。
とプログラムカウントの値の一致を検出するというの
は、サブプログラムが終了していない状態中にスタック
エリアに退避された戻りアドレスのスタックアドレスを
アクセスした場合、サブプログラムが終了していないの
にも関わらずアクセスブレークイベントが発生してしま
う為、同スタックアドレスに退避した戻りアドレスとプ
ログラムカウントの値の一致を検出することでサブプロ
グラムが終了していると判断する処理である。これらの
処理によって、サブプログラムがメインプログラムに戻
る場合に、RET命令を使用しないプログラムを使用し
た場合にも、プロシージャ・ステップ実行処理が正常動
作を行う。
図1のフローチャートを参照して詳細に説明する。まず
ステップ実行中のメインプログラムにCALL命令を発
見(S1)した時、スタックエリアに戻りアドレスが退
避される(S2)。次に設定されている全てのイベント
ブレーク情報を対比させ、全てのイベントブレークを解
除(S3)する。これは、サブプログラムの実行にリア
ルタイムエミュレーションを使用する為、そのリアルタ
イムエミュレーション中にイベントブレークを発生させ
ないようにする為である。
エリアのアドレスにアクセスブレークイベントを設定
(S4)する。次にサブプログラムのリアルタイムエミ
ュレーションを開始(S5)し、アクセスブレークイベ
ントが検出(S6)されたら、プログラムカウンタPC
とスタックエリアに対比した戻りアドレスの値が一致す
る(S7)までリアルタイムエミュレーションを行い、
値が一致したらリアルタイムエミュレーションを中断す
る(S8)。次に先に設定したアクセスブレークイベン
ト(S9)を解除し、あらかじめ対比しておいた全ての
イベントブレーク情報から、全てのイベントブレークの
再設定(S10)を行い、CALL命令を発見(S1)
した時と同様の状態に復元する。以上のような流れを経
てプロシージャ・ステップ実行の終了(S11)とな
る。
の流れ図により詳細に説明する。メインプログラム(1
01)中のCALL命令(102)を発見すると、対比
されたアドレスのスタックアドレスにアクセスブレーク
イベントを仕掛け(103)、サブプログラムX(10
4)の先頭からリアルタイムエミュレーション(10
5)を開始する。次にアクセスブレークイベントが発生
するまでリアルタイムエミュレーション(105)を行
う。この場合、サブプログラムX(104)のシングル
ステップが開始されさらにCALL Y(105)を発
見されると、サブプログラムY(108)が実行され
る。この後サブプログラムY(108)からサブプログ
ラムX(104)へスタックエリアへ対比された戻りア
ドレスを読み出す命令POP RP1(109)と、読
み出したアドレスへブランチするBR命令(110)と
が実行され、またサブプログラムX(104)からメイ
ンプログラム(101)へのサブプログラムX(10
4)への移行時に、スタックエリアへ対比された戻りア
ドレスを読み出す命令POP RP1(111)と、読
出したアドレスへブランチするBR命令(112)とが
実行されることにより、戻りアドレス(113)とプロ
グラムカウンタPCのカウント値が一致し、リアルタイ
ムエミュレーション(105)が終了する。このように
してプロシージャ・ステップ実行処理を実現することが
できる。
命令のプロシージャ・ステップ実行処理によれば、実行
前検出機能を搭載していないインサーキットエミュレー
タにおいて、実行後検出機能を用いてスタックエリアに
対比される戻りアドレスにアクセスブレークイベントを
設定し、リアルタイムエミュレーションを行い、アクセ
スブレークイベントが検出され、プログラムカウンタP
Cとスタックエリアに対比した戻りアドレスの値が一致
した時に、リアルタイムエミュレーションを中断するこ
とにより、CALL命令で呼び出されたサブプログラム
がメインプログラムに戻る手段として、RET命令を使
用しないプログラム環境下でもプロシージャ・ステップ
実行処理を行うことができる。
ージャ・ステップ実行処理により、サブプログラム内の
プログラム実行をリアルタイムエミュレーションにて行
い、従来技術で行っていた1命令ごとによるシングルス
テップ実行処理の繰り返しを行う必要がなくなったた
め、プロシージャ・ステップ実行処理中でのサブプログ
ラムのステップ実行処理速度が高速化されるという特徴
もある。
のフローチャートである。
ラム流れ図である。
ャ・ステップ実行のプログラム流れ図である。
のプログラム流れ図である。
アで対応したフローチャートである。
る。
である。
Claims (2)
- 【請求項1】 被検査対象であるユーザプログラムを実
行するインサーキットエミュレータによりシングルステ
ップ実行可能なデバッグ処理を行うプロシージャ・ステ
ップ処理方法において、前記ユーザプログラム中のサブ
プログラムへの分岐命令のプロシージャ・ステップ実行
処理を実行する前に、戻りアドレスを退避するスタック
エリアに前記インサーキットエミュレータの実行後検出
を行うアクセスブレークイベントを設定し、前記スタッ
クエリアへ退避した戻りアドレス値とプログラムカウン
ト値との一致を検出し、この検出結果が一致した場合は
ステップ実行処理を終了し、前記検出結果が一致しない
場合にはこの検出結果が一致するまでステップ実行処理
を継続することを特徴とするプロシージャステップ処理
方法。 - 【請求項2】 ステップ実行処理を行う命令がサブプロ
グラムへの分岐命令か否かを判断し、前記サブプログラ
ムへの分岐命令であればプロシージャ・ステップ実行処
理を開始し、前記サブプログラムへの分岐命令でなけれ
ば前記プロシージャ・ステップ実行処理を行わないステ
ップと、前記分岐命令であればスタックエリアに戻りア
ドレスの退避を行うステップと、次に設定されているイ
ベントの退避を行い前記戻りアドレスに実行後検出によ
るアクセスイベントブレークの設定を行うステップと、
前記ステップ実行処理をリアルタイムエミュレーション
にて行うステップと、前記アクセスイベントブレークを
検出し前記戻りアドレスとプログラムカウント値とが一
致した時前記リアルタイムエミュレーションの中断を行
うステップと、前記リアルタイムエミュレーションの中
断後に前記ステップ実行後検出による前記アクセスイベ
ントブレークの解除を行い前記退避したイベントの復元
を行うステップとを含むことを特徴とするプロシージャ
ステップ実行処理方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP7311242A JP2735523B2 (ja) | 1995-11-29 | 1995-11-29 | プロシージャ・ステップ処理方法 |
EP96118360A EP0778524A1 (en) | 1995-11-17 | 1996-11-15 | Method and device for evaluating a program |
US08/751,619 US6185700B1 (en) | 1995-11-17 | 1996-11-18 | Method and device for evaluating a program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP7311242A JP2735523B2 (ja) | 1995-11-29 | 1995-11-29 | プロシージャ・ステップ処理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH09152980A JPH09152980A (ja) | 1997-06-10 |
JP2735523B2 true JP2735523B2 (ja) | 1998-04-02 |
Family
ID=18014807
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP7311242A Expired - Fee Related JP2735523B2 (ja) | 1995-11-17 | 1995-11-29 | プロシージャ・ステップ処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2735523B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8341383B2 (en) * | 2007-11-02 | 2012-12-25 | Qualcomm Incorporated | Method and a system for accelerating procedure return sequences |
-
1995
- 1995-11-29 JP JP7311242A patent/JP2735523B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH09152980A (ja) | 1997-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5905911B2 (ja) | シングルステップ実行を用いる診断コード | |
GB2329049A (en) | A debugger interface unit for identifying selected exceptions | |
EP0530816A2 (en) | Microprocessor with cache memory and trace analyzer therefor | |
JP3872196B2 (ja) | マイクロコンピュータ | |
JP2735523B2 (ja) | プロシージャ・ステップ処理方法 | |
JP2713124B2 (ja) | インサーキット・エミュレータ | |
JPH04332055A (ja) | プログラム暴走検知方法 | |
JP3159155B2 (ja) | プログラムのデバッグ方法および装置 | |
JPS595932B2 (ja) | デ−タ処理方式 | |
JP2002116926A (ja) | プログラム処理装置およびプログラム処理方法 | |
JP3068578B2 (ja) | インサーキットエミュレータおよび飽和演算処理方法 | |
JP3124788B2 (ja) | 組込型マルチタスクオペレーティングシステムの例外処理方法 | |
JP2743889B2 (ja) | プログラム評価の方法および装置 | |
JP2786215B2 (ja) | 再開処理制御方式 | |
JP2550708B2 (ja) | デバッグ方式 | |
JPH07225681A (ja) | 割込制御装置 | |
JP2984674B1 (ja) | プロシージャ・ステップ処理方法、プロシージャ・ステップ処理装置、及びその記録媒体 | |
JPH07210421A (ja) | スレッド環境におけるデバッグ方法 | |
CN111767119A (zh) | 一种不触发系统保护的内核挂钩方法 | |
JPH04199336A (ja) | マイクロコンピュータ | |
JPS6146535A (ja) | 擬似エラ−設定制御方式 | |
JPH07210420A (ja) | スレッド環境におけるデバッグ方法 | |
JPH11242613A (ja) | マイクロプロセッサ | |
KR19990076180A (ko) | 리스크 기반의 내장된 시스템에서 유효하지 않은 주소공간접근에 의한 시스템 장애 조기 발견 방법 | |
JPH10312310A (ja) | 中央処理装置の自己診断方法および自己診断機能を備えた中央処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 19971209 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
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: 20080109 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090109 Year of fee payment: 11 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100109 Year of fee payment: 12 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110109 Year of fee payment: 13 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110109 Year of fee payment: 13 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110109 Year of fee payment: 13 |
|
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: 20110109 Year of fee payment: 13 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120109 Year of fee payment: 14 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130109 Year of fee payment: 15 |
|
LAPS | Cancellation because of no payment of annual fees |