Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ dbx(5) — NEWS-os 3.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

dbx(1)

stab(5)

a.out(5)

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つに含まれる要素数が多い場合に有用です。

関連事項

dbx(1), stab(5), a.out(5)

NEWS-OSRelease 3.3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026