DBX(5) — UNIX Programmer’s Manual
名称
dbx − dbx シンボルテーブル情報
解説
dbx(1) のために生成されるコンパイラシンボル情報は、 stab(5) において説明されているものと同じ構造体を使用します。ただし、 追加タイプおよび有効範囲情報がシンボル名に追加されています。 シンボル情報を表すために使用されるアセンブラ擬似命令は 以下のフォーマットを備えています。
stabs “string”,kind,0,size,value
string (文字列)フィールドは、名称、ソース言語タイプ、シンボルの範囲を含み、 kind (種類)フィールドは、メモリクラス(例えば、外部、スタティック、 パラメータ、ローカル、レジスタ)を指定し、 size (サイズ)フィールドは、(関係のある場合)オブジェクトのサイズを バイト単位で指定します。 3番目のフィールド(上記の 0 )は使用されません。 グローバル変数あるいはタイプについては、 value は使用されません。ローカル変数あるいはパラメータについては、 value はフレームポインタからのオフセットになります。レジスタ変数については、 value は関連するレジスタ番号になります。
さまざまな種類の stab エントリが dbx によってどのように解釈され るかを以下に示します。
N_GSYMこのシンボルは、グローバル変数(例えば、.comm変数)です。 変数のアドレスは、対応する ld(1) のシンボルエントリから見つけ出す ことができるため、N_GSYM シンボルに関する値フィールドは無視されます。 例えば、グローバル変数“x”は、N_GSYM エントリと ld(1) エントリの両方(例えば、N_BSS + N_EXT)を持つことになります。 こうした他のエントリに関する詳細については、 a.out(5) を参照してください。
N_FUNこのシンボルは、プロシージャまたは関数です。サイズフィールドには、 エントリポイントの行番号が含まれます。値フィールドは (テキストセグメント内の)エントリポイントのアドレスを持っています。
N_STSYM
このシンボルは、初期値が設定されている静的な割り当て変数です。 値フィールドは(データセグメント内の)変数のアドレスを持っています。
N_LCSYM
このシンボルは、初期値が設定されていない静的な割り当て変数です。
N_RSYMこのシンボルは、値フィールドによって示されるレジスタ内に値が 収められているレジスタ変数です。
N_PSYMこのシンボルは、呼び出しの前にスタックに値がプッシュされるパラメータです。 値フィールドは引数フレームポインタ(NEWS では a5 レジスタ)からの 正のオフセットを持っています。
N_LSYMこのシンボルは、最も新しく定義されたプロシージャのスタックフレームに 値が格納されているローカル変数です。値は、フレームポインタ (NEWS では a6 レジスタ)からの負のオフセットです。
N_PCこのシンボルは、バークレー版の Pascal に関する事前リンクチェックを行うための分割コンパイル情報を定義します。 値フィールドはこのシンボルが定義され ている行番号を持っています。
シンボルに関するソースレベルでの情報のほとんどは、 stab エントリの string フィールドに格納されます。それぞれの文字列は、 a.out ファイル内において別々の文字列テーブルに収められるため、 任意の長さにすることができます。従って、string フィールド内の 情報の種類あるいは長さに関する制約は一切存在しないため、 この情報のフォーマットを拡張あるいは修正する際にアセンブラあるいは ローダの修正を行う必要はありません。
シンボル文字列の形式を記述する際の文法を以下に示します。 文字列値である定数を除いて、シンボル文字列内に空白は存在しません。
NAME:[a−zA−Z_][a−zA−Z_0−9]∗
INTEGER:[−][0−9][0−9]∗
REAL:[+−][0−9]∗(.[0−9][0−9]∗|)([eE]([+−]|)[0−9][0−9]∗|)
STRING:“.∗”
BSTRING:.∗
String:
NAME ‘:’ Class
‘:’ Class
Class:
‘c’ ‘=’ Constant ‘;’
Variable
Procedure
Parameter
NamedType
‘X’ ExportInfo-- エクスポートあるいはインポート情報(N_MOD2 についてのみ)
Constant:
‘i’ INTEGER
‘r’ REAL
‘c’ OrdValue
‘b’ OrdValue
‘s’ STRING
‘e’ TypeId ‘,’ OrdValue
‘S’ TypeId ‘,’ NumElements ‘,’ NumBits ‘,’ BSTRING
OrdValue:
INTEGER
NumElements:
INTEGER
NumBits:
INTEGER
Variable:
TypeId-- タイプ TypeId のローカル変数
‘r’ TypeId-- タイプ TypeId のレジスタ変数
‘S’ TypeId-- タイプ TypeId のモジュール変数(C においては静的グローバル)
‘V’ TypeId-- タイプ TypeId の変数(C においては静的ローカル)
‘G’ TypeId-- タイプ TypeId のグローバル変数
Procedure:
Proc-- トップレベルのプロシージャ
Proc ‘,’ NAME ‘,’ NAME-- 最初の NAME に対するローカルプロシージャ
-- 2番目の NAME は ld シンボルに対応する
Proc:
‘P’-- グローバルプロシージャ
‘Q’-- ローカルプロシージャ(C においては静的)
‘I’-- 内部プロシージャ(呼び出し手順とは異なる)
‘F’ TypeId-- タイプ TypeId を戻す関数
‘f’ TypeId-- ローカル関数
‘J’ TypeId-- 内部関数
Parameter:
‘p’ TypeId-- タイプ TypeId の値パラメータ
‘v’ TypeId-- タイプ TypeId の参照パラメータ
NamedType:
‘t’ TypeId-- タイプ TypeId のタイプ名
‘T’ TypeId-- struct TypeId の C 構造体タグ名
TypeId:
INTEGER-- コンパイルごとに決まるユニークなタイプナンバー
INTEGER ‘=’ TypeDef-- タイプ番号の定義
INTEGER ‘=’ TypeAttrs TypeDef
--
-- タイプ属性は、アラインメント制約条件やポインタ検査セマンティックスなど、
-- タイプに必要な追加情報です。
-- dbx は、こうした情報の一部を解釈しますが、認識できない情報があった場合
-- には、それらについて特にエラーを出さずに、その情報を無視します。従って、
-- これは、事前にリンクチェックに関する情報を追加する 1つの方法です。
--
TypeAttrs:
‘@’ TypeAttrList ‘;’
TypeAttrList:
TypeAttrList ‘,’ TypeAttr
TypeAttr
TypeAttr:
‘a’INTEGER-- アラインメント境界
‘s’INTEGER-- ビット単位のサイズ
‘p’INTEGER-- ポインタクラス(例えば、チェック)
BSTRING-- その他の情報
TypeDef:
INTEGER
Subrange
Array
Record
‘e’EnumList‘;’-- 一覧表
‘∗’TypeID-- TypeID に対するポインタ
‘S’TypeID-- TypeID のセット
‘d’TypeID-- TypeID のファイル
ProcedureType
‘i’NAME‘:’NAME‘;’-- インポートされたタイプ ModuleName:Name
‘o’NAME‘;’-- 不明瞭なタイプ
‘i’NAME‘:’NAME‘,’TypeID‘;’
‘o’NAME‘,’TypeID‘;’
Subrange:
‘r’TypeID‘;’INTEGER‘;’INTEGER
Array:
‘a’TypeID‘;’TypeID-- TypeID の配列 [TypeId]
‘A’TypeID-- TypeID のオープン配列
‘D’INTEGER‘,’TypeID-- N 次元ダイナミック配列
‘E’INTEGER‘,’TypeID-- N 次元サブ配列
ProcedureType:
‘f’TypeID‘;’-- C 関数タイプ
‘f’TypeID‘,’NumParams‘;’TParamList‘;’
‘p’NumParams‘;’TParamList‘;’
NumParams:
INTEGER
Record:
‘s’ByteSize FieldList‘;’-- 構造体/レコード
‘u’ByteSize FieldList‘;’-- C ユニオン
ByteSize:
INTEGER
FieldList :
Field
FieldList Field
Field:
NAME‘:’TypeID‘,’BitOffset‘,’BitSize‘;’
BitSize:
INTEGER
BitOffset:
INTEGER
EnumList:
Enum
EnumList Enum
Enum:
NAME ‘:’ OrdValue ‘,’
ParamList:
Param
ParamList Param
Param:
NAME ‘:’ TypeId ‘,’ PassBy ‘;’
PassBy:
INTEGER
TParam:
TypeId ‘,’ PassBy ‘;’
TParamList :
TParam
TParamList TParam
Export:
INTEGER ExportInfo
ExportInfo:
‘t’ TypeId
‘f’ TypeId ‘,’ NumParams ‘;’ ParamList ‘;’
‘p’ NumParams ‘;’ ParamList ‘;’
‘v’ TypeId
‘c’ ‘=’ Constant
‘?’は、シンボル情報が次の stab エントリ内に続いていることを示します。 このような表示が現れるのは、一覧表内においてレコードあるいは 定数のフィールドが‘;’によって分割されている場合に限られます。 これは、リストの 1つに含まれる要素数が多い場合に有用です。
関連事項
NEWS-OSRelease 3.3