Compaq OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


C.10.5 初期化コード

/CHECK=UNDERFLOW 修飾子または /PARALLEL 修飾子を使用してコンパイルしたプログラムをデバッグする場合には,次の例に示すようなメッセージが表示されます。


DBG> RUN FORMS
Language: FORTRAN, Module: FORMS 
Type GO to reach main program
DBG>

"Type GO to reach MAIN program" というメッセージは,メイン・プログラムを開始する前に実行が中断されるため,デバッガの制御のもとで初期化コードを実行できることを示します。GO コマンドを入力すると,メイン・プログラムの先頭に設定されます。その時点で,GO コマンドを入力すると,他の Fortran プログラムの場合と同様に,プログラムの実行を開始できます。

C.11 MACRO-32

次の節では,デバッガによる MACRO-32 のサポートについて説明します。

C.11.1 言語式の演算子

MACRO-32 言語には,高級言語の式と同じ意味での式というものはありません。受け入れられるのはアセンブリ時の式と,限られた数の演算子だけです。デバッグ時に MACRO-32 のプログラミングで,他の言語の場合と同じくらい自由に式を使用できるようにするため,デバッガは,MACRO-32 自体には含まれていない多数の演算子を MACRO-32 の言語式の中で受け入れるようになっています。特に,BLISS 以後にモデル化された比較演算子とブール演算子はすべて受け入れます。間接参照演算子と通常の算術演算子も受け入れられます。

種類 シンボル 機能
接頭辞 @ 間接参照
接頭辞 . 間接参照
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 MOD 剰余
挿入辞 @ 左シフト
挿入辞 EQL 等値
挿入辞 EQLU 等値
挿入辞 NEQ 不等
挿入辞 NEQU 不等
挿入辞 GTR 大なり
挿入辞 GTRU 大なり符号なし
挿入辞 GEQ 以上
挿入辞 GEQU 以上符号なし
挿入辞 LSS 小なり
挿入辞 LSSU 小なり符号なし
挿入辞 LEQ 以下
挿入辞 LEQU 以下符号なし
接頭辞 NOT ビット単位のNOT
挿入辞 AND ビット単位のAND
挿入辞 OR ビット単位のOR
挿入辞 XOR ビット単位の排他的論理和
挿入辞 EQV ビット単位の同値

C.11.2 言語式とアドレス式の構造

サポートされている,MACRO-32 の言語式とアドレス式の構造を次に示します。

シンボル 構造
[ ] 添字指定
<p,s,e> BLISS同様のビットフィールドの選択

MACRO-32 アセンブラが作成する DST 情報では,記憶域を割り当てるアセンブラ指示文の前にあるラベルは,そのラベルが変数名である配列変数として扱われます。その結果,このようなデータを検査または操作するときに,高級言語の配列の構文を使用することができます。

次の MACRO-32 ソース・コードの例では,4 個のワードに格納されている 16 進数のデータをLAB4 ラベルで指定しています。


LAB4:    .WORD    ^X3F,5[2],^X3C 

デバッガは LAB4 を配列変数として処理します。たとえば次のコマンドは,各要素(ワード)に格納されている値を表示します。


DBG> EXAMINE LAB4
.MAIN.\MAIN\LAB4 
    [0]:        003F 
    [1]:        0005 
    [2]:        0005 
    [3]:        003C

次のコマンドは,4 番目のワードに格納されている値を表示します。1 番目のワードは要素"0" で表されます。


DBG> EXAMINE LAB4[3]
.MAIN.\MAIN\LAB4[3]:    03C

C.11.3 データ型

MACRO-32 は,データ型をラベル名にバイトします。バインドは,ラベル定義に続くアセンブラ指示文に従って行なわれます。サポートされている MACRO-32 の指示文を次に示します。

MACRO-32 の指示文 VMS のデータ型名
.BYTE バイト符号なし(BU)
.WORD ワード符号なし(WU)
.LONG ロングワード符号なし(LU)
.SIGNED_BYTE バイト整数(B)
.SIGNED_WORD ワード整数(W)
.LONG ロングワード整数(L)
.QUAD クォドワード整数(Q)
.F_FLOATING F 浮動小数点数(F)
.D_FLOATING D 浮動小数点数(D)
.G_FLOATING G 浮動小数点数(G)
.H_FLOATING H 浮動小数点数(H)(VAX 固有)
(該当なし) パック 10 進数(P)

C.11.4 MACRO-32 コンパイラ(AMACRO)(Alpha 専用)

MACRO-32 で記述したアプリケーションを Alpha システムに移植する場合は,MACRO-32 コンパイラ(AMACRO)を使用します。MACRO-32 でコンパイルされたコードをデバッグするためのデバッグ・セッションは,アセンブルされたコードの場合に似ていますが,本項で説明するような重要な相違もあります。これらのアプリケーションを移植する場合の説明については,『 Porting VAX MACRO Code from OpenVMS VAX to OpenVMS Alpha 』を参照してください。

C.11.4.1 コードの再配置

大きな相違は,コードがコンパイルされているという事実です。VAX システムでは,MACRO-32 の各命令は単一のマシン命令です。Alpha システムでは,MACRO-32 の各命令は,Alpha の複数のマシン命令へとコンパイルされることがあります。この相違によって大きな副作用が生じます。それは,コンパイル・コマンドで /NOOPTIMIZE を指定しない場合,コードの再配置と再スケジューリングが行われるということです。コードのデバッグが終わってから,/NOOPTIMIZE を指定しないでリコンパイルすることにより性能を改善できます。

C.11.4.2 シンボリック変数

コンパイルされたコードをデバッグする場合とアセンブルされたコードをデバッグする場合とには,他にも大きな相違があります。それは,MACRO-32 にとっての新しいコンセプトである,ルーチンの引数を調べるためのシンボリック変数の定義です。VAX システムでは,ルーチンをデバッグしていて,引数をチェックしたくなったら,通常は,次のような入力を行うと考えられます。


        DBG> EXAMINE @AP        ; to see the argument count 
        DBG> EXAMINE @AP+4      ; to examine the first arg 

また,次のような入力をすることも考えられます。


        DBG> EXAMINE @AP        ; to see arg count 
        DBG> EXAMINE .+4:.+20   ; to see first 5 args 

Alpha システムでは,引数はメモリ内のベクタには常駐していません。これが VAX システムとは異なる点です。さらにはまた,Alpha システムには AP レジスタがありません。MACRO でコンパイルしたコードをデバッグしているときに,EXAMINE @AP と入力すると,デバッグは,AP は未定義シンボルであるというメッセージを発行します。

コンパイルしたコードでは,引数は,次に述べる項目を組み合せたものとして常駐することができます。

作成されたコードを読み出して引数を検索することをコンパイラがユーザに要求することはありません。コンパイラには,引数の正しい位置を指し示す $ARGn シンボルがあります。$ARG0 は,VAX システムの @AP+0 と同じもの,つまり引数の個数です。たとえば $ARG1 は最初の引数,$ARG2 は 2 番目の引数です。これらの引数は,CALL_ENTRY 指示文および JSB_ENTRY 指示文で定義されますが,EXCEPTION_ENTRY 指示文では定義されません。

C.11.4.3 $ARGn シンボルを使用しない引数検索

ユーザのコードで,コンパイラが $ARGn シンボルを作成しない追加の引数が使用されることがあります。.CALL_ENTRY ルーチンに対して定義される $ARGn シンボルの個数は,コンパイラが自動検出または MAX_ARGS によって検出した最大値または 16 のどちらか小さい方です。.JSB_ENTRY ルーチンの場合,引数は呼び出す側のスタック・フレーム内のホーム・ポジションにあり,コンパイラは実際の数を検出できないので,$ARGn シンボルを常に 8 個作成します。

ほとんどの場合,追加の引数は容易に見つけられますが,そうでない場合もあります。

C.11.4.4 検索しやすい引数

次の場合は,追加の引数は容易に見つけられます。

たとえば,次のようにすれば JSB ルーチン内の 8 番目の引数より先にある引数を調べることができます。この場合,引数リストのホーム・ポジションへのセットは呼び出す側で行うことが必要です。


  DBG> EX $ARG8  ; highest defined $ARGn
  . 
  . 
  . 
  DBG> EX .+4  ; next arg is in next longword 
  . 
  . 
  . 
  DBG> EX .+4  ; and so on 
 

この例では,引数リストをホーム・ポジションにセットするときに呼び出す側が少なくとも 10 個の引数を検出したと想定しています。

引数のホーム・ポジションをセットしなかったルーチンの最後の $ARGn シンボルより先の引数を見つけるには,上記の例で EX .+4 を EX .+8 で置き換えた後,例に示すとおりに実行します。

C.11.4.5 検出しにくい引数

次の場合は,追加の引数を見つけるのは容易ではありません。

これらのケースで追加の引数を見つける方法は,コンパイルされたマシン・コードを調べ,引数がどこに常駐しているかを判断することです。チェックしたい引数の最大値に対して MAX_ARGS が正しく指定されていれば,どちらの問題も解消します。

C.11.4.6 浮動小数点数データ付きのコードのデバッグ

Alpha システムで浮動小数点数データ付きの,コンパイルされた MACRO-32 コードをデバッグする際の重要な情報を次に説明します。

C.11.4.7 パック 10 進数データ付きのコードのデバッグ

Alpha システムでパック 10 進数データ付きの,コンパイルされた MACRO-32 コードをデバッグする際の重要な情報を次に説明します。

C.12 MACRO-64(Alpha のみ)

以下の各節では,デバッガによる MACRO-64 のサポートについて説明します。


前へ 次へ 目次 索引