[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.17.3 DBX 形式用の制限のないフック

以下は、DBX 形式向けのフックである。

DBX_OUTPUT_LBRAC (stream, name)

変数名についてのスコープレベルの開始を表すデバッグ情報を stream に出力する方法を指定するマクロ。 引数 name は、スコープの開始位置アドレスを値として持つ アセンブラシンボル名(assemble_name で使う)である。

DBX_OUTPUT_RBRAC (stream, name)

DBX_OUTPUT_LBRAC と同様だが、スコープレベルの終了点を表す。

DBX_OUTPUT_ENUM (stream, type)

ターゲットマシンが列挙型を出力するのに特別な扱いを必要とする場合は、 このマクロを定義する。 この定義は C の文(セミコロンなし)とし、型 type についての 適切な情報を stream に出力するようにする。

DBX_OUTPUT_FUNCTION_END (stream, function)

ターゲット機種で、ある関数のデバッグ情報の最後に特別な出力を 必要とする場合は、このマクロを定義する。 この定義は一個の C の文(セミコロンなし)として、 適切な情報を stream に出力する必要がある。 function はその関数に対する FUNCTION_DECL ノードである。

DBX_OUTPUT_STANDARD_TYPES (syms)

コンパイルの開始時に標準的なデータ型の出力順序を 制御する必要があるときはこのマクロを定義する。 引数 syms は、ある tree であり、 これは、全ての定義済みグローバルシンボルの連鎖である。 このグローバルシンボルにはデータ型名も含まれる。

通常、DBX の出力は、整数型と文字型の定義で始まり、 特定の言語の他の全ての定義済み型がその後に特に決まった順序なしに 続く。

機種によっては、異なる特定の型を最初に出力する必要のあるものがある。 それを行なうためには、DBX_OUTPUT_STANDARD_TYPES を 定義して、それらのシンボルを必要な順序で出力するようにする。 定義済みの型で明示的に出力しないものはどれも、後で特に順不同で 出力される。

このマクロは、C 言語の場合しか動作しないようには定義しないように注意すること。 組み込み型のほとんどをアクセスするためのグローバル変数はない。 別の言語は別の型のセットを持っている可能性があるからである。 特定の型を出力する方法は、syms を眺めて、それが見つかるかどうかを 調べることである。以下に例を示す。

 
{
  tree decl;

  for (decl = syms; decl; decl = TREE_CHAIN (decl))
    if (!strcmp (IDENTIFIER_POINTER (DECL_NAME (decl)),
                 "long int"))
      dbxout_symbol (decl);
  …
}

これは、期待する型が存在しない場合には何もしない。

C の全ての組み込み型で使われる名前を見つけるには、 ‘c-decl.c’ の関数 init_decl_processing を参照すること。

以下は、特定の型を見つけるもう一つの方法である。

 
{
  tree decl;
  for (decl = syms; decl; decl = TREE_CHAIN (decl))
    if (TREE_CODE (decl) == TYPE_DECL
        && (TREE_CODE (TREE_TYPE (decl))
            == INTEGER_CST)
        && TYPE_PRECISION (TREE_TYPE (decl)) == 16
        && TYPE_UNSIGNED (TREE_TYPE (decl)))
      /* This must be unsigned short.  */
      dbxout_symbol (decl);
  …
}
NO_DBX_FUNCTION_END

スタブを包み込む形式の中には(特に ECOFF)、 .stabs "",N_FUN,,0,0,Lscope-function-1 という GDB の DBX に 対する拡張構文を取り扱えないものがある。 そういう機種ではこのマクロを定義してこの機能を外し、 他の GDB の拡張に影響しないようにする。


This document was generated using texi2html 1.78.