XCOFF オブジェクト・ファイル・フォーマット
目的
拡張共通オブジェクト・ファイル・フォーマット (XCOFF) は、オペレーティング・システムのオブジェクト・ファイル・フォーマットです。 XCOFF は、標準の COFF を TOC モジュール・フォーマット概念と組み合わせたものである。 これによって、オブジェクト・ファイル内でダイナミック・リンクおよびユニットの置換が行われる。 XCOFF のバリエーションは、64 ビット・オブジェクト・ファイルと実行可能ファイルに使用されます。
XCOFF は、マシン・イメージ・オブジェクトおよび実行可能ファイルの正式な定義です。 これらのオブジェクト・ファイルは、言語処理プログラム (アセンブラーおよびコンパイラー) およびバインダー (またはリンク・エディター) によって作成され、主にバインダーおよびシステム・ローダーによって使用されます。
XCOFF 実行可能ファイルのデフォルト名は a.outです。
XCOFF オブジェクト・ファイルについて詳しくは、以下の情報を参照してください。
XCOFF 宣言を使用するアプリケーションの作成
XCOFF32 宣言の選択
XCOFF32 定義を選択するには、アプリケーションに適切なヘッダー・ファイルを組み込むだけで済みます。 XCOFF32 構造体、フィールド、およびプリプロセッサー定義のみが組み込まれます。
XCOFF64 宣言の選択
XCOFF64 定義を選択するには、アプリケーションでプリプロセッサー・マクロ __XCOFF64__を定義する必要があります。 XCOFF ヘッダー・ファイルが組み込まれると、 XCOFF64 の構造体、フィールド、およびプリプロセッサー定義が組み込まれます。 可能な場合、構造名とフィールド名は XCOFF32 名と同じですが、フィールド・サイズとオフセットが異なる場合があります。
XCOFF32 と XCOFF64 宣言の両方の選択
XCOFF32 と XCOFF64の両方の構造定義を選択するには、アプリケーションでプリプロセッサー・マクロ __XCOFF32__ と __XCOFF64__の両方を定義する必要があります。 これにより、両方の種類の XCOFF ファイルの構造が定義されます。 XCOFF64 ファイルの構造体および typedef 名には、接尾部「_64」が追加されます。 (詳細については、ヘッダー・ファイルを参照してください。)
ハイブリッド XCOFF 宣言の選択
アプリケーションは、 XCOFF32 ファイルと XCOFF64 ファイルの両方のフィールド定義を含む単一の構造を選択することができます。 XCOFF32 定義と XCOFF64 定義の両方で同じサイズとオフセットを持つフィールドの場合、フィールド名は保持されます。 XCOFF32 定義と XCOFF64 定義の間でサイズまたはオフセットが異なるフィールドの場合、 XCOFF32 フィールドには「32」接尾部が付き、 XCOFF64 フィールドには「64」接尾部が付きます。 ハイブリッド構造定義を選択するには、アプリケーションでプリプロセッサー・マクロ __XCOFF_HYBRID__を定義する必要があります。 例えば、シンボル・テーブル定義 ( /usr/include/syms.h内) の名前は次のようになります。n_offset32XCOFF32の n_offset フィールドに使用され、n_offset64XCOFF64の n_offset フィールドに使用されます。
XCOFF について
アセンブラーおよびコンパイラーは、XCOFF オブジェクト・ファイルを出力として生成します。 バインダーは、個々のオブジェクト・ファイルを XCOFF 実行可能ファイルに結合します。 システム・ローダーは、XCOFF 実行可能ファイルを読み取って、プログラムの実行可能メモリー・イメージを作成します。 シンボリック・デバッガーは、XCOFF 実行可能ファイルを読み取って、実行可能メモリー・イメージの関数および変数へのシンボリック・アクセスを提供します。
XCOFF ファイルには、以下のパーツが含まれています。
- 以下で構成される複合ヘッダー:
- ファイル・ヘッダー
- オプションの補助ヘッダー
- セクション・ヘッダー (ファイルの生データ・セクションごとに 1 つ)
- 生データ・セクション (セクション・ヘッダーごとに最大 1 つ)
- 個々の生データ・セクションのオプションの再配置情報
- 個々の生データ・セクションのオプションの行番号情報
- オプションのシンボル・テーブル
- オプションのストリング・テーブル。 XCOFF64 のすべてのシンボル名、および XCOFF32の 8 バイトより長いシンボル名に使用されます。
すべての XCOFF ファイルにすべての部分が含まれているわけではありません。 最小 XCOFF ファイルには、ファイル・ヘッダーのみが含まれます。
オブジェクト・ファイルと実行可能ファイル
XCOFF オブジェクト・ファイルと実行可能ファイルの構造は似ています。 XCOFF 実行可能ファイル (または「モジュール」) には、補助ヘッダー、ローダー・セクション・ヘッダー、およびローダー・セクションが含まれている必要があります。
ローダー生データ・セクションには、実行のためにモジュールをメモリーに動的にロードするために必要な情報が含まれています。 XCOFF 実行可能ファイルをメモリーにロードすると、以下の論理セグメントが作成されます。
- テキスト・セグメント (初期化元:.textXCOFF ファイルのセクション)。
- データ・セグメント。初期化されたデータで構成されます (.dataXCOFF ファイルのセクション) の後に、初期化されていないデータ (0 に初期化) が続きます。 初期化されていないデータの長さは、.bssXCOFF ファイルのセクション・ヘッダー。
XCOFF ファイル編成は、XCOFF オブジェクト・ファイルの構造を示しています。
XCOFF ヘッダー・ファイル
xcoff.h ファイルは XCOFF ファイルの構造を定義します。 xcoff.h ファイルには、以下のファイルが含まれています。
項目 | 説明 |
---|---|
filehdr.h | ファイル・ヘッダーを定義します。 |
aouthdr.h | 補助ヘッダーを定義します。 |
scnhdr.h | セクション・ヘッダーを定義します。 |
loader.h | 未加工データのフォーマットを定義します。.loaderセクション。 |
typchk.h | 未加工データのフォーマットを定義します。.typchkセクション。 |
exceptab.h | 未加工データのフォーマットを定義します。.exceptセクション。 |
dbug.h | 未加工データのフォーマットを定義します。.debugセクション。 |
reloc.h | 再配置情報を定義します。 |
linenum.h | 行番号情報を定義します。 |
syms.h | シンボル・テーブル形式を定義します。 |
storclass.h | 通常のストレージ・クラスを定義します。 |
dbxstclass.h | シンボリック・デバッガーが使用するストレージ・クラスを定義します。 |
a.out.h ファイルには、 xcoff.h ファイルが含まれています。 すべての XCOFF インクルード・ファイルには、 xcoff32_64.h ファイルが含まれています。
XCOFF オブジェクト・ファイルのセクションについて詳しくは、 「セクションとセクション・ヘッダー」 を参照してください。 シンボル・テーブルについて詳しくは、 「シンボル・テーブル情報」 を参照してください。 ストリング・テーブルについて詳しくは、 「ストリング・テーブル」 を参照してください。 デバッグ・セクションについて詳しくは、 「デバッグ・セクション」 を参照してください。
コンポジット・ファイル・ヘッダー
以下のセクションでは、XCOFF 複合ファイルのヘッダー・コンポーネントについて説明します。
- ファイル・ヘッダー (filehdr.h)
- 補助ヘッダー (aouthdr.h)
- セクション・ヘッダー (scnhdr.h)
ファイル・ヘッダー (filehdr.h)
filehdr.h ファイルは、XCOFF ファイルのファイル・ヘッダーを定義します。 ファイル・ヘッダーの長さは、 XCOFF32 では 20 バイト、 XCOFF64では 24 バイトです。 この構造体には、以下の表に示すフィールドが含まれています。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
フィールド定義
項目 | 説明 |
---|---|
f_magic | マジック・ナンバーと呼ばれる整数を指定します。これは、オブジェクト・ファイルのターゲット・マシンと環境を指定します。 XCOFF32の場合、有効な値は以下の値のみです。0x01DF(0737 8 進数)。 XCOFF64 の場合、有効な値は 0x01F7 (0767 8 進数) のみです。 これらの値のシンボル名は、ファイル /usr/include/filehdr.hにあります。 |
f_nscns | ファイルに含まれるセクション・ヘッダーの数を指定します。 最初のセクション・ヘッダーはセクション・ヘッダー番号 1 で、セクションへの参照はすべて 1 ベースです。 |
f_timdat | ファイルがいつ作成されたかを指定します (1970 年 1 月 1 日の 00:00:00 協定世界時 (UCT) からの経過秒数)。 このフィールドは、実際の時刻を指定するか、0 の値に設定する必要があります。 |
f_symptr | ファイル・ポインター (ファイルの先頭からシンボル・テーブルの先頭までのバイト・オフセット) を指定します。 以下の値の場合、f_nsymsフィールドが 0 の場合f_nsyms未定義です。 |
f_nsyms | シンボル・テーブルの項目数を指定します。 各シンボル・テーブル項目の長さは 18 バイトです。 |
f_opthdr | 補助ヘッダーの長さをバイト単位で指定します。 XCOFF ファイルを実行可能にするには、補助ヘッダーが存在し、 _AOUTHSZ_EXEC バイトの長さでなければなりません。 (_AOUTHSZ_EXEC は、 aouthdr.hに定義されています。) |
f_flags | オブジェクト・ファイルのタイプを記述するフラグのビット・マスクを指定します。 フラグは、以下の情報によって定義されます。
|
補助ヘッダー (aouthdr.h)
補助ヘッダーには、モジュールのロードと実行に使用される、システム依存およびインプリメンテーション依存の情報が含まれています。 補助ヘッダー内の情報は、実行時にシステム・ローダーによって処理される必要があるファイルの量を最小化します。
バインダーは、システム・ローダーが使用する補助ヘッダーを生成します。 ロードされないオブジェクト・ファイルには、補助ヘッダーは必要ありません。 補助ヘッダーがコンパイラーおよびアセンブラーによって生成される場合、そのヘッダーはバインダーによって無視されます。
補助ヘッダーの C 言語構造体は、 aouthdr.h ファイルに定義されています。 補助ヘッダーには、以下の表に示すフィールドが含まれています。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
フィールド定義
以下の情報は、補助ヘッダー・フィールドを定義しています。 2 つのラベルを持つ項目の場合、括弧内のラベルは、代替の元の COFF a.out ファイル・フォーマット名です。
項目 | 説明 |
---|---|
o_mflags (magic) | 以下の値の場合、o_vstampフィールドが 1 より大きい場合、o_mflagsフィールドは将来の使用のために予約されており、0 が含まれている必要があります。 それ以外の場合、このフィールドは使用されません。 |
o_vstamp (vstamp) | この補助ヘッダーのフォーマット・バージョンを指定します。 有効な値は 1 および 2 です。 使用中のo_vstampXCOFF32 ファイル内のフィールドが 2 の場合は、n_typeシンボル・テーブル項目のフィールドが使用されます。 |
o_tsize (tsize) | 装置の生データのサイズ (バイト数) を指定します。.textセクション。 この.textセクションには通常、プログラムの読み取り専用部分が含まれます。 これは、以下に含まれている値と同じです。s_sizeのセクション・ヘッダーのフィールド.textセクション。 |
o_dsize (dsize) | 装置の生データのサイズ (バイト数) を指定します。.dataセクション。 この.dataセクションには、プログラムの初期化されたデータが含まれ、書き込み可能です。 これは、以下に含まれている値と同じです。s_sizeのセクション・ヘッダーのフィールド.dataセクション。 |
o_bsize (bsize) | 以下のサイズ (バイト単位) を指定します。.bss領域。これは、実行中に初期化されていない変数に使用され、書き込み可能です。 次のファイルに生データが存在しません:.bssセクション。 これは、以下に含まれている値と同じです。s_sizeのセクション・ヘッダーのフィールド.bssセクション。 |
o_entry (entry) | エントリー・ポイントの仮想アドレスを指定します。 (以下の定義を参照してください。o_snentryフィールド。) アプリケーション・プログラムの場合、この仮想アドレスは関数記述子のアドレスです。 関数記述子には、エントリー・ポイント自体とその TOC アンカーの両方のアドレスが含まれています。 エントリー・ポイント関数記述子の、それを含むセクションの先頭からのオフセットは、次のように計算できます。 ここでs_paddr指定されたセクション・ヘッダーに含まれている仮想アドレスです。 |
o_text_start (text_start) | .text セクションの仮想アドレスを指定します。 これは, システムの最初のバイトに割り当てられた (つまり, 使用される) アドレスです。.text生データ・セクション。 これは、以下に含まれている値と同じです。s_paddrのセクション・ヘッダーのフィールド.textセクション。 |
o_data_start (data_start) | 仮想アドレスを指定します。.dataセクション。 これは, システムの最初のバイトに割り当てられた (つまり, 使用される) アドレスです。.data生データ・セクション。 これは、以下に含まれている値と同じです。s_paddrのセクション・ヘッダーのフィールド.dataセクション。 アドレス指定のために、.bss後に続くと見なされます。.dataセクション。 |
o_toc | TOC アンカーの仮想アドレスを指定します (以下の定義を参照)。o_sntocフィールド)。 |
o_snentry | エントリー・ポイントを含むファイル・セクションの番号を指定します。 (このフィールドには、ファイル・セクション・ヘッダーのシーケンス番号が含まれます。) エントリー・ポイントは、以下の場所になければなりません。.textまたは.dataセクション。 |
o_sntext | ファイルの番号を指定します。.textセクション。 (このフィールドには、ファイル・セクション・ヘッダーのシーケンス番号が含まれます。) |
o_sndata | ファイルの番号を指定します。.dataセクション。 (このフィールドには、ファイル・セクション・ヘッダーのシーケンス番号が含まれます。) |
o_sntoc | TOC を含むファイル・セクションの番号を指定します。 (このフィールドには、ファイル・セクション・ヘッダーのシーケンス番号が含まれます。) |
o_snloader | システム・ローダー情報が入っているファイル・セクションの番号を指定します。 (このフィールドには、ファイル・セクション・ヘッダーのシーケンス番号が含まれます。) |
o_snbss | ファイルの番号を指定します。.bssセクション。 (このフィールドには、ファイル・セクション・ヘッダーのシーケンス番号が含まれます。) |
o_algntext | 以下のいずれかの csect に必要な最大位置合わせの対数 (基数 2) を指定します。.textセクション。 |
o_algndata | 以下のいずれかの csect に必要な最大位置合わせの対数 (基数 2) を指定します。.dataおよび.bssセクション。 |
o_modtype | モジュール・タイプを指定します。 値は ASCII 文字ストリングです。 以下のモジュール・タイプがシステム・ローダーによって認識されます。
|
o_cpuflag | ビット・フラグ-オブジェクトの cputype。 |
o_cputype | 予約済み このバイトは 0 に設定する必要があります。 |
o_maxstack | この実行可能ファイルに許可される最大スタック・サイズ (バイト単位) を指定します。 値が 0 の場合、システム・デフォルトの最大スタック・サイズが使用されます。 |
o_maxdata | この実行可能ファイルに許可される最大データ・サイズ (バイト単位) を指定します。 値が 0 の場合、システム・デフォルトの最大データ・サイズが使用されます。 |
o_debugger | このフィールドには 0 を入れる必要があります。 ロードされたプログラムのデバッグ中に、このフィールドのメモリー・イメージがデバッガーによって変更され、トラップ命令が挿入されることがあります。 |
o_sntdata | 以下の番号を指定します。.tdataFILE SECTION. (このフィールドには、ファイル・セクション・ヘッダーのシーケンス番号が含まれます。) |
o_sntbss | 以下の番号を指定します。.tbssFILE SECTION. (このフィールドには、ファイル・セクション・ヘッダーのシーケンス番号が含まれます。) |
o_flags | 4 つの 1 ビット・フラグと 1 つの 4 ビット・フラグで構成されます。.tdata位置合わせ:
|
o_textpsize | EXEC テキストのページ・サイズを指定します。 デフォルト値は 0 (システム選択ページ・サイズ) です。 |
o_datapsize | EXEC データのページ・サイズを指定します。 デフォルト値は 0 (システム選択ページ・サイズ) です。 以下の値o_datapsizeラージ・ページ・データ要求をオーバーライドします (XCOFF ファイルに F_LPDATA ビットを設定することによって)。 |
o_stackpsize | スタックのページ・サイズを指定します。 デフォルト値は 0 (システム選択ページ・サイズ) です。 |
o_shmpsize64 | ページのサイズを指定します。exec共用メモリー。 デフォルト値は 0 (システムが選択したページ・サイズ) です。 このフィールドは、 XCOFF64 定義にのみ存在します。 |
o_x64flags | 16 個のフラグ・ビットで構成されます。 このフィールドは、 XCOFF64 定義にのみ存在します。
|
一般に、オブジェクト・ファイルには、特定のタイプの複数のセクションが含まれている可能性がありますが、ロード可能モジュールでは、正確に 1 つのセクションが存在する必要があります。.text,.data,.bssおよび.loaderセクション。 ロード可能オブジェクトにも 1 つのオブジェクトがある場合があります。.tdataセクションと 1 つ.tbssセクション。
セクション・ヘッダー (scnhdr.h)
XCOFF ファイルの各セクションには対応するセクション・ヘッダーがありますが、一部のセクション・ヘッダーには対応するロー・データ・セクションがない場合があります。 セクション・ヘッダーは、XCOFF ファイル内に含まれる各セクションの識別情報およびファイル・アクセス情報を提供します。 XCOFF32 ファイルの各セクション・ヘッダーの長さは 40 バイトですが、 XCOFF64 セクション・ヘッダーの長さは 72 バイトです。 セクション・ヘッダーの C 言語構造体は、 scnhdr.h ファイルにあります。 セクション・ヘッダーには、以下の表に示すフィールドが含まれています。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
フィールド定義
以下の情報は、セクション・ヘッダー・フィールドを定義します。
項目 | 説明 |
---|---|
s_name | 8 バイトのヌル埋め込みセクション名を指定します。 8 バイトのセクション名には、終了ヌル文字はありません。 代わりに、s_flagsフィールドの代わりにs_nameセクション・タイプを決定するフィールド。 同じタイプの 2 つのセクションは異なる名前を持つことがあり、特定のアプリケーションがそれらを区別することができます。 |
s_paddr | セクションの物理アドレスを指定します。 これは、コンパイラーおよびバインダーによってセクションの最初のバイトに割り当てられ、使用されるアドレスです。 このフィールドには、以下を除くすべてのセクションについて 0 が入っていなければなりません.text,.dataおよび.bssセクション。 |
s_vaddr | セクションの仮想アドレスを指定します。 このフィールドの値は, このフィールドの値と同じです。s_paddr設定します。 |
s_size | このセクションのサイズ (バイト単位) を指定します。 |
s_scnptr | ファイル・ポインター (ファイルの先頭からこのセクションの生データまでのバイト・オフセット) を指定します。 このフィールドが 0 の場合、このセクションには生データはありません。 そうでない場合は、生データのサイズを以下の中に含める必要があります。s_size設定します。 |
s_relptr | このセクションの再配置項目へのファイル・ポインター (ファイルの先頭からのバイト・オフセット) を指定します。 このセクションに再配置エントリーがない場合、このフィールドには 0 が含まれている必要があります。 |
s_lnnoptr | このセクションの行番号項目へのファイル・ポインター (ファイルの先頭からのバイト・オフセット) を指定します。 このセクションに行番号項目がない場合、このフィールドには 0 が入っていなければなりません。 |
s_nreloc | このセクションの再配置エントリーの数を指定します。 XCOFF32 ファイルでは、65,534 を超える再配置エントリーが必要な場合、フィールド値は 65535 になり、 STYP_OVRFLO セクション・ヘッダーには、再配置エントリーの実際のカウントが含まれます。s_paddr設定します。 「セクションおよびセクション・ヘッダー」 のオーバーフロー・ヘッダーの説明を参照してください。 このフィールドが 65535 に設定されている場合、s_nlnnoフィールドも 65535 に設定する必要があります。 |
s_nlnno | このセクションの行番号項目の数を指定します。 XCOFF32 ファイルでは、65,534 を超える行番号項目が必要な場合、フィールド値は 65535 になり、 STYP_OVRFLO セクション・ヘッダーには、行番号項目の実際の数が含まれます。s_vaddr設定します。 「セクションおよびセクション・ヘッダー」 のオーバーフロー・ヘッダーの説明を参照してください。 このフィールドが 65535 に設定されている場合、s_nrelocフィールドも 65535 に設定する必要があります。 |
s_flags | セクション・タイプを定義するフラグを指定します。 セクション・タイプは、セクションの内容を識別し、システム・ローダーのバインダーによるセクションの処理方法を指定します。 s_flags フィールドは、2 つの 16 ビット・フィールドで構成されます。 下位 16 ビットは、基本セクション・タイプを指定します。 下位 16 ビットには単一ビットのみを設定する必要があります。 高位 16 ビットは、セクション・サブタイプを指定します。 サブタイプのない 1 次セクション・タイプの場合、上位 16 ビットは 0 でなければなりません。 注: strip コマンドは、 s_flags フィールドを -1 に設定して、セクション・ヘッダーを論理的に削除します。
有効なビット値は以下のとおりです。
|
項目 | 説明 |
---|---|
|
|
s_flags続行 | 有効なビット値は以下のとおりです。
|
セクションおよびセクション・ヘッダー
セクション・ヘッダーは、XCOFF ファイルの内容に関するさまざまな情報を提供するために定義されます。 XCOFF ファイルを処理するプログラムは、一部の有効なセクションのみを認識します。
XCOFF ファイル・セクションについて詳しくは、以下の情報を参照してください。
現在のアプリケーションは以下を使用しません:s_nameセクション・タイプを決定するフィールド。 ただし、以下の表に示すように、システム・ツールでは従来の名前が使用されます。
説明 | 複数可? | s_flag (およびその従来の名前) |
---|---|---|
テキスト・セクション | Yes | 標準テキスト (STYP_TEXT) (.text) |
データ・セクション | Yes | 暗号化データ (.data) |
BSS セクション | Yes | STYP_BSS (.bss) |
埋め込みセクション | Yes | STYP_PAD (.pad) |
Loader Section | No | STYP_LOADER (.loader) |
デバッグ・セクション | No | STYP_DEBUG (デバッグ) (.debug) |
タイプ・チェック・セクション | Yes | STYP_TYPCHK (.typchk) |
例外セクション | No | STYP_EXCEPT (.except) |
オーバーフロー・セクション | Yes(1 つにつき 1 つ.textまたは.dataセクション) | STYP_OVRFLO (.ovrflo) |
「コメント」セクション | Yes | 「STYP_INFO」 (.info) |
TDATA セクション | Yes | STYP_TDATA (.tdata) |
TBSS セクション | Yes | STYP_TBSS (.tbss) |
DWARF セクション | Yes | STYP_DWARF (STYP_DWARF) |
SSUBTYPE_DWINFO (.dwinfo) | ||
SSUBTYPE_DWLINE (.dwline) | ||
SSUBTYPE_DWPBNMS (.dwpbnms) | ||
SSUBTYPE_DWBTYP (.dwpbtyp) | ||
SSUBTYPE_DWARNGE (.dwarnge) | ||
SSUBTYPE_DWABREV (.dwabrev) | ||
SSUBTYPE_DWSTR (.dwstr) | ||
SSUBTYPE_DWRNGES (.dwrnges) | ||
SSUBTYPE_DWLOC (.dwloc) | ||
SSUBTYPE_DWFRAME (SSUBTYPE_DWFRAME)(.dwframe) | ||
SSUBTYPE_DWMAC (.dwmac) |
セクション・ヘッダーの一部のフィールドは、常に使用されるとは限りません。また、特殊な使用法がある場合もあります。 これは、以下のフィールドに関係します。
項目 | 説明 |
---|---|
s_name | 入力では、バインダーおよびシステム・ローダーによって無視されます。 出力では、従来の名前 (「従来のヘッダー名」の表に示されています) が使用されます。 |
s_scnptr | 無視される対象.bssセクション。 |
s_relptr | 次に対して認識されます:.text ,.data ,.tdata、および STYP_DWARF セクションのみ。 |
s_lnnoptr | 次に対して認識されます:.textセクションのみ。 その他の場合、値は 0 でなければなりません。 |
s_nreloc,s_nlnno | XCOFF32 ファイル内の再配置または行番号フィールドのオーバーフローを処理します。 (XCOFF64 ファイルにオーバーフロー・セクション・ヘッダーがない可能性があります。) セクションに 65,534 を超える再配置項目または行番号項目がある場合、これらのフィールドは両方とも以下の値に設定されます。65535この場合、オーバーフロー・セクション・ヘッダーには、s_flagsSTYP_OVRFLO と等しいフィールドは、再配置および行番号カウント情報を入れるために使用されます。 オーバーフロー・セクション・ヘッダーのフィールドは、次のように定義されます。
このs_sizeおよびs_scnptrオーバーフロー・セクション・ヘッダーのフィールドの値は 0 です。 このs_relptrおよびs_lnnoptrフィールドの値は、対応する 1 次セクション・ヘッダーの値と同じでなければなりません。 |
XCOFF ファイルは、以下のセクションに特別な意味を与えます。
- この.text,.dataおよび.bssセクション、およびオプションの.tdataおよび.tbssプログラムのメモリー・イメージを定義します。 関連付けられている再配置部品.textおよび.dataセクションには、置換リンク・エディットに使用できるように、完全なバインダー再配置情報が含まれています。 次のもののみ.textセクションは行番号部分に関連付けられています。 実行可能コードに関連したパーツは、コンパイラーおよびアセンブラーによって作成されます。
- この.padセクションは、ヌルで埋められた生データ・セクションとして定義されます。このセクションは、ファイル・ブロック境界やシステム・ページ境界などの定義済み境界でファイル内の後続のセクションを位置合わせするために使用されます。 埋め込みは、対応するセクション・ヘッダーがない XCOFF ファイルで許可されるため、バインダーは埋め込みセクション・ヘッダーを生成しません。
- この.loaderセクションは、動的ローダー情報を含むように定義された生データ・セクションです。 このセクションはバインダーによって生成され、独自の自己完結型シンボル・テーブルと再配置テーブルを持っています。 XCOFF シンボル・テーブルからこのセクションへの参照はありません。
- この.debugsection は、記号デバッガーが必要とするタブ (記号テーブル) または辞書情報を含むように定義された生データ・セクションです。
- この.dwinfo,.dwline,.dwpbnms,.dwpbtyp,.dwarnge,.dwabrev,.dwstr,および.dwrngesセクションは、シンボル・デバッガーのシンボル・テーブルおよびソース・ファイル情報を含むように定義されたロー・データ・セクションです。
- この.typchksection は、パラメーターおよび引数型検査ストリングを含むように定義されたロー・データ・セクションです。
- この.exceptセクションは、プログラム実行での例外の理由を識別するために使用される例外テーブルを含むように定義されたロー・データ・セクションです。
- この.infoコメント・セクションは、特殊な処理ユーティリティー・プログラムにとって重要なコメントまたはデータを含むように定義された未加工データ・セクションです。
- この.debug,.except,.infoおよび.typchkセクションは、コンパイラーおよびアセンブラーによって作成されます。 これらのセクションまたはこれらのセクション内の項目への参照は、XCOFF シンボル・テーブルから作成されます。
XCOFF ファイル・セクションについて詳しくは、 "Loader Section (loader.h)," "Debug Section," "Type-Check Section," "Exception Section," and "Comment Section" を参照してください。
ローダー・セクション (loader.h)
ローダー・セクションには、実行可能 XCOFF オブジェクトをロードして再配置するためにシステム・ローダーが必要とする情報が含まれています。 ローダー・セクションは、バインダーによって生成されます。 ローダー・セクションには、s_flagsXCOFF セクション・ヘッダー内の STYP_LOADER のセクション・タイプ・フラグ。 慣例により、.loaderローダー・セクション名です。 このセクションのデータは、XCOFF シンボル・テーブルのエントリーによって参照されません。
ローダー・セクションは、以下の部分で構成されます。
- ヘッダー・フィールド
- シンボル・テーブル
- 再配置表
- インポート・ファイル ID ストリング
- シンボル名ストリング・テーブル
ローダー・セクションの C 言語構造は、 loader.h ファイルにあります。
ローダー・ヘッダー・フィールドの定義
以下の表では、ローダー・セクションのヘッダー・フィールド定義について説明します。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
以下の情報は、ローダー・セクションのヘッダー・フィールドを定義します。
項目 | 説明 |
---|---|
l_version | ローダー・セクションのバージョン番号を指定します。 値 1 は XCOFF32; でサポートされ、値 1 または 2 は XCOFF64でサポートされます。 |
l_nsyms | ローダー・セクション内のシンボル・テーブル・エントリーの数を指定します。 この値は、ローダー・セクションに含まれているシンボル・テーブル・エントリーの実際のカウントであり、 .text 、 .data 、 .bss 、 .tdata 、および .tbss の各シンボル・エントリーの 5 つの暗黙的なエントリーは含まれません。 |
l_nreloc | ローダー・セクション内の再配置テーブル・エントリーの数を指定します。 |
l_istlen | ローダー・セクション内のインポート・ファイル ID ストリング・テーブルのバイト長を指定します。 |
l_nimpid | インポート・ファイル ID ストリング・テーブル内のインポート・ファイル ID の数を指定します。 |
l_impoff | ローダー・セクションの先頭から最初のインポート・ファイル ID までのバイト・オフセットを指定します。 |
l_stlen | ローダー・セクション・ストリング・テーブルの長さを指定します。 |
l_stoff | ローダー・セクションの先頭からストリング・テーブルの最初の項目までのバイト・オフセットを指定します。 |
l_symoff | ローダー・セクションの先頭からローダー・シンボル・テーブルの先頭までのバイト・オフセットを指定します ( XCOFF64 のみ)。 XCOFF32では、ローダー・ヘッダーの後にシンボル・テーブルが続きます。 |
l_rldoff | ローダー・セクションの先頭からローダー・セクション再配置エントリーの先頭までのバイト・オフセットを指定します ( XCOFF64 のみ)。 XCOFF32では、再配置エントリーはローダー・シンボル・テーブルの直後に続きます。 |
ローダー・シンボル・テーブル・フィールドの定義
ローダー・セクション・シンボル・テーブルには、システム・ローダーがそのインポートおよびエクスポート・シンボル処理および動的再配置処理のために必要とするシンボル・テーブル・エントリーが含まれています。
loader.h ファイルは、シンボル・テーブル・フィールドを定義します。 各項目の長さは 24 バイトです。
5 つの暗黙的な外部シンボルがあり、それぞれが.text,.data,.bss,.tdataおよび.tbssセクション。 これらのシンボルは、それぞれシンボル・テーブル索引値 0、1、2、-1、および -2 を使用して、再配置テーブル・エントリーから参照されます。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
シンボル・テーブル・フィールドは、以下のとおりです。
項目 | 説明 |
---|---|
l_name | (XCOFF32 のみ) 長さが 8 バイト以下の場合に、8 バイトのヌル埋め込みシンボル名を指定します。 それ以外の場合、このフィールドは、シンボル名にアクセスするための以下の 2 つの 4 バイト整数として扱われます。
|
l_offset | (XCOFF64 のみ) このフィールドの使用法は、l_offsetXCOFF32のフィールド。 |
l_value | シンボルの仮想アドレスを指定します。 |
l_scnum | シンボルを含む XCOFF セクションの番号を指定します。 シンボルが未定義またはインポートされた場合、セクション番号は 0 です。 それ以外の場合、セクション番号は、.text,.data、または.bssセクション。 セクション・ヘッダーには、1 から始まる番号が付けられます。 |
l_smtype | シンボル・タイプ、インポート・フラグ、エクスポート・フラグ、およびエントリー・フラグを指定します。 ビット 0 から 4 は、次のように定義されたフラグ・ビットです。
ビット 5 から 7 は、以下の定義を持つ 3 ビットのシンボル・タイプ・フィールドを構成します。
|
|
シンボルのストレージ・マッピング・クラスを指定します。これは、 syms.h で定義されています。x_smclascsect 補助シンボル・テーブル・エントリーのフィールド。 値のシンボリック形式は XMC_xxです。ここで、 xx は PR、RO、GL、XO、SV、 SV64、 SV3264、RW、TC、TD、DS、UA、BS、UC、TL、または UL です。 詳しくは、 「 C_EXT、C WEAKEXT、および C_HIDEXT シンボルの csect 補助項目」 を参照してください。 |
|
インポート・ファイル ID ストリングを指定します。 この整数は、ローダー・セクションのインポート・ファイル ID 名ストリング・テーブル内のインポート・ファイル ID ストリングの位置の序数値です。 インポートされたシンボルの場合、このフィールドの値 0 は、シンボルがシステム・ローダーへの据え置きインポートであることを示します。 据え置きインポートは、ローダーの処理後もアドレスが未解決のままである可能性があるシンボルです。 シンボルがインポートされなかった場合、このフィールドの値は 0 でなければなりません。 |
|
パラメーター・タイプ・チェック・ストリングへのオフセットを指定します。 バイト・オフセットは、ローダー・セクション・ストリング・テーブルの先頭からのオフセットです。 バイト・オフセットは、パラメーター・タイプ・チェック・ストリングの最初のバイトを指します (長さフィールドではありません)。 パラメーター・タイプ・チェック・ストリングについて詳しくは、 「タイプ・チェック・セクション」 を参照してください。 値が 0 の場合l_parmフィールドは、このシンボルにパラメーター・タイプ検査ストリングが存在しないことを示し、シンボルはユニバーサル・ハッシュを持つものとして扱われます。 |
ローダー再配置テーブルのフィールド定義
ローダー・セクション再配置テーブル構造には、ロード時に実行可能 XCOFF ファイルを正しく再配置するためにシステム・ローダーが必要とするすべての再配置情報が含まれています。 loader.h ファイルは、再配置テーブル・フィールドを定義します。 ローダー・セクション再配置テーブルの各項目の長さは、 XCOFF32では 12 バイト、 XCOFF64では 16 バイトです。 l_vaddr
、 l_symndx
、およびl_rtype
フィールドは、 reloc.h ファイルに定義されている通常の再配置エントリーの対応するフィールドと同じ意味を持ちます。 再配置エントリーについて詳しくは、 XCOFF ファイルの再配置情報 (reloc.h)を参照してください。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loader.h ファイルは、以下のフィールドを定義します。
名前 | 説明 |
---|---|
l_vaddr | 再配置可能参照の仮想アドレスを指定します。 |
l_symndx | 参照されるシンボルのローダー・セクション・シンボル・テーブル・インデックス (n番目のエントリー) を指定します。 値 0、1、および 2 は、以下に対する暗黙参照です。.text,.dataおよび.bssセクション。 記号索引 3 は、ローダー・セクション記号テーブルに実際に含まれている最初の記号の索引です。 注: エクスポートされたシンボルへの参照は、シンボルのセクション番号 (シンボル番号 0、1、または 2) またはエクスポートされたシンボルの実際の番号を使用して行うことができます。
|
l_rtype | 再配置のサイズとタイプを指定します。 (このフィールドの解釈は, システムのr_typereloc.h ファイルのフィールド) 再配置エントリーについて詳しくは、 XCOFF ファイルの再配置情報 (reloc.h)を参照してください。 |
l_rsecnm | 再配置されるセクションのセクション番号を指定します。 これは、セクション・ヘッダーへの 1 ベースの索引です。 |
ローダー・インポート・ファイル ID 名テーブル定義
モジュールのローダー・セクション・インポート・ファイル ID 名ストリングは、モジュールを正常にロードするためにシステム・ローダーがロードする必要がある従属モジュールのリストを提供します。 ただし、このリストには、指定されたモジュールが依存するモジュールの名前は含まれていません。
オフセット | 長さ (バイト数) | 名前および説明 |
---|---|---|
0 | N1 | l_impidpath (l_impidpath) インポート・ファイル ID パス・ストリング (ヌル区切り) |
N1 + 1 | N2 | l_impidbase (l_impidbase) インポート・ファイル ID の基本ストリング (ヌル区切り) |
N1 + N2 + 2 | N3 | l_impidmem (l_impidmem) インポート・ファイル ID メンバー・ストリング (ヌル区切り) |
ストリングごとにフィールドが繰り返されます。 |
各インポート・ファイル ID 名は、ヌルで区切られた 3 つのストリングで構成されます。
最初のインポート・ファイル ID は、システム・ローダーによって使用されるデフォルトの LIBPATH 値です。 LIBPATH 情報は、コロンで区切られたファイル・パスで構成されます。 ベース名またはアーカイブ・メンバー名がないため、ファイル・パスの後に 3 つのヌル・バイトが続きます。
インポート・ファイル ID 名テーブルの各項目は、以下のもので構成されます。
- インポート・ファイル ID パス名
- ヌル区切り文字 (ASCII ヌル文字)
- インポート・ファイル ID のベース名
- ヌル区切り文字
- インポート・ファイル ID アーカイブ・ファイル・メンバー名
- ヌル区切り文字
次に例を示します。
/usr/lib\0mylib.a\0shr.o\0
ローダー・ストリング・テーブルの定義
ローダー・セクション・ストリング・テーブルには、パラメーター・タイプ検査ストリング、 XCOFF64 ファイルのすべてのシンボル名、および XCOFF32 ファイルの 8 バイトより長いシンボル名が含まれています。 各ストリングは、2 バイトの長さフィールドとそれに続くストリングで構成されます。
オフセット | 長さ (バイト数) | 説明 |
---|---|---|
0 | 2 | ストリングの長さ。 |
2 | n | シンボル名ストリング (ヌル区切り) またはパラメーター・タイプ・ストリング (ヌル区切りではない)。 |
ストリングごとにフィールドが繰り返されます。 |
シンボル名はヌル終了です。 長さフィールドの値には、ストリングの長さと NULL 終止符の長さを加えたものが含まれますが、長さフィールド自体の長さは含まれません。
パラメーター・タイプ検査ストリングにはバイナリー値が含まれ、ヌル終了ではありません。 長さフィールドの値には、ストリングの長さのみが含まれますが、長さフィールド自体の長さは含まれません。
ローダー・セクションのシンボル・テーブル項目には、長さフィールドではなく、ストリングの最初のバイトを指すバイト・オフセット値が含まれています。
ローダー・セクションのヘッダーの内容
ローダー・セクションのセクション・ヘッダー・フィールドの内容は、以下のとおりです。
名前 | 内容 |
---|---|
s_name | ローダー |
s_paddr | 0 |
s_vaddr | 0 |
s_size | ローダー・セクションのサイズ (バイト単位) |
s_scnptr | XCOFF ファイルの先頭からローダー・セクション・データの最初のバイトまでのオフセット |
s_relptr | 0 |
s_lnnoptr | 0 |
s_nreloc | 0 |
s_nlnno | 0 |
s_flags | 「STYP_LOADER」 |
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。
XCOFF ファイル・セクションについて詳しくは、 「セクションとセクション・ヘッダー」 「デバッグ・セクション」 「タイプ・チェック・セクション」 「例外セクション」 および 「コメント・セクション」 を参照してください。
デバッグ・セクション
デバッグ・セクションには、シンボリック・デバッガー・スタブ・ストリング (シンボル・テーブル・ストリング) が含まれています。 これは、コンパイラーおよびアセンブラーによって生成されます。 これは、シンボリック・デバッガーが使用するシンボル属性情報を提供します。 デバッグ・セクションには、XCOFF セクション・ヘッダーに STYP_DEBUG のセクション・タイプ・フラグがあります。 慣例により、.debugデバッグ・セクション名です。 このセクションのデータは、XCOFF シンボル・テーブルのエントリーから参照されます。 stabstring は、ヌル終了の文字ストリングです。 各ストリングの前には、 XCOFF32 の 2 バイトの長さフィールド、または XCOFF64の 4 バイトの長さフィールドがあります。
フィールド定義
シンボリック・デバッガーのスタブ・ストリングごとに、以下の 2 つのフィールドが繰り返されます。
- ストリングの長さを含む 2 バイト (XCOFF32) または 4 バイト (XCOFF64) の長さフィールド。 長さフィールドに含まれる値には、終了ヌル文字の長さが含まれますが、長さフィールド自体の長さは含まれません。
- シンボリック・デバッガー・スタブ・ストリング。
スタブ・ストリングの特定の形式については、 シンボリック・デバッガーの stabstring 文法の説明を参照してください。
デバッグ・セクションのヘッダーの内容
デバッグ・セクションのセクション・ヘッダー・フィールドの内容は、以下のとおりです。
名前 | 内容 |
---|---|
s_name | デバッグ |
s_paddr | 0 |
s_vaddr | 0 |
s_size | デバッグ・セクションのサイズ (バイト単位) |
s_scnptr | XCOFF ファイルの先頭からデバッグ・セクション・データの最初のバイトまでのオフセット |
s_relptr | 0 |
s_lnnoptr | 0 |
s_nreloc | 0 |
s_nlnno | 0 |
s_flags | STYP_DEBUG (STYP_DEBUG) |
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。
XCOFF ファイル・セクションについて詳しくは、 「セクションとセクション・ヘッダー」 「デバッグ・セクション」 「タイプ・チェック・セクション」、 「例外セクション」 および 「コメント・セクション」 を参照してください。
DWARF セクション
DWARF セクションには、シンボリック・デバッガーのデバッグ情報が含まれています。 DWARF は、デバッガー・スタブ・ストリングの代わりに使用される代替デバッグ・フォーマットです。 さまざまな DWARF セクションの内容については、「 www.dwarfstd.org」から入手できる「DWARF Debugging Information Format」で説明されています。
すべての DWARF セクションには、XCOFF セクション・ヘッダーに STYP_DWARF の基本セクション・タイプ・フラグがあります。 従来のセクション名は、 「従来のヘッダー名」にリストされています。
DWARF セクションのヘッダー内容
デバッグ・セクションのセクション・ヘッダー・フィールドの内容は、以下のとおりです。
名前 | 内容 |
---|---|
s_name | s_flags に依存 |
s_paddr | 0 |
s_vaddr | 0 |
s_size | セクションのサイズ (バイト単位) です。 |
s_scnptr | XCOFF ファイルの先頭からセクション・データの最初のバイトまでのオフセット。 |
s_relptr | XCOFF ファイルの先頭から、セクションの再配置エントリーまでのオフセット。 |
s_lnnoptr | 0 |
s_nreloc | 再配置エントリーの数。 |
s_nlnno | 0 |
s_flags | STYP_DWARF は DWARF サブタイプ値を使用します。 |
タイプ-チェック・セクション
タイプ・チェック・セクションには、タイプ・チェック・ハッシュ・ストリングが含まれ、コンパイラーおよびアセンブラーによって生成されます。 これは、別個にコンパイルされたオブジェクト・ファイルをリンクするときに、変数の不一致および引数インターフェース・エラーを検出するためにバインダーによって使用されます。 (ローダー・セクションのタイプ・チェック・ハッシュ・ストリングは、プログラムを実行する前にこれらのエラーを検出するために使用されます。) タイプ・チェック・セクションの XCOFF セクション・ヘッダーには、 STYP_TYPCHK のセクション・タイプ・フラグがあります。 慣例により、.typchkタイプ・チェック・セクション名です。 このセクションのストリングは、 XCOFF シンボル・テーブルの項目から参照されます。
フィールド定義
以下の 2 つのフィールドは、パラメーター・タイプ検査ストリングごとに繰り返されます。
- タイプ・チェック・ストリングの長さを含む 2 バイトの長さフィールド。 長さフィールドに含まれる値には、長さフィールド自体の長さは含まれません。
- パラメーター・タイプ検査ハッシュ・ストリング。
データのタイプ・エンコードおよびフォーマットの検査
タイプ・チェック・ハッシュ・ストリングは、プログラムの実行前にエラーを検出するために使用されます。 すべての外部シンボル (データおよび関数) に関する情報は、コンパイラーによってエンコードされ、バインド時およびロード時に整合性が検査されます。 タイプ・チェック・ストリングは、サポートされる各言語のセマンティクスによって必要とされる最大限の検査を実施し、複数の言語で作成されたアプリケーションを保護するように設計されています。
タイプ・エンコードおよびチェック・メカニズムは、チェックの柔軟性を提供する 4 つの部分からなるハッシュ・エンコードを備えています。 また、このメカニズムは、どのコードにも一致する固有値 UNIVERSAL も使用します。 UNIVERSAL ハッシュは、アセンブリー・プログラムのエスケープ・メカニズムとして使用することも、タイプ情報またはサブルーチン・インターフェースが不明なプログラムのエスケープ・メカニズムとして使用することもできます。 UNIVERSAL ハッシュは、4 つのブランク ASCII 文字 (0x20202020) または 4 つのヌル文字 (0x00000000) です。
以下のフィールドは、タイプ・エンコードおよび検査メカニズムに関連付けられています。
項目 | 説明 |
---|---|
コードの長さ | ハッシュの長さを含む 2 バイト・フィールド。 このフィールドの値は 10 です。 |
言語ID | 各言語を表す 2 バイトのコード。 これらのコードは、以下に定義されているものと同じです。e_lang「例外セクション」 情報のフィールド。 |
汎用ハッシュ (general hash) | データ記号または関数を記述するための最も一般的な形式を表す 4 バイト・フィールド。 このフォームは、 でサポートされる言語で最も一般的なものです。 情報が不完全であるか使用できない場合は、ユニバーサル・ハッシュを生成する必要があります。 一般的なハッシュは言語に依存せず、バインディングが成功するためには一致する必要があります。 |
言語ハッシュ (language hash) | 一般ハッシュの内容の、より詳細な言語固有の表現が含まれている 4 バイト・フィールド。 これにより、特定の言語で必要とされる最も厳密な型検査が可能になります。 この部分は、言語内バインディングで使用され、両方の記号が同じ言語 ID を持っていない限り、検査されません。 |
セクション・ヘッダーの内容
タイプ・チェック・セクションのセクション・ヘッダー・フィールドの内容は、以下のとおりです。
名前 | 内容 |
---|---|
s_name | .typchk (.typchk) |
s_paddr | 0 |
s_vaddr | 0 |
s_size | タイプ・チェック・セクションのサイズ (バイト単位) |
s_scnptr | XCOFF ファイルの先頭からタイプ・チェック・セクション・データの最初のバイトまでのオフセット |
s_relptr | 0 |
s_lnnoptr | 0 |
s_nreloc | 0 |
s_nlnno | 0 |
s_flags | STYP_TYPCHK。 |
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。
XCOFF ファイル・セクションについて詳しくは、 「セクションとセクション・ヘッダー」 「デバッグ・セクション」 「タイプ・チェック・セクション」 「例外セクション」 および 「コメント・セクション」 を参照してください。
例外セクション
例外セクションには、トラップ命令、ソース言語識別コード、およびトラップ理由コードのアドレスが含まれています。 このセクションは、コンパイラーおよびアセンブラーによって作成され、実行時または実行後に、特定のトラップまたは例外が発生した理由を識別するために使用されます。 例外セクションには、XCOFF セクション・ヘッダーに STYP_EXCEPT のセクション・タイプ・フラグがあります。 慣例により、.except例外セクション名です。 例外セクションのデータは、XCOFF シンボル・テーブルの項目から参照されます。
例外表の項目の値が 0 の場合e_reasonフィールドには、関数の C_EXT、C_WEAKEXT、 または C_HIDEXT シンボル・テーブル・エントリーに対するシンボル・テーブル索引が入っています。 シンボル・テーブルから例外テーブル内の項目への参照は、関数補助シンボル・テーブル項目を介して行われます。 この項目について詳しくは、 「csect Auauxiliary Entry for C_EXT, C_WEAKEXT and C_HIDEXT Symbols」 を参照してください。
例外セクション項目の C 言語構造体は、 exceptab.h ファイルにあります。
例外セクションの項目には、以下の表に示すフィールドが含まれています。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
フィールド定義
以下に、例外セクションにリストされているフィールドを定義します。
項目 | 説明 |
---|---|
e_symndx | 整数が含まれています (e_paddrフィールド)。 使用中のe_reasonフィールドが 0 の場合、このフィールドは関数のシンボル・テーブル索引です。 |
e_paddr | 仮想アドレスを含む (仮想アドレスをオーバーレイする)e_symndxフィールド)。 使用中のe_reasonフィールドがゼロ以外の場合、このフィールドはトラップ命令の仮想アドレスです。 |
e_lang | ソース言語を指定します。 以下のリストは、使用可能な値を定義しています。e_lang設定します。
|
e_reason | 8 ビットのコンパイラー依存トラップ例外理由コードを指定します。 ゼロは、新しい機能の例外テーブル項目の開始を示すため、有効なトラップ例外理由コードではありません。 |
セクション・ヘッダーの内容
以下のフィールドは、例外セクションのセクション・ヘッダー・フィールドの内容です。
名前 | 内容 |
---|---|
s_name | .except |
s_paddr | 0 |
s_vaddr | 0 |
s_size | 例外セクションのサイズ (バイト単位)。 |
s_scnptr | XCOFF ファイルの先頭から例外セクション・データの最初のバイトまでのオフセット |
s_relptr | 0 |
s_lnnoptr | 0 |
s_nreloc | 0 |
s_nlnno | 0 |
s_flags | STYP_EXCEPT |
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。
XCOFF ファイル・セクションについて詳しくは、 「セクションとセクション・ヘッダー」 「デバッグ・セクション」 「タイプ・チェック・セクション」 「例外セクション」 および 「コメント・セクション」 を参照してください。
コメント・セクション
コメント・セクションには、アプリケーションにとって特殊な処理重要度の情報が含まれています。 このセクションは、コンパイラーおよびアセンブラーによって作成され、アプリケーションの特殊な処理ニーズを満たすために実行時または実行後に使用されます。 コメント・セクションには、 XCOFF セクション・ヘッダーに STYP_INFO のセクション・タイプ・フラグがあります。 慣例により、.infoコメント・セクション名です。 コメント・セクションのデータは、 XCOFF シンボル・テーブルの C_INFO エントリーから参照されます。
コメント・セクションの内容は、4 バイトの繰り返しインスタンスで構成されます。lengthバイトのストリング (任意のバイナリー値を含む) が後に続くフィールド。 各ストリングの長さは、先行する 4 バイトに保管されます。length設定します。 バイトのストリングは、ヌル文字またはその他の特殊文字で終了する必要はありません。 指定された長さには, システムの長さは含まれません。lengthフィールド自体。 長さ 0 は許可されます。 バイト・ストリングの形式が指定されていません。
コメント・セクション・ストリングは、 XCOFF シンボル・テーブル内のエントリーから参照されます。 参照を行うシンボルのストレージ・クラスは C_INFOです。 詳しくは、 「ストレージ・クラスごとのシンボル・テーブル・フィールドの内容」 を参照してください。
C_INFO シンボルは、直前の C_FILE、 C_EXT、C_WEAKEXT、または C_HIDEXT シンボルと関連付けられています。
セクション・ヘッダーの内容
以下のフィールドは、コメント・セクションのセクション・ヘッダー・フィールドの内容です。
名前 | 内容 |
---|---|
s_name | .info (.info) |
s_paddr | 0 |
s_vaddr | 0 |
s_size | コメント・セクションのサイズ (バイト単位) |
s_scnptr | XCOFF ファイルの先頭からコメント・セクション・データの最初のバイトまでのオフセット |
s_relptr | 0 |
s_lnnoptr | 0 |
s_nreloc | 0 |
s_nlnno | 0 |
s_flags | 「STYP_INFO」 |
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。
XCOFF ファイル・セクションについて詳しくは、 「セクションとセクション・ヘッダー」 「デバッグ・セクション」 「タイプ・チェック・セクション」 「例外セクション」 および 「コメント・セクション」 を参照してください。
XCOFF ファイルの再配置情報 (reloc.h)
一部のセクションには再配置情報があります。 このs_relptrセクション・ヘッダーのフィールドは、セクションの再配置エントリーに対するファイル・オフセットを指定します。 個々の XCOFF オブジェクト・ファイルがリンクされて XCOFF 実行可能ファイルが作成されると、バインダーは再配置情報を使用して、アドレス定数およびその他の再配置可能値を変更します。
コンパイラーおよびアセンブラーは、セクションの情報の再配置項目を生成します。 バインダーは、以下に含まれる再配置情報を生成します。.loaderシステム・ローダーが必要とするセクション。
各再配置項目の長さは 10 バイト ( XCOFF64の場合は 14 バイト) です。 (以下の場所にある再配置エントリー.loaderセクションの長さは 12 バイト ( XCOFF64の場合は 16 バイト) で、本書のローダー・セクションの説明で説明されています。 詳しくは、 「再配置テーブル・フィールドの定義」 を参照してください。) 再配置エントリーの C 言語構造は、 reloc.h ファイルにあります。 再配置項目には、以下の表に示すフィールドが含まれます。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
セクションの再配置エントリーは、アドレスの昇順でなければなりません。
(ローダー・セクションには、システム・ローダーによって使用される再配置エントリーの単一セットが含まれています。したがって、変更する必要があるセクションを識別するために、各再配置エントリー内にセクション番号が必要です。)
フィールド定義
項目 | 説明 |
---|---|
r_vaddr | バインダーによる変更が必要な値の仮想アドレスを指定します。 データを含むセクションの先頭から変更する必要があるデータへのバイト・オフセット値は、次のように計算できます。 offset_in_section = r_vaddr - s_paddr |
r_symndx | 参照されるシンボルを見つけるための XCOFF シンボル・テーブルへのゼロ・ベースの索引を指定します。 シンボル・テーブル・エントリーには、以下の時点で適用される変更値を計算するために使用されるアドレスが含まれています。r_vaddr再配置アドレス。 |
r_rsize | 再配置のサイズと符号を指定します。 その内容の詳細については、以下のリストを参照してください。
|
r_rtype | 変更値の計算に使用する再配置アルゴリズムをバインダーに示す、8 ビットの再配置タイプ・フィールドを指定します。 この値は、以下によって指定された再配置可能参照ロケーションで適用されます。r_vaddr設定します。 以下の再配置タイプが定義されています。
|
r_rtype続行 |
|
r_rtype続行 |
|
追加の再配置機能
標準的な方法は、未解決の参照または異なるセクション間の参照についてのみ、再配置情報を保持することです。 参照が解決されると、再配置情報は破棄されます。 これは、増分バインドおよび固定アドレス・スペース・モデルには十分です。 再配置可能アドレス・スペース・モデルを再バインドおよび処理する機能を提供するために、再配置情報は XCOFF ファイルから廃棄されません。
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。
再配置フィールド・テーブル定義について詳しくは、ローダー・セクションの 「Relocation Table Field Definitions」 を参照してください。
XCOFF ファイルの行番号情報 (linenum.h)
行番号エントリーは、ソース・レベルでコードをデバッグするためにシンボリック・デバッガーによって使用されます。 存在する場合、シンボリック・デバッガー・ブレークポイントを持つことができるソース行ごとに単一行番号エントリーがあります。 行番号は機能別にグループ化されます。 各機能の開始は、以下によって識別されます。l_lnno値 0 を含むフィールド。 最初のフィールドはl_symndxは、関数の C_EXT、C_WEAKEXT、または C_HIDEXT シンボル・テーブル・エントリーに対するシンボル・テーブル索引です。
各行番号項目の長さは 6 バイトです。 行番号項目の C 言語構造体は、 linenum.h ファイルにあります。 行番号項目には、以下の表に示すフィールドが含まれています。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
フィールド定義
以下のリストは、行番号項目を定義しています。
項目 | 説明 |
---|---|
l_symndx | 関数名に対するシンボル・テーブル索引を指定します (l_paddrフィールド)。 使用中のl_lnnoフィールドが 0 の場合は、このフィールドの解釈が使用されます。 |
l_paddr | 行番号に関連付けられたコードの最初の命令の仮想アドレスを指定します (l_symndxフィールド)。 使用中のl_lnnoフィールドが 0 でない場合は、このフィールドの解釈が使用されます。 |
l_lnno | 関数の開始を基準とする行番号、または関数の開始を示す 0 のいずれかを指定します。 |
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。
デバッグについては、 「デバッグ・セクション」 を参照してください。
Symbol Table Information
XCOFF ファイルに対して 1 つの複合シンボル・テーブルが定義されます。 シンボル・テーブルには、バインダー (外部シンボル) とシンボリック・デバッガー (関数定義、および内部シンボルと外部シンボル) の両方に必要な情報が含まれています。
シンボル・テーブルは、18 バイトの固定長項目のリストで構成されます。 シンボル・テーブルに表示される各シンボルは、少なくとも 1 つの固定長エントリーで構成され、一部のエントリーの後には同じサイズの補助エントリーが続きます。
シンボル・テーブルについて詳しくは、以下の情報を参照してください。
外部シンボルごとに、外部シンボルに関する追加情報を提供する 1 つ以上の補助項目が必要です。 バインダーにとって重要な外部シンボルには、主に 3 つのタイプがあり、以下の機能を実行します。
- 交換可能ユニットまたは CSECT を定義します。
- csects 内の関数またはエントリー・ポイントの外部名を定義します。
- 別の XCOFF オブジェクト内の外部関数の名前を参照します。
交換可能ユニット (csect) を定義するシンボルの場合、csect 補助項目は、csect の長さとストレージ・マッピング・クラスを定義します。 csect 内の関数の外部名を定義するシンボルの場合、csect 補助エントリーは、その関数の収容 csect、パラメーター・タイプ・チェック情報、およびシンボリック・デバッガー情報を指します。 外部関数の名前を参照するシンボルの場合、csect 補助項目はシンボルを外部参照として識別し、パラメーター・タイプ検査情報を指します。
シンボル・テーブルの内容
XCOFF シンボル・テーブルには、以下の一般的な内容と順序があります。
- 特定のソース・ファイルに関連したすべてのシンボル・テーブル・エントリーを囲むために使用される C_FILE シンボル・テーブル・エントリー。
- ソース・ファイル・スコープの C_INFO コメント・セクション・シンボル・テーブル・エントリー。 これらは、 C_FILE エントリーの後、最初の csect 定義シンボル・テーブル・エントリーの前に続きます。
- ファイル・スコープのシンボリック・デバッガー・シンボル・テーブル・エントリー。 これらは、 C_FILE 項目の後、最初の csect 項目の前に続きます。
- DWARF デバッグ情報の C_DWARF シンボル。 これらは C_FILE エントリーの後に続き、 C_FILE エントリーとその C_DWARF シンボルの間に csect シンボルがあってはなりません。
- csect に含まれるすべてのシンボルを定義し、囲むために使用される csect 定義シンボル・テーブル・エントリー。
- C_INFO csect 定義シンボル・テーブル・エントリーに続くコメント・セクション・シンボル・テーブル・エントリーは、その csect に関連付けられます。
- csect 定義シンボル・テーブル・エントリーまたはラベル・シンボル・テーブル・エントリーに続くすべてのシンボリック・デバッガー・シンボル・テーブル・エントリーは、その csect またはラベルに関連付けられます。
シンボル・デバッガーの要件に対応し、ガーベッジ・コレクション、増分バインディング、および再バインドなどのバインダー・アクションの結果としてオブジェクト・ファイルのさまざまなセクションのバインダーによる効率的な管理を可能にするために、コンパイラーとアセンブラーの両方によってシンボル・テーブルの順序付けを行う必要があります。 この順序付けは、csect が削除または置換された場合に、csect に関連するすべてのシンボル・テーブル情報も削除または置換できるようにするために、バインダーによって必要とされます。 同様に、ソース・ファイルに関連するすべての CSECT を削除または置換すると、そのファイルに関連するすべてのシンボル・テーブルおよび関連情報も削除または置換することができます。
シンボル・テーブル・レイアウト
次の例は、シンボル・テーブルの一般的な順序を示しています。
un_external Undefined global symbols
.file Prolog --defines stabstring compaction level
.file Source file 1
.info Comment section reference symbol with file scope
stab Global Debug symbols of a file
dwarf DWARF Information of a file
csect Replaceable unit definition (code)
.info Comment section reference symbol with csect scope
function Local/External function
stab Debug and local symbols of function
function Local/External function
stab Debug and local symbols of function
..............
csect Replaceable unit definition (local statics)
stab Debug and local statics of file
..............
csect Relocatable unit definition (global data)
external Defined global symbol
stab Debug info for global symbol
..............
.file Source file 2
stab Global Debug symbols of a file
dwarf DWARF Information of a file
csect Replaceable unit definition (code)
function Local/External function
stab Debug and local symbols of function
..............
csect Replaceable unit definition (local statics)
stab Debug and Local statics of file
..............
csect Replaceable unit definition (global data)
external Defined global symbol
stab Debug info for global symbol
.file Source file
..............
シンボル・テーブル・エントリー (syms.h)
各シンボルは、ストレージ・クラスおよびタイプに関係なく、シンボル・テーブル内に固定形式のエントリーを持っています。 さらに、一部のシンボル・タイプには、固定形式項目の直後に追加の (補助) シンボル・テーブル項目がある場合があります。 シンボル・テーブルの各項目の長さは 18 バイトです。 シンボル・テーブル・エントリーの C 言語構造体は、 syms.h ファイルにあります。 シンボル・テーブルの最初の項目の索引は 0 です。 次の表は、シンボル・テーブル内の各シンボルの固定形式部分の構造を示しています。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
フィールド定義
以下に、シンボル・テーブル・エントリー・フィールドを定義します。
項目 | 説明 |
---|---|
n_name | XCOFF32 でのみ使用されます。 8 バイトのヌル埋め込みシンボル名またはシンボリック・デバッガー・スタブ・ストリングを指定します。 ストレージ・クラス・フィールドは、フィールドがシンボル名かシンボリック・デバッガー・ストリングかを判別するために使用されます。 規則により、高位ビットがオンのストレージ・クラス値は、このフィールドがシンボリック・デバッガー・スタブ・ストリングであることを示します。 XCOFF32 シンボル名が 8 バイトより長い場合、フィールドは以下の 2 つのフィールドとして解釈されます。
|
n_offset | XCOFF64: ストリング・テーブル内のシンボル名へのバイト・オフセットを指定します。.debugセクション。 バイト・オフセットは、ストリング・テーブルの先頭を基準にしています。.debugセクション。 バイト・オフセット値 0 は、ヌルまたは長さゼロのシンボル名です。 ( XCOFF32 の場合のみ、以下と共に使用されます。n_zeroes. 上記の項目を参照してください。) |
n_value | シンボル値を指定します。 シンボル値フィールドの内容は、以下の定義に示すように、ストレージ・クラスによって異なります。
|
n_scnum | 以下のいずれかのシンボルに関連したセクション番号を指定します。
|
n_type | このフィールドの使用法は、シンボルのストレージ・クラスによって異なります。 C_FILE シンボルについては、 「 C_FILE シンボルのファイル補助エントリー」 を参照してください。 C_EXT、 C_HIDEXT、および C_WEAKEXT シンボルの場合、n_typeフィールドには、 XCOFF32の 2 つの解釈と、 XCOFF64の 1 つの解釈があります。 XCOFF32 に古い解釈が使用されるのは、o_vstamp補助ヘッダーのフィールドは 1 です。 古い XCOFF32 解釈では、シンボルが関数の場合、ビット 10 (0x0020) を設定できます。 それ以外の場合、ビット 10 は 0 でなければなりません。 残りのビットは、タイプ情報を表すために COFF ファイルで定義され、使用されなくなります。 XCOFF64 および新しい XCOFF32 解釈では、n_typeフィールドは、次のようにシンボル・タイプおよび可視性に使用されます。
シンボルの可視性については、 ld コマンドで説明されています。 注: その他のすべてのストレージ・クラスの場合は、n_typeフィールドは将来の使用のために予約されており、0 を含む必要があります。
|
n_sclass | シンボルのストレージ・クラスを指定します。 storclass.h および dbxstclass.h ファイルには、ストレージ・クラスの定義が含まれています。 詳しくは、 「ストレージ・クラスごとのシンボル・テーブル・フィールドの内容」 を参照してください。 |
n_numaux | シンボルの補助項目の数を指定します。 XCOFF64では、補助シンボルには識別タイプ・フィールドがありますが、 XCOFF32ではタイプ・フィールドがありません。 したがって、1 つのシンボルに複数の補助項目が必要な場合、補助項目の順序は規則に従って決定されます。 |
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。
シンボル・テーブル補助情報
シンボル・テーブルには、シンボルの補足情報を提供する補助項目が含まれています。 シンボルの補助項目は、そのシンボル・テーブル項目の後に続きます。 各補助項目の長さは、シンボル・テーブル項目 (18 バイト) と同じです。 補助項目の形式と数量は、ストレージ・クラス (n_sclass) およびタイプ (n_type) シンボル・テーブル・エントリーの
XCOFF32では、ストレージ・クラス C_EXT、C_WEAKEXT または C_HIDEXT を持ち、複数の補助項目を持つシンボルは、最後の補助項目として csect 補助項目を持つ必要があります。 XCOFF64では、x_auxtype各補助シンボル・テーブル・エントリーのフィールドはシンボルを区別しますが、規則では、csect 補助シンボル・テーブル・エントリーを最後に生成します。
File Auxiliary Entry for C_FILE Symbols (C_FILE シンボルのファイル補助項目)
ファイル補助シンボル・テーブル項目は、ソース・ファイル名とコンパイラー関連ストリングを含むように定義されます。 ファイル補助項目はオプションであり、 C_FILEのストレージ・クラス値を持つシンボル・テーブル項目と共に使用されます。 ファイル補助項目の C 言語構造体は、 syms.h ファイルの x_file 構造体にあります。
C_FILE シンボルは、ソース・ファイル名情報、ソース言語 ID と CPU バージョン ID 情報、およびオプションでコンパイラー・バージョンとタイム・スタンプ情報を提供します。
このn_typeシンボル・テーブル項目のフィールドは、ソース・ファイルのソース言語とコンパイル済みオブジェクト・ファイルの CPU バージョン ID を識別します。 フィールド情報は以下のとおりです。
項目 | 説明 |
---|---|
Source Language ID | 以下の上位バイトをオーバーレイします。n_type設定します。 このフィールドには、ソース言語 ID が含まれます。 このフィールドの値は, 次の項目に定義されています。e_lang「例外セクション」 のフィールド。 このフィールドは、シンボリック・デバッガーがソース言語を判別するために使用することができます。 このフィールドのオプション値は、 C_FILE シンボル・テーブル・エントリーのないオブジェクト・ファイルからのシンボルの場合は 248 (TB_OBJECT)、デバッグ情報を提供するために使用される生成済みエントリーの場合は 249 (TB_FRONT) または 250 (TB_BACK) です。 ソース言語が TB_FRONT または TB_BACK の場合、8 文字の名前フィールドは次で始まります。' '(ブランク), '¥ 0' (NULLl). ソース言語が TB_FRONT の場合、3 番目のバイトはオブジェクト・ファイルの stabstring 圧縮レベルであり、n_offset フィールドには TB_BACK シンボル・テーブル・エントリーのシンボル・テーブル索引 (存在する場合) が含まれます。存在しない場合は 0 が含まれます。 |
CPU Version ID | 以下の下位バイトとして定義されます。n_type設定します。 ファイルに対して生成される命令の種類を指定します。 以下の値が定義されます。
両方のフィールドが 0 の場合、ソース言語に関する情報は提供されません。
|
フィールド定義
以下に、上記のフィールドを定義します。
項目 | 説明 |
---|---|
x_fname | ソース・ファイル名またはコンパイラー関連ストリングを指定します。 ファイル名またはストリングが 8 バイトより長い場合、フィールドは以下の 2 つのフィールドとして解釈されます。
|
x_ftype | ソース・ファイルのストリング・タイプを指定します。
|
(名前なし) | 予約済み このフィールドには 0 の 2 バイトが含まれている必要があります。 |
x_auxtype | (XCOFF64 のみ) 補助項目のタイプを指定します。 この補助項目の _AUX_FILE が入ります。 |
ファイル補助項目が使用されない場合には, 記号名はソース・ファイルの名前です。 ファイル補助項目が使用される場合には, 記号名は次のようになっていなければなりません。.file最初のファイル補助項目 (規則により) にはソース・ファイル名が含まれます。 指定されたシンボル・テーブル項目には、複数のファイル補助項目を使用することができます。 このn_numauxフィールドには, ファイル補助項目の数が入っています。
csect 補助項目 (C_EXT、C_WEAKEXT、および C_HIDEXT シンボル用)
csect 補助項目は、CSECT (セクション定義)、エントリー・ポイント (ラベル定義)、および外部参照 (ラベル宣言) を識別します。 csect 補助項目は、 C_EXT、C_WEAKEXT、または C_HIDEXTのストレージ・クラス値を持つシンボル・テーブル項目ごとに必要です。 詳しくは、 「シンボル・テーブル・エントリー (syms.h)」 を参照してください。 規則により、 XCOFF32 ファイル内の csect 補助項目は、複数の補助項目を持つ外部シンボルの最後の補助項目でなければなりません。 csect 補助項目の C 言語構造体は、 syms.h ファイル内の x_csect 構造体にあります。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
フィールド定義
項目 | 説明 |
---|---|
x_scnlen | 以下に依存する意味を指定します。x_smtypことができます。
|
x_parmhash | パラメーター・タイプのバイト・オフセットを指定します。.typchkセクション。 バイト・オフセットは、以下の先頭からです。.typchkXCOFF ファイル内のセクション。 バイト・オフセットは、パラメーター・タイプ・チェック・ストリングの最初のバイトを指します (長さフィールドではありません)。 詳しくは、 「タイプ・チェック・セクション」 を参照してください。 値が 0 の場合x_parmhashフィールドは、このシンボルにパラメーター・タイプ検査ストリングが存在しないことを示し、シンボルはユニバーサル・ハッシュを持つものとして扱われます。 C_HIDEXT シンボルの場合、値は 0 でなければなりません。 |
x_snhash | 次の項目を指定してください:.typchkセクション番号。 パラメーター・タイプ・チェック・ストリングを含む XCOFF セクション番号。 セクション番号は 1 ベースです。 一部のコンパイラーによって生成されるオブジェクト・ファイルとの互換性のため (以下の場合)x_parmhash0 ではないが、x_snhashが 0 の場合は、最初の.typchkファイル内のセクションが使用されます。 C_HIDEXT シンボルの場合、値は 0 でなければなりません。 |
x_smtyp | シンボルの位置合わせとタイプを指定します。
|
x_smclas | csect ストレージ・マッピング・クラスを指定します。 このフィールドにより、バインダーは、ストレージ・マッピング・クラスごとに CSECT を配置することができます。 このx_smclasフィールドが使用されるのは, システムのビット 5-7 の値がx_smtypフィールドは XTY_SD または XTY_CMのいずれかです。 以下のストレージ・マッピング・クラスは読み取り専用であり、通常は以下にマップされます。.textセクション:
以下のストレージ・マッピング・クラスは読み取り/書き込みであり、通常は以下にマップされます。.dataまたは.bssセクション:
|
x_smclas続行 |
|
x_smclas続行 |
|
x_smclas続行 |
以下のストレージ・マッピング・クラスは読み取り/書き込みであり、.tdataセクション:
以下のストレージ・マッピング・クラスは読み取り/書き込みであり、.tbssセクション:
|
x_stab | 予約済み (64 ビットの場合は未使用)。 |
x_snstab | 予約済み (64 ビットの場合は未使用)。 |
C_EXT、C_WEAKEXT、および C_HIDEXT の各シンボルの補助項目
補助シンボル・テーブル項目は XCOFF で定義され、定義された関数に関連した参照情報およびサイズ情報を含みます。 これらの補助項目は、シンボリック・デバッガーが使用するために、コンパイラーおよびアセンブラーによって作成されます。 XCOFF32では、関数補助シンボル・テーブル・エントリーに必要な情報が含まれています。 XCOFF64では、機能補助項目と例外補助項目の両方が必要になる場合があります。 単一の C_EXT、C_WEAKEXT、または C_HIDEXT シンボルに対して両方の補助項目が生成される場合、x_sizeおよびx_endndxフィールドは同じ値でなければなりません。
関数補助シンボル・テーブル項目は、以下の表に定義されています。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
フィールド定義
以下は、機能補助項目フォーマット・テーブルにリストされているフィールドを定義しています。
項目 | 説明 |
---|---|
x_exptr | (XCOFF32 のみ) このフィールドは、例外テーブル・エントリーを指すファイル・ポインターです。 値は、XCOFF オブジェクト・ファイルの先頭からのバイト・オフセットです。 XCOFF64 ファイルでは、例外テーブル・オフセットは例外補助シンボル・テーブル・エントリーにあります。 |
x_fsize | 関数のサイズをバイト単位で指定します。 |
x_lnnoptr | 行番号へのファイル・ポインターを指定します。 値は、XCOFF オブジェクト・ファイルの先頭からのバイト・オフセットです。 |
x_endndx | この機能を超える次の項目のシンボル・テーブル索引を指定します。 |
XCOFF64 でのみ定義されている例外補助シンボル・テーブル項目を以下の表に示します。
オフセット | 長さ | 名前および説明 |
---|---|---|
0 | 8 |
|
8 | 4 |
|
12 | 4 |
|
16 | 1 |
|
17 | 1 |
|
フィールド定義
以下は、例外補助項目フォーマット・テーブルにリストされるフィールドを定義しています。
項目 | 説明 |
---|---|
x_exptr | このフィールドは、例外テーブル・エントリーを指すファイル・ポインターです。 値は、XCOFF オブジェクト・ファイルの先頭からのバイト・オフセットです。 |
x_fsize | 関数のサイズをバイト単位で指定します。 |
x_endndx | この機能を超える次の項目のシンボル・テーブル索引を指定します。 |
Block Auxiliary Entry for the C_BLOCK and C_FCN Symbols (C_BLOCK および C_FCN シンボルのブロック補助項目)
シンボル補助シンボル・テーブル項目は、関数の開始ブロックと終了ブロックに関連した情報を提供するために XCOFF で定義されます。 シンボル補助シンボル・テーブル・エントリーは、シンボリック・デバッガーが使用するためにコンパイラーによって作成されます。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
フィールド定義
以下に、上記のフィールドを定義します。
項目 | 説明 |
---|---|
(名前なし) | 予約済み |
x_lnnohi | XCOFF32の場合、ソース・ファイルの行番号の高位 16 ビットを指定します。 |
x_lnno | ソース・ファイルの行番号を指定します。 このフィールドの最大値は、 XCOFF64 の場合は 65535、 XCOFF64の場合は 232 です。 |
C_STAT シンボル用のセクション補助項目
セクション補助シンボル・テーブル・エントリー ID は XCOFF32 で定義され、コンパイラーまたはアセンブラーによって作成されたセクションのサイズに関する情報をシンボル・テーブルに提供します。 コンパイラーによるこの情報の生成はオプションであり、バインダーによって無視され、除去されます。
オフセット | 長さ (バイト数) | 名前および説明 |
---|---|---|
0 | 4 |
|
4 | 2 |
|
6 | 2 |
|
8 | 10 |
|
フィールド定義
以下のリストは、フィールドを定義しています。
項目 | 説明 |
---|---|
x_scnlen | セクションの長さをバイト単位で指定します。 |
x_nreloc | 再配置エントリーの数を指定します。 このフィールドの最大値は 65535 です。 |
x_nlinno | 行番号の数を指定します。 このフィールドの最大値は 65535 です。 |
(名前なし) | 予約済み |
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。 シンボル・テーブルについて詳しくは、 「シンボル・テーブル情報」 を参照してください。
デバッグについては、 「デバッグ・セクション」 を参照してください。
C_DWARF シンボル用の SECT 補助項目
SECT 補助シンボル・テーブル項目は、 C_DWARF シンボルによって表されるセクション部分のサイズに関する情報をシンボル・テーブルに提供するように定義されています。
フィールド名と説明 | XCOFF32 | XCOFF64 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
フィールド定義
以下のリストは、フィールドを定義しています。
項目 | 説明 |
---|---|
(no name) | 予約済み |
x_scnlen | このシンボルによって表されるセクションの部分のサイズ。 |
x_nreloc | このシンボルの再配置エントリーの数。 バインダーはこのフィールドを 0 に設定します。 |
ストレージ・クラスごとのシンボル・テーブル・フィールドの内容
このセクションでは、定義された各ストレージ・クラスのシンボル・テーブル・フィールドの内容を定義します。n_sclass) XCOFF で使用されます。 次の表は、ストレージ・クラス項目をアルファベット順にリストしています。 詳しくは、 「シンボル・テーブル・エントリー (syms.h)」 を参照してください。
クラス定義 | フィールドの内容 |
---|---|
C_BCOMM 135 共通ブロックの開始 |
|
C_BINCL 108 インクルード・ファイルの先頭 |
|
C_BLOCK 100 内部ブロックの開始または終了 |
|
C_BSTAT 143 静的ブロックの開始 |
|
C_DECL 140 オブジェクト (タイプ) の宣言 |
|
C_DWARF 112 DWARF シンボル |
|
C_ECOML 136 共通ブロックのローカル・メンバー |
|
C_ECOMM 137 共通ブロックの終わり |
|
C_EINCL 109 インクルード・ファイルの終わり |
|
C_ENTRY 141 代替エントリー |
|
C_ESTAT 144 静的ブロックの終わり |
|
C_EXT 2 外部シンボル (バインダー処理用の外部シンボルの定義) |
|
C_FCN 101 機能の開始または終了 |
|
C_FILE 103 ソース・ファイル名およびコンパイラー情報 |
|
C_FUN 142 関数またはプロシージャー |
|
C_GSYM 128 グローバル変数 |
|
C_GTLS 145 グローバル・スレッド・ローカル変数 |
|
C_HIDEXT 107 名前なし外部シンボル |
|
C_INFO 100 コメント・セクション参照 |
|
C_LSYM 129 スタックに割り振られた自動変数 |
|
C_NULL 0 削除のマークが付けられたシンボル・テーブル・エントリー。 |
|
C_PSYM 130 スタックに割り振られたサブルーチンの引数 |
|
C_RPSYM 132 レジスターに保管されている関数またはプロシージャーの引数 |
|
C_RSYM 131 レジスター変数 |
|
C_STAT 3 静的シンボル (不明。 一部のコンパイラーは、シンボル・テーブル内にこれらのシンボルを生成して、.text,.dataおよび.bssセクション。 バインダーによって使用または保存されない。) |
|
C_STSYM 133 静的に割り振られたシンボル |
|
C_STTLS 146 静的スレッド・ローカル変数 |
|
C_TCSYM 134 予約済み |
|
C_WEAKEXT 111 弱い外部シンボル (バインダー処理用の弱い外部シンボルの定義) |
|
- * ロング・ネームの場合、n_offset値は次の値へのオフセットです:.debugセクション。
- ** ロング・ネームの場合、n_offsetvalue はストリング・テーブルへのオフセットです。
使用量およびシンボル値の分類別のストレージ・クラス
バインダーによって使用および再配置されるストレージ・クラスを以下に示します。 記号値 (n_value) アドレスです。
クラス | 説明 |
---|---|
C_EXT (C) | 外部シンボルまたはグローバル・シンボルを指定します。 |
C_WEAKEXT (C_WEAKEXT) | 弱いバインディングを持つ外部シンボルまたはグローバル・シンボルを指定します。 |
C_HIDEXT (C_HIDEXT) | 内部シンボルを指定します。 |
C_BLOCK (C_BLOCK) | 内部ブロックの開始または終了を指定します (.bbまたは.eb) |
C_FCN (C_FCN) | 関数の開始または終了を指定します (.bfまたは.efのみ) |
C_STAT (C_STAT) | 静的シンボル (静的 csect に含まれる) を指定します。 |
以下は、バインダーおよびシンボリック・デバッガーによって使用されるストレージ・クラス、またはファイル・スコープおよびアクセスの目的で他のユーティリティーによって使用されるストレージ・クラスです。
クラス | 説明 |
---|---|
C ファイル | ソース・ファイル名を指定します。 このn_valueフィールドは、次のファイル項目のシンボル索引を保持します。 このn_namefield はファイルの名前です。 |
C_BINCL (C_BINCL) | インクルード・ヘッダー・ファイルの先頭を指定します。 このn_valuefield は、オブジェクト・ファイル内の、インクルード・ファイルから最初の行番号までの行番号バイト・オフセットです。 |
C_EINCL (C_EINCL) | インクルード・ヘッダー・ファイルの終わりを指定します。 このn_valuefield は、インクルード・ファイルから最後の行番号までのオブジェクト・ファイル内の行番号バイト・オフセットです。 |
c_info | comment セクション内のストリングの位置を指定します。 このn_valuefield は、指定された STYP_INFO セクションのバイト・ストリングへのオフセットです。 ストリングの前には 4 バイトが付きます。length設定します。 このn_nameフィールドはバインダーによって保存されます。 このフィールド内のアプリケーション定義の固有名を使用して、アプリケーション用のコメント・セクション・ストリングのみへのアクセスをフィルターに掛けることができます。 |
C_DWARF (C_DWARF) | 現行の C_FILE シンボルに適用される DWARF セクションの部分を指定します。 このn_valueフィールドには、このシンボルによって表されるセクションの部分に対するセクションのオフセットが含まれます。 このn_scnlenSECT 補助項目のフィールドには、この記号で表されるセクションの部分の長さが入ります。 |
以下は、シンボリック・デバッグの目的でのみ存在するストレージ・クラスです。
クラス | 説明 |
---|---|
C_BCOMM (C_BCOMM) | 共通ブロックの先頭を指定します。 このn_valueフィールドは無意味です。名前は共通ブロックの名前です。 |
C_ECOML (C_ECOML) | 共通ブロックのローカル・メンバーを指定します。 このn_valueフィールドは共通ブロック内のバイト・オフセットです。 |
C_ECOMM (C_ECOMM) | 共通ブロックの終わりを指定します。 このn_valueフィールドには意味がありません。 |
C_BSTAT (C_BSTAT) | 静的ブロックの先頭を指定します。 このn_valuefield は、静的シンボルを含む csect のシンボル・テーブル索引です。名前は .bs です。 |
C_ESTAT | 静的ブロックの終わりを指定します。 このn_valueフィールドは無意味です。名前は .es です。 |
C_DECL (C_DECL) | オブジェクトの宣言 (型宣言) を指定します。 このn_valueフィールドが未定義です。 |
C_ENTRY (C_ENTRY) | 代替項目 (FORTRAN) を指定し、対応する C_EXT または C_WEAKEXT シンボルを持ちます。 このn_valueフィールドが未定義です。 |
C_FUN (_F) | 関数またはプロシージャーを指定します。 対応する C_EXT または C_WEAKEXT シンボルを持つことができます。 このn_valueフィールドは、収容 csect 内のバイト・オフセットです。 |
C_GSYM (C) | グローバル変数を指定し、対応する C_EXT または C_WEAKEXT シンボルを持ちます。 このn_valueフィールドが未定義です。 |
C_LSYM | スタックに割り振られる自動変数を指定します。 このn_valueフィールドは、スタック・フレーム (プラットフォーム依存) に対して相対的なバイト・オフセットです。 |
C_PSYM (C_PSYM) | スタックに割り当てられたサブルーチンに対する引数を指定します。 このn_valueフィールドは、スタック・フレーム (プラットフォーム依存) に対するバイト・オフセットです。 |
C_RSYM (C_RSYM) | レジスター変数を指定します。 このn_valuefield はレジスター番号です。 |
C_RPSYM (C_RPSYM) | レジスターに保管されている関数またはプロシージャーに対する引数を指定します。 このn_valuefield は、引数が保管されるレジスター番号です。 |
C_STSYM | 静的に割り振られたシンボルを指定します。 このn_valueフィールドは、 C_BSTAT 項目を含むことによって指し示される csect 内のバイト・オフセットです。 |
C_GTLS | グローバル・スレッド・ローカル変数を指定し、同じ名前の C_EXT または C_WEAKEXT シンボルの後に続きます。 このn_valueフィールドが未定義です。 |
C_STTLS (C_STTLS) | 静的スレッド・ローカル変数を指定し、同じ名前の C_HIDEXT シンボルの後に続きます。 このn_valueフィールドが未定義です。 |
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。 シンボル・テーブルについて詳しくは、 「シンボル・テーブル情報」 を参照してください。
デバッグについては、 「デバッグ・セクション」 を参照してください。
STRING テーブル
IN XCOFF32。ストリング・テーブルには、8 バイトより長いシンボルの名前が含まれています。 XCOFF64では、ストリング・テーブルにすべてのシンボルの名前が含まれています。 ストリング・テーブルが存在する場合、最初の 4 バイトには、この長さフィールドの長さを含むストリング・テーブルの長さ (バイト単位) が含まれます。 表の残りの部分は、ヌル終了 ASCII ストリングのシーケンスです。 :NONE.n_zeroesシンボル・テーブル項目のフィールドが 0 の場合には,n_offsetフィールドは、シンボルの名前のストリング・テーブルへのバイト・オフセットを示します。
ストリング・テーブルを使用しない場合には, ストリング・テーブル全体を省略するか, あるいは長さフィールド (値 0 または 4 を含む) だけで構成されるストリング・テーブルを使用することができます。 値 4 をお勧めします。 以下の表は、ストリング表の編成を示しています。
オフセット | 長さ (バイト数) | 説明 |
---|---|---|
0 | 4 | ストリング・テーブルの長さ。 |
4 | n | シンボル名ストリング、ヌル終了。 |
フィールドは、シンボル名ごとに繰り返されます。 |
XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。
dbx アプリケーション・ストリング
デバッグ・セクションには、シンボリック・デバッガー・スタブ・ストリング (シンボル・テーブル・ストリング) が含まれています。 これは、コンパイラーおよびアセンブラーによって生成されます。 これは、シンボリック・デバッガーが使用するシンボル属性情報を提供します。
一般的な説明については、 「デバッグ・セクション」 を参照してください。
Stabstring Terminal Symbols
シンボル | 正規表現 |
---|---|
name | [^ ;: ' "] (名前は、 ;: ' または "を除く、空でない任意の文字セットで構成されます。) |
STRING | '.*' | ".*"。ここで、 \"、 \'、または \\ はストリング内で使用できます。 ストリング内では、¥ (円記号) は特別な意味を持つことがあります。 ¥ の後の文字が別の ¥ である場合、円記号の 1 つは無視されます。 次の文字が現在のストリングに使用されている引用符文字である場合、そのストリングは埋め込み引用符を含むものとして解釈されます。 それ以外の場合、¥ は文字どおりに解釈されます。 ただし、終了引用符が stabstring の最後の文字で、¥ が引用符の直前にある場合、¥ は文字どおりに解釈されます。 この使用は推奨されません。 \ は、以下の場合にのみ引用符で囲む必要があります。
エスケープされた引用符は、単一ストリングに単一引用符と二重引用符の両方が含まれている場合にのみ必要です。 それ以外の場合は、ストリングに含まれていない引用文字でストリングを引用符で囲む必要があります。 ストリングにはヌル文字を組み込むことができるため、スタブ・ストリングを処理するユーティリティーは、長さフィールドを使用してスタブ・ストリングの長さを決定する必要があります。 |
INTEGER | (-) [0-9] + |
16 進整数 | [0-9A から F] + 16 進数字 A から F は大文字でなければなりません。 |
REAL | [時間|D 日|DD とは]([+-][0-9]+(.)[0-9]*([キュー ( eEqQ)](+-)[0-9]+) | (+-)INF (エ | QAN (N) | SNAN (N)) |
Stabstring 文法 (Stabstring 文法)
REAL の前には空白文字を入れることができ、STRING にはヌル文字やブランク文字を含む任意の文字を入れることができます。 それ以外の場合は、stabstring にヌルまたはブランク文字はありません。
処理を容易にするために、長いスタブ・ストリングを複数のシンボル・テーブル・エントリーに分割することができます。 スタブ・ストリング文法では、 # (ポンド記号) は、スタブ・ストリングを継続できるポイントを示します。 継続は、? のいずれかを使用して示されます。 (疑問符) または ¥ をストリングの最後の文字として使用します。 スタブ・ストリングの次の部分は、次のシンボル・テーブル・エントリーの名前です。 実動の代替が空の場合、文法にはキーワード/*EMPTY*/が表示されます。
以下のリストには、stabstring 文法が含まれています。
- STB ストリング:
- stabstring の基本構造:
- 名前: Class
- オブジェクトの名前とそれに続くオブジェクト分類
- : クラス
- 名前なしオブジェクト種別。
- クラス:
- オブジェクト分類:
- c = 定数 ;
- 定数オブジェクト
- NamedType
- ユーザー定義タイプおよびタグ
- パラメーター
- サブプログラムに対する引数
- PROCEDURE
- サブプログラム宣言
- 変数
- プログラム内の変数
- ラベル
- ラベル・オブジェクト。
- 定数:
- 定数宣言:
- b OrdValue
- ブール定数
- c OrdValue
- 文字定数
- e TypeID 、 OrdValue
- 列挙型定数
- i 整数
- 整数定数
- 実数
- 10 進または 2 進浮動小数点定数
- s ストリング
- ストリング定数 (string constant)
- C REAL、REAL
- 複素定数 (complex constant)
- S TypeID 、 NumElements 、 NumBits 、 BitPattern
- 定数を設定します。
- OrdValue:
- 関連する数値: INTEGER
- NumElements:
- セット内のエレメント数: INTEGER
- NumBits:
- 項目内のビット数: INTEGER
- NumBytes:
- 項目内のバイト数: INTEGER
- BitPattern:
- 最大 32 バイトの 16 進表記: HEXINTEGER
- NamedType:
- ユーザー定義タイプおよびタグ:
- TypeID
- ユーザー定義タイプ (TYPE または typedef) ( T TypeID に有効なものを除く)
- T TypeID
- Struct、union、class、または enumeration タグ
- パラメーター:
- プロシージャーまたは関数に対する引数:
- TypeID
- 汎用レジスターで参照により渡される
- p TypeID
- スタック上の値による受け渡し
- v TypeID
- スタック上の参照による受け渡し
- C TypeID
- スタック上の値によって渡される定数
- D TypeID
- 浮動小数点レジスターの値による受け渡し
- R TypeID
- 汎用レジスターの値による受け渡し
- X TypeID
- ベクトル・レジスターの値による受け渡し
- 手順:
- プロシージャーまたは関数宣言:
- Proc
- 現行スコープ・レベルでのプロシージャー
- Proc 、NAME: NAME
- 1st NAME という名前のプロシージャー ( 2nd NAME に対してローカル)。ここで、 2nd NAME は現在の有効範囲とは異なります。
- 変数:
- プログラム内の変数:
- TypeID
- TypeID 型のローカル (自動) 変数
- TypeID
- TypeID 型の浮動レジスター変数
- TypeID
- TypeID 型の静的スレッド・ローカル変数
- TypeID
- タイプ TypeID のレジスター変数
- x TypeID
- タイプ TypeID のベクトル・レジスター変数
- G TypeID
- タイプ TypeID のグローバル (外部) 変数
- H TypeID
- タイプ TypeID のグローバル (外部) スレッド・ローカル変数
- S TypeID
- タイプ TypeID のモジュール変数 (C 静的グローバル)
- V TypeID
- TypeID 型の独自の変数 (C 静的ローカル)
- Y
- FORTRAN ポインター変数
- Z TypeID NAME
- FORTRAN pointee 変数
- ラベル(A):
- ラベル(A):
- L
- ラベル名。
- プロシージャー:
- さまざまなタイプの関数およびプロシージャー:
- f TypeID
- タイプ TypeID のプライベート関数
- g TypeID
- 汎用関数 (FORTRAN)
- TypeID
- モジュール (Modula-2、ext. パスカル)
- J TypeID
- タイプ TypeID の内部関数
- F TypeID
- タイプ TypeID の外部関数
- I
- (資本 i) 内部手順
- P
- 外部プロシージャー
- Q
- 専用プロシージャー
- TypeID:
- 型宣言および ID:
- INTEGER
- 以前に定義されたタイプのタイプ番号
- INTEGER = TypeDef
- TypeDef によって記述される新しいタイプ番号
- INTEGER = TypeAttrs TypeDef
- 特殊タイプ属性を持つ新規タイプ
- TypeAttrs:
- @ TypeAttrリスト ;注: 型属性 (TypeAttrs) は、位置合わせ制約やポインター検査セマンティクスなど、型に関連した追加情報です。 dbx プログラムは、 size 属性と packed 属性のみを認識します。 size 属性は、配列内の埋め込みエレメントの合計サイズを示します。 packed 属性は、型がパック型であることを示します。 その他の属性は、 dbxによって無視されます。
- TypeAttrリスト:
- 特殊タイプ属性のリスト:
- TypeAttrリスト ;
- @ TypeAttr TypeAttr
- TypeAttr:
- 特殊なタイプ属性:
- INTEGER
- 境界の位置合わせ
- s INTEGER
- サイズ (ビット)
- p 整数
- ポインター・クラス (検査用)
- P
- パック型
- その他
- カバーされていないものはすべてスキップされます
- TypeDef:
- オブジェクトの基本的な説明:
- INTEGER
- 以前に定義されたタイプのタイプ番号
- b TypeID 。 # NumBytes
- パスカル・スペース・タイプ
- TypeID ; # NumBits
- 複合タイプ TypeID
- TypeID
- タイプ TypeID のファイル
- EnumSpec ;
- 列挙型 (デフォルト・サイズ、32 ビット)
- g TypeID 。 # NumBits
- 浮動小数点型のサイズ NumBits
- D TypeID ; # NumBits
- サイズ NumBits の 10 進浮動小数点型
i タイプの場合、 ModuleName は、インポート元の Modula-2 モジュールを参照します。
- i 名前: NAME;
- インポートされたタイプ ModuleName:Name
- i NAME: NAME、 TypeID ;
- インポート・タイプ ModuleName: タイプ TypeID の名前
- k TypeID
- C++ 定数型
- L; #
- Usage-is-index; COBOL に固有
- m OptVBaseSpec OptMultiBaseSpec TypeID : TypeID : TypeID ;
- メンバー型を指す C++ ポインター。最初の TypeID はメンバー型、2 番目はクラスの型です。
- n TypeID 。 # NumBytes
- ストリング・タイプ。最大ストリング長は NumBytes で示されます。
- o 名前;
- 不透明型
- o NAME、 TypeID
- TypeID の定義を持つ不透明 (OPAQUE) 型
- w TypeID
- ワイド文字
- z TypeID 。 # NumBytes
- Pascal gstring タイプ
- C 使用法
- COBOL ピクチャー
- I NumBytes 、 # PicSize
- (大文字の i) 索引はタイプです。COBOL に固有です。
- K CobolFile説明;
- COBOL ファイル記述子
- M TypeID ; バインド数
- 長さが Bound で示される TypeID の複数インスタンス・タイプ
- N
- Pascal Stringptr
- S TypeID
- タイプ TypeID のセット
- * TypeID
- TypeID 型のポインター
- & TypeID
- C++ 参照型
- V TypeID
- C++ volatile 型
- Z
- C++ 楕円パラメーター・タイプ
- Array Subrange ProcedureType
- 宣言ではなく関数型の場合
- RECORD
- レコード・タイプ、構造体タイプ、共用体タイプ、またはグループ・タイプ
- EnumSpec:
- 列挙型スカラーのリスト:
- EnumList
- 列挙型 (C およびその他の言語)
- TypeID : EnumList
- 反復整数型の C++ 列挙型
- EnumList: 列挙
- EnumList 列挙
- 列挙型:
- 列挙型スカラーの説明: NAME : OrdValue , #
- 配列:
- 配列記述:
- TypeID 。 # TypeID
- 配列。 FirstTypeID は索引タイプです。
- TypeID
- TypeID の配列を開きます。
- D INTEGER、TypeID
- TypeID の N 次元動的配列
- E INTEGER、 TypeID
- TypeID の N 次元動的副配列
- O INTEGER、 TypeID
- 新規オープン・アレイ
- P TypeID ; # TypeID
- パック配列
- 部分範囲:
- 範囲の説明:
- r TypeID 。 # バインド済み ; # バインド
- 範囲タイプ (例: char、int、¥、)、下限、および上限
- バインド済み:
- 上限および下限の説明:
- INTEGER
- 定数境界
- Boundtype INTEGER
- 変数または動的境界。値は、境界のアドレスまたはオフセットです。
- J
- 境界は確定できません (境界なし)
- 境界タイプ:
- 調整可能なサブレンジの説明:
- A
- スタック上で参照によって渡されるバインド
- S
- 静的ストレージで値によって渡されるバインド
- T
- スタック上の値によって渡されるバインド
- a
- レジスターで参照によって渡されるバインド
- t
- レジスター内の値によって渡されるバインド
- ProcedureType:
- 関数変数 (1st のタイプ C のみ。その他 Modula-2 & Pascal)
- f TypeID 。
- タイプ TypeID を戻す関数
- f TypeID , NumParams ; TParamList ;
- タイプ TypeID を戻す N 個のパラメーターの関数
- p NumParams ; TParamList ;
- N 個のパラメーターのプロシージャー
- R NumParams ; NamedTParamリスト
- Pascal サブルーチン・パラメーター
- F TypeID, NumParams ; NamedTParamList ;
- Pascal 関数パラメーター
- NumParams:
- ルーチン内のパラメーターの数:
整数。
- TParamList:
- Modula-2 関数変数のパラメーターのタイプ:
- TParam (TParam)
- パラメーターのタイプと引き渡し方法
- TParam (TParam):
- タイプおよび受け渡し方法
TypeID , PassBy ; #
- NamedTParamリスト:
- Pascal ルーチン変数のパラメーターのタイプ:/*EMPTY*/ NamedTPList
- NamedTPList:
- NamedTParam NamedTPList NamedTParam
- NamedTParam:
- 名前付きタイプおよび引き渡しメソッド: Name : TypeID , PassBy InitBody ; # : TypeID , PassBy InitBody ; # 名前なしパラメーター
- レコード:
- 構造体宣言のタイプ:
- s NumBytes # FieldList ;
- 構造またはレコード定義
- u NumBytes # FieldList ;
- 結合
- v NumBytes # FieldList VariantPart ;
- バリアント・レコード
- Y NumBytes ClassKey OptPBV OptBaseSpecList ( ExtendedFieldListOptNameResolutionList ;
- C++ クラス
- G 再定義 , n NumBits # FieldList ;
- 条件なしの COBOL グループ
Gn NumBits FieldList ;
- G 再定義 , c NumBits # CondFieldList ;
- 条件付きの COBOL グループ
Gc NumBits CondFieldList ;
- OptVBase仕様:
- v
- ptr-to-mem クラスには仮想ベースがあります。
- /*EMPTY*/
- クラスに仮想ベースがありません。
- OptMultiBaseSpec:
- m
- クラスは複数ベースです。
- /*EMPTY*/
- クラスはマルチベースではありません。
- OptPBV:
- V
- クラスは常に値によって渡されます。
- /*EMPTY*/
- クラスが値によって渡されることはありません。
- ClassKey:
- s
- struct
- u
- 共用体
- c
- クラス
- OptBaseSpecList:
- /*EMPTY*/ BaseSpecリスト
- BaseSpecリスト:
- BaseSpec BaseSpecリスト 、 BaseSpec
- BaseSpec:
- VirtualAccess仕様 BaseClassオフセット : ClassTypeID
- BaseClassオフセット:
- INTEGER
- ベース・レコード・オフセット (バイト単位)
- ClassTypeID:
- TypeID
- 基本クラス・タイプ ID
- VirtualAccess仕様:
- AccessSpec
- 仮想
- v
- 仮想
AccessSpec
/*EMPTY*/
- GenSpec:
- c
- コンパイラー生成
/*EMPTY*/
- AccessSpec:
- I #
- 専用
- O #
- 保護
- U #
- パブリック
- AnonSpec:
- a
- 無名共用体メンバー
/*EMPTY*/
- VirtualSpec:
- V P
- 純粋仮想
- v
- 仮想
- /*EMPTY*/
- ExtendedFieldリスト:
- ExtendedFieldリスト ExtendedField /*EMPTY*/
- ExtendedField:
- GenSpec AccessSpec AnonSpec DataMember GenSpec VirtualSpec AccessSpec OptVirtualFuncIndex MemberFunction AccessSpec AnonSpec NestedClass AnonSpec FriendClass AnonSpec FriendFunction
- DataMember:
- MemberAttrs : フィールド ;
- MemberAttrs:
- IsStatic IsVtblPtr IsVBasePtr
- IsStatic:
- /*EMPTY*/
- s
- メンバーは静的です。
- IsVtblパラメーター:
- /*EMPTY*/
- p 整数名
- メンバーは vtbl ポインターです。NAME は v テーブルの外部名です。
- IsVBaseポインター:
- /*EMPTY*/
- b
- メンバーは vbase ポインターです。
- r
- メンバーは vbase 自己ポインターです。
- メンバー関数:
- [ FuncType MemberFuncAttrs : NAME : TypeID ;
- MemberFuncAttrs:
- IsStatic IsInline IsConst IsVolatile
- IsInline:
- /*EMPTY*/
- i
- インライン関数
- IsConst:
- /*EMPTY*/
- k
- const メンバー関数
- IsVolatile:
- /*EMPTY*/
- V
- volatile メンバー関数
- NestedClass:
- N TypeID 。
- FriendClass:
- ( TypeID ; #
- FriendFunction:
- ] NAME : TypeID ;
- OptVirtualFuncIndex:
- /*EMPTY*/INTEGER
- FuncType:
- f
- メンバー関数 (member function)
- c
- コンストラクター
- d
- デストラクター
- InitBody:
- ストリング/*EMPTY*/
- OptNameResolutionList:
- /*EMPTY*/ ) NameResolutionリスト
- NameResolutionリスト: NameResolution
- NameResolution 、 NameResolutionList
- NameResolution: MemberName : ClassTypeID
- 名前はコンパイラーによって解決されます。
- MemberName:
- 名前があいまいです。
- MemberName:
- 名前
- FieldList:
- 構造の内容の説明:
- フィールド
- /*EMPTY*/
- FieldList フィールド
- レコードまたは共用体のメンバー。
- フィールド:
- 構造体-メンバー・タイプの説明:
NAME : TypeID , BitOffset , NumBits ;
- VariantPart:
- バリアント・レコードのバリアント部分:
- [ Vtag VFieldList ]
- バリアントの説明
- VTag:
- バリアント・レコード・タグ:
- ( フィールド
- バリアント・レコードのメンバー
- (名前:; #
- バリアント・キー名
- VFieldList:
- バリアント・レコードの内容の説明:
- VList VFieldList VList
- バリアント・レコードのメンバー
- VList:
- バリアント・レコード・フィールド:
- VField 「VField」 VariantPart
- バリアント・レコードのメンバー
- VField:
- バリアント・レコード・メンバー・タイプの説明:
- ( VRangeList : FieldList
- フィールド・リストを含むバリアント
- VRangeList:
- バリアント・フィールド・ラベルのリスト:
- VRange VRangeList 、 VRange
- バリアント・レコードのメンバー
- VRange:
- バリアント・フィールドの説明:
- b OrdValue
- ブール・バリアント
- c OrdValue
- キャラクター・バリアント
- e TypeID 、 OrdValue
- 列挙型バリアント
- i 整数
- 整数バリアント
- r TypeID ; Bound ; Bound
- 部分範囲バリアント
- CondFieldリスト:
- 条件、#FieldList FieldList#;
- Conditions:
- /*Empty*/ 条件
- BitOffset:
- 構造体の先頭からのビット単位のオフセット: INTEGER
- 使用方法:
- COBOL 使用法の説明: PICStorageType NumBits , EditDescription , PicSize ; Redefinition , PICStorageType NumBits , EditDescription , PicSize ; PICStorageType NumBits , EditDescription , PicSize , # Condition ; Redefinition , PICStorageType NumBits , EditDescription , PicSize , # Condition ;
- 再定義:
- COBOL 再定義: r NAME
- PICStorageType:
- COBOL ピクチャー・タイプ:
- a
- 英字
- b
- 英字、編集
- c
- 英数字
- d
- 英数字、編集
- e
- 数値、符号付き、末尾、組み込み
- f
- 数値、符号付き、末尾、分離
- g
- 数値、符号付き、先行、組み込み
- h
- 数値、符号付き、先行、分離
- i
- 数値、符号付き、デフォルト、comp
- j
- 数値、符号なし、デフォルト、comp
- k
- 数値、パック、10 進数、符号付き
- l
- 数値、パック、10 進数、符号なし
- m
- 数値、符号なし、comp-x
- n
- 数値、符号なし、 comp-5
- o
- 数値、符号付き、 comp-5
- p
- 数字、編集
- q
- 数値、符号なし
- s
- 索引付き項目
- t
- ポインター
- EditDescription:
- COBOL 編集記述:
- STRING
- 英字 PIC の文字の編集
- INTEGER
- 数値 PIC 内の小数点以下の位置
- PicSize:
- COBOL 記述の長さ:
- INTEGER
- 数値文節内の反復 '9' の数、または編集された数値の編集形式の長さ
- 条件:
- 条件変数の説明:
NAME : INTEGER = q ConditionType 、 ValueList ;
- ConditionType:
- 条件の説明:
ConditionPrimitive , KanjiChar
- ConditionPrimitive:
- 条件のプリミティブ型:
- n 署名 DecimalSite
- 数値条件
- a
- 英数字条件
- f
- 形象条件付き
- 符号:
- 明示的な符号を持つタイプの場合:
- +
- 正の値
- -
- 負
- [^+-]
- 未指定
- DecimalSite:
- 暗黙の小数点の左からの桁数:
INTEGER
- KanjiChar:
- 値に漢字文字が含まれている場合のみ 0: INTEGER
- ValueList
- 条件名に関連付けられた値
- 値 ValueList Value
- VALUE
- 条件名に関連付けられた値:
- INTEGER: ArbitraryCharacters #
- ストリングの長さを示す整数
- CobolFile説明:
- COBOL ファイルの説明: Organization AccessMethod NumBytes
- 組織:
- COBOL ファイル記述編成:
- i
- 索引付き
- l
- 行順次
- r
- 相対
- s
- 順次
- AccessMethod:
- COBOL ファイル記述アクセス方式:
- d
- Dynamic
- o
- ソート
- r
- ランダム
- s
- 順次
- PassBy:
- パラメーター受け渡し方式:
- INTEGER
- 0 = 参照による受け渡し、1 = 値による受け渡し