XCOFF オブジェクト・ファイル・フォーマット

目的

拡張共通オブジェクト・ファイル・フォーマット (XCOFF) は、オペレーティング・システムのオブジェクト・ファイル・フォーマットです。 XCOFF は、標準の COFF を TOC モジュール・フォーマット概念と組み合わせたものである。 これによって、オブジェクト・ファイル内でダイナミック・リンクおよびユニットの置換が行われる。 XCOFF のバリエーションは、64 ビット・オブジェクト・ファイルと実行可能ファイルに使用されます。

XCOFF は、マシン・イメージ・オブジェクトおよび実行可能ファイルの正式な定義です。 これらのオブジェクト・ファイルは、言語処理プログラム (アセンブラーおよびコンパイラー) およびバインダー (またはリンク・エディター) によって作成され、主にバインダーおよびシステム・ローダーによって使用されます。

XCOFF 実行可能ファイルのデフォルト名は a.outです。

注: この情報は、ビットをビッグ・エンディアンの順序でリストします。

XCOFF オブジェクト・ファイルについて詳しくは、以下の情報を参照してください。

XCOFF 宣言を使用するアプリケーションの作成

プログラムは、32 ビット XCOFF ファイル、64 ビット XCOFF ファイル、またはその両方を理解するように作成できます。 プログラム自体は、32 ビット・モードまたは 64 ビット・モードでコンパイルして、32 ビット・プログラムまたは 64 ビット・プログラムを作成することができます。 プリプロセッサー・マクロを定義することにより、アプリケーションは XCOFF ヘッダー・ファイルから適切な構造体定義を選択できます。
注: 本書では、「32 ビット XCOFF」と「64 ビット XCOFF」の省略形として、それぞれ「XCOFF32」と「XCOFF64」を使用しています。

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)

filehdr.h ファイルは、XCOFF ファイルのファイル・ヘッダーを定義します。 ファイル・ヘッダーの長さは、 XCOFF32 では 20 バイト、 XCOFF64では 24 バイトです。 この構造体には、以下の表に示すフィールドが含まれています。

表 1. ファイル・ヘッダー構造体 ( filehdr.hで定義)
フィールド名と説明 XCOFF32 XCOFF64
f_magic
ターゲット・マシン
  • オフセット: 0
  • 長さ: 2
  • オフセット: 0
  • 長さ: 2
f_nscns
セクションの数
  • オフセット: 2
  • 長さ: 2
  • オフセット: 2
  • 長さ: 2
f_timdat
ファイル作成の時刻と日付
  • オフセット: 4
  • 長さ: 4
  • オフセット: 4
  • 長さ: 4
f_symptr+
シンボル・テーブル開始までのバイト・オフセット
  • オフセット: 8
  • 長さ: 4
  • オフセット: 8
  • 長さ: 8
f_nsyms+
シンボル・テーブル内のエントリーの数
  • オフセット: 12
  • 長さ: 4
  • オフセット: 20
  • 長さ: 4
f_opthdr
オプション・ヘッダーのバイト数
  • オフセット: 16
  • 長さ: 2
  • オフセット: 16
  • 長さ: 2
f_flags
フラグ (「フィールド定義」を参照)
  • オフセット: 18
  • 長さ: 2
  • オフセット: 18
  • 長さ: 2
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。

フィールド定義

項目 説明
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 オブジェクト・ファイルのタイプを記述するフラグのビット・マスクを指定します。 フラグは、以下の情報によって定義されます。
ビット・マスク
フラグ
0x0001
F_RELFLG

バインディングの再配置情報がファイルから除去されたことを示します。 このフラグは、再配置情報が不要な場合でも、コンパイラーによって設定してはなりません。

0x0002
F_EXEC (F)

ファイルが実行可能であることを示します。 未解決の外部参照は存在しません。

0x0004
F_LNNO (F)

ユーティリティー・プログラムによってファイルから行番号が取り除かれたことを示します。 このフラグは、行番号情報が生成されていない場合でも、コンパイラーによって設定されません。

0x0008
予約済み
0x0010
F_FDPR_PROF (F)

ファイルが fdpr コマンドでプロファイル作成されたことを示します。

0x0020
F_FDPR_OPTI (F)

ファイルが fdpr コマンドで再配列されたことを示します。

0x0040
F_DSA (F)

ファイルが非常に大きなプログラム・サポートを使用することを示します。

0x0080
予約済み
0x0100

F_VARPG (F)

メディア・ページ・サイズを指定する補助ヘッダーのメンバーの 1 つがゼロ以外であることを示します。 デフォルトでは、このビットの値は常にゼロです。

0x0200
予約済み
0x0400
予約済み
0x0800
予約済み
0x1000
F_DYNLOAD (F)

ファイルが動的にロード可能で実行可能であることを示します。 外部参照はインポートによって解決され、ファイルにはエクスポートとローダーの再配置が含まれている可能性があります。

0x2000
F_SHROBJ

ファイルが共有オブジェクト (共有ライブラリー) であることを示します。 ファイルは個別にロード可能です。 つまり、通常は他のオブジェクトとバインドされず、ローダー・エクスポート・シンボルが他のオブジェクト・ファイルの自動インポート・シンボルとして使用されます。

0x4000
F_LOADONLY (F)

オブジェクト・ファイルがアーカイブのメンバーである場合、システム・ローダーによってロードできますが、そのメンバーはバインダーによって無視されます。 オブジェクト・ファイルがアーカイブ内にない場合、このフラグは効果がありません。

0x8000
予約済み

補助ヘッダー (aouthdr.h)

補助ヘッダーには、モジュールのロードと実行に使用される、システム依存およびインプリメンテーション依存の情報が含まれています。 補助ヘッダー内の情報は、実行時にシステム・ローダーによって処理される必要があるファイルの量を最小化します。

バインダーは、システム・ローダーが使用する補助ヘッダーを生成します。 ロードされないオブジェクト・ファイルには、補助ヘッダーは必要ありません。 補助ヘッダーがコンパイラーおよびアセンブラーによって生成される場合、そのヘッダーはバインダーによって無視されます。

補助ヘッダーは、ファイル・ヘッダーの直後に続きます。
注: 以下の値の場合、f_opthdrファイル・ヘッダーのフィールドが 0 の場合、補助ヘッダーは存在しません。

補助ヘッダーの C 言語構造体は、 aouthdr.h ファイルに定義されています。 補助ヘッダーには、以下の表に示すフィールドが含まれています。

表 2. 補助ヘッダー構造体 ( aouthdr.hで定義)
フィールド名と説明 XCOFF32 XCOFF64
o_mflag
フラグ
  • オフセット: 0
  • 長さ: 2
  • オフセット: 0
  • 長さ: 2
o_vstamp
バージョン
  • オフセット: 2
  • 長さ: 2
  • オフセット: 2
  • 長さ: 2
o_tsize+
テキスト・サイズ (バイト)
  • オフセット: 4
  • 長さ: 4
  • オフセット: 56
  • 長さ: 8
o_dsize+
初期化されたデータ・サイズ (バイト数)
  • オフセット: 8
  • 長さ: 4
  • オフセット: 64
  • 長さ: 8
o_bsize+
初期化されていないデータ・サイズ (バイト数)
  • オフセット: 12
  • 長さ: 4
  • オフセット: 72
  • 長さ: 8
o_entry+
エントリー・ポイント記述子 (仮想アドレス)
  • オフセット: 16
  • 長さ: 4
  • オフセット: 80
  • 長さ: 8
o_text_start+
テキストの基底アドレス (仮想アドレス)
  • オフセット: 20
  • 長さ: 4
  • オフセット: 8
  • 長さ: 8
o_data_start+
データの基底アドレス (仮想アドレス)
  • オフセット: 24
  • 長さ: 4
  • オフセット: 16
  • 長さ: 8
o_toc+
TOC アンカーのアドレス
  • オフセット: 28
  • 長さ: 4
  • オフセット: 24
  • 長さ: 8
o_snentry
エントリー・ポイントのセクション番号
  • オフセット: 32
  • 長さ: 2
  • オフセット: 32
  • 長さ: 2
o_sntext
.text のセクション番号
  • オフセット: 34
  • 長さ: 2
  • オフセット: 34
  • 長さ: 2
o_sndata
.data のセクション番号
  • オフセット: 36
  • 長さ: 2
  • オフセット: 36
  • 長さ: 2
o_sntoc
TOC のセクション番号
  • オフセット: 38
  • 長さ: 2
  • オフセット: 38
  • 長さ: 2
o_snloader
ローダー・データのセクション番号
  • オフセット: 40
  • 長さ: 2
  • オフセット: 40
  • 長さ: 2
o_snbss
.bss のセクション番号
  • オフセット: 42
  • 長さ: 2
  • オフセット: 42
  • 長さ: 2
o_algntext
.text の最大位置合わせ
  • オフセット: 44
  • 長さ: 2
  • オフセット: 44
  • 長さ: 2
o_algndata
.data の最大位置合わせ
  • オフセット: 46
  • 長さ: 2
  • オフセット: 46
  • 長さ: 2
o_modtype
モジュール・タイプ・フィールド
  • オフセット: 48
  • 長さ: 2
  • オフセット: 48
  • 長さ: 2
o_cpuflag
ビット・フラグ-オブジェクトの CPU タイプ
  • オフセット: 50
  • length: 1
  • オフセット: 50
  • length: 1
o_cputype
CPU タイプ用に予約済み
  • オフセット: 51
  • length: 1
  • オフセット: 51
  • length: 1
o_maxstack+
許可される最大スタック・サイズ (バイト)
  • オフセット: 52
  • 長さ: 4
  • オフセット: 88
  • 長さ: 8
o_maxdata+
最大許容データ・サイズ (バイト)
  • オフセット: 56
  • 長さ: 4
  • オフセット: 96
  • 長さ: 8
o_debugger+
デバッガー用に予約済み。
  • オフセット: 60
  • 長さ: 4
  • オフセット: 4
  • 長さ: 4
o_textpsize+
要求されたテキスト・ページ・サイズ。
  • オフセット: 64
  • length: 1
  • オフセット: 52
  • length: 1
o_datapsize+
要求されたデータ・ページ・サイズ。
  • オフセット: 65
  • length: 1
  • オフセット: 53
  • length: 1
o_stackpsize+
要求されたスタック・ページ・サイズ。
  • オフセット: 66
  • length: 1
  • オフセット: 54
  • length: 1
o_flags
フラグおよびスレッド・ローカル・ストレージの位置合わせ
  • オフセット: 67
  • length: 1
  • オフセット: 55
  • length: 1
o_sntdata
.tdata のセクション番号
  • オフセット: 68
  • 長さ: 2
  • オフセット: 104
  • 長さ: 2
o_sntbss
.tbss のセクション番号
  • オフセット: 70
  • 長さ: 2
  • オフセット: 106
  • 長さ: 2
o_x64flags
XCOFF64 フラグ
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 108
  • 長さ: 2
o_shmpsize+
要求された共用メモリー・ページ・サイズ
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 110
  • length: 1
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。

フィールド定義

以下の情報は、補助ヘッダー・フィールドを定義しています。 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 アンカーの両方のアドレスが含まれています。 エントリー・ポイント関数記述子の、それを含むセクションの先頭からのオフセットは、次のように計算できます。
Section_offset_value=o_entry-s_paddr[o_snentry - 1],

ここで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 文字ストリングです。 以下のモジュール・タイプがシステム・ローダーによって認識されます。
RO
読み取り専用モジュールを指定します。 このモジュール・タイプの共有オブジェクトに BSS セクションがなく、他の読み取り専用モジュールにのみ依存している場合、そのモジュールのデータ・セクションは読み取り専用にマップされ、そのオブジェクトを使用するすべてのプロセスによって共有されます。
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位置合わせ:
_AOUT_TLS_LE 0x80 (次の高位ビット)o_flags)
プログラムは、スレッド・ローカル・ストレージにローカル EXEC モデルを使用します。 このようなプログラムは動的にロードできません。
_AOUT_RAS 0x40
カーネル・エクステンションが鍵およびリカバリー・セーフであることを示します。
_AOUT_ALGNTDATA (低位 4 ビットのo_flags)
このフィールドは、モジュールのスレッド・ローカル・ストレージの望ましい位置合わせを指定します。 この 4 ビット数値の値は、次のように解釈されます。
Bit 0-8    Log (base 2) of desired alignment
Bit 9-11   Reserved.
Bit 12     4KB page alignment 
Bit 13     64KB page alignment 
Bit 14-15  Reserved.
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 定義にのみ存在します。
_AOUT_SHR_SYMTAB 0x8000
このプログラムの共用シンボル・テーブルの作成を要求します。これは、システム上のプログラムのすべてのインスタンスによって使用されます。 このフラグは、共有ライブラリーでは無視されます。
_AOUT_FORK_POLICY 0x4000
_AOUT_FORK_POLICY フラグが設定されている場合、明示的な forktree ポリシーが要求されます。 _AOUT_FORK_COR フラグは、要求されるポリシーを決定します。 このフラグは、共有ライブラリーでは無視されます。
_AOUT_FORK_COR 0x2000
_AOUT_FORK_POLICY フラグと _AOUT_FORK_COR フラグの両方が設定されている場合、copy-on-reference forktree ポリシーが要求されます。 A_OUT_FORK_POLICY フラグが設定されているが、 _AOUT_FORK_COR フラグが設定されていない場合、コピー・オン・ライト forktree ポリシーが要求されます。

_AOUT_FORK_POLICY が設定されていない場合、 _AOUT_FORK_COR フラグは将来の使用のために予約されており、0 に設定する必要があります。 このフラグは、共有ライブラリーでは無視されます。

一般に、オブジェクト・ファイルには、特定のタイプの複数のセクションが含まれている可能性がありますが、ロード可能モジュールでは、正確に 1 つのセクションが存在する必要があります。.text,.data,.bssおよび.loaderセクション。 ロード可能オブジェクトにも 1 つのオブジェクトがある場合があります。.tdataセクションと 1 つ.tbssセクション。

セクション・ヘッダー (scnhdr.h)

XCOFF ファイルの各セクションには対応するセクション・ヘッダーがありますが、一部のセクション・ヘッダーには対応するロー・データ・セクションがない場合があります。 セクション・ヘッダーは、XCOFF ファイル内に含まれる各セクションの識別情報およびファイル・アクセス情報を提供します。 XCOFF32 ファイルの各セクション・ヘッダーの長さは 40 バイトですが、 XCOFF64 セクション・ヘッダーの長さは 72 バイトです。 セクション・ヘッダーの C 言語構造体は、 scnhdr.h ファイルにあります。 セクション・ヘッダーには、以下の表に示すフィールドが含まれています。

表 3. セクション・ヘッダー構造体 ( scnhdr.hで定義)
フィールド名と説明 XCOFF32 XCOFF64
s_name
セクション名
  • オフセット: 0
  • 長さ: 8
  • オフセット: 0
  • 長さ: 8
s_paddr+
物理アドレス
  • オフセット: 8
  • 長さ: 4
  • オフセット: 8
  • 長さ: 8
s_vaddr+
仮想アドレス (物理アドレスと同じ)
  • オフセット: 12
  • 長さ: 4
  • オフセット: 16
  • 長さ: 8
s_size+
セクション・サイズ
  • オフセット: 16
  • 長さ: 4
  • オフセット: 24
  • 長さ: 8
s_scnptr+
セクションの生データに対するファイル内のオフセット
  • オフセット: 20
  • 長さ: 4
  • オフセット: 32
  • 長さ: 8
s_relptr+
セクションの再配置エントリーに対するファイル内のオフセット
  • オフセット: 24
  • 長さ: 4
  • オフセット: 40
  • 長さ: 8
s_lnnoptr+
ファイル内でのセクションの行番号項目までのオフセット
  • オフセット: 28
  • 長さ: 4
  • オフセット: 48
  • 長さ: 8
s_nreloc+
再配置エントリーの数
  • オフセット: 32
  • 長さ: 2
  • オフセット: 56
  • 長さ: 4
s_nlnno+
行番号項目の数
  • オフセット: 34
  • 長さ: 2
  • オフセット: 60
  • 長さ: 4
s_flags+
セクション・タイプを定義するフラグ
  • オフセット: 36
  • 長さ: 2
  • オフセット: 64
  • 長さ: 4
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。

フィールド定義

以下の情報は、セクション・ヘッダー・フィールドを定義します。

項目 説明
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 に設定して、セクション・ヘッダーを論理的に削除します。

有効なビット値は以下のとおりです。

フラグ
0x0000
予約済み
0x0001
予約済み
0x0002
予約済み
0x0004
予約済み
0x0008
PAD のタイプ

埋め込みセクションを指定します。 このタイプのセクションは、XCOFF 実行可能オブジェクト・ファイル内のセクション間の位置合わせ埋め込みを行うために使用されます。 このセクション・ヘッダー・タイプは廃止されました。対応する埋め込みセクション・ヘッダーがない XCOFF ファイルで埋め込みが許可されるためです。

0x0010
DWARF のタイプ

シンボリック・デバッガーのソース・ファイルおよびシンボル情報を提供する DWARF デバッグ・セクションを指定します。

複数のタイプの DWARF セクションが定義されています。 DWARF セクションのタイプは、 s_flags フィールドの高位 16 ビットで指定されます。 有効なサブタイプは次のとおりです。

     Value   |     Macro	      | Description
		-----------------------------------------------
		0x10000  | SSUBTYP_DWINFO   | DWARF info section
		0x20000  | SSUBTYP_DWLINE   | DWARF line-number section
		0x30000  | SSUBTYP_DWPBNMS  | DWARF public names section
		0x40000  | SSUBTYP_DWPBTYP  | DWARF public types section
		0x50000  | SSUBTYP_DWARNGE  | DWARF aranges section
		0x60000  | SSUBTYP_DWABREV  | DWARF abbreviation section
		0x70000  | SSUBTYP_DWSTR    | DWARF strings section
		0x80000  | SSUBTYP_DWRNGES  | DWARF ranges section
    0x90000  | SSUBTYPE_DWLOC   | DWARF location lists section
		0xA0000  | SSUBTYPE_DWFRAME | DWARF frames section
	  0xB0000  | SSUBTYPE_DWMAC   | DWARF macros section
0x0020
テキストのタイプ

実行可能テキスト (コード) セクションを指定します。 このタイプのセクションには、プログラムの実行可能命令が含まれます。

0x0040
データのタイプ

初期化されたデータ・セクションを指定します。 このタイプのセクションには、初期化されたデータとプログラムの TOC が含まれます。

0x0080
STYP_BSS (S)

初期化されていないデータ・セクションを指定します。 このタイプのセクション・ヘッダーは、プログラムの未初期化データを定義します。

0x0100
標準タイプ (STYP_EXCEPT)

例外セクションを指定します。 このタイプのセクションは、実行可能オブジェクト・プログラム内でトラップまたは例外が発生した理由を識別するための情報を提供します。

項目 説明
 
0x0200
情報のタイプ

コメント・セクションを指定します。 このタイプのセクションは、特殊な処理ユーティリティー・プログラムにコメントまたはデータを提供します。

0x0400
TDATA のタイプ

初期化されたスレッド・ローカル・データ・セクションを指定します。

0x0800
TBSS のタイプ

初期化されていないスレッド・ローカル・データ・セクションを指定します。

s_flags続行

有効なビット値は以下のとおりです。

フラグ
0x1000
標準ローダー (STYP_LOADER)

ローダー・セクションを指定します。 このタイプのセクションには、システム・ローダーが XCOFF 実行可能ファイルをロードするためのオブジェクト・ファイル情報が含まれています。 この情報には、インポートされたシンボル、エクスポートされたシンボル、再配置データ、タイプ・チェック情報、および共有オブジェクト名が含まれます。

0x2000
STYP_DEBUG (S)

デバッグ・セクションを指定します。 このタイプのセクションには、シンボリック・デバッガーによって使用されるスタブ・ストリング情報が含まれます。

0x4000
型のタイプ

タイプ・チェック・セクションを指定します。 このタイプのセクションには、バインダーが使用するパラメーター/引数タイプ・チェック・ストリングが含まれています。

0x8000
STYP_OVRFLO (S)
注: XCOFF64 ファイルにオーバーフロー・セクション・ヘッダーを含めることはできません。

再配置または行番号フィールド・オーバーフロー・セクションを指定します。 このタイプのセクション・ヘッダーには、再配置エントリーのカウントと、他のセクションの行番号エントリーが含まれます。 このセクション・ヘッダーは、いずれかのカウントが 65,534 を超える場合に必要です。 以下s_nrelocおよびs_nlnnoオーバーフロー・ヘッダーについて詳しくは、「セクションおよびセクション・ヘッダー」のフィールドを参照してください。

セクションおよびセクション・ヘッダー

セクション・ヘッダーは、XCOFF ファイルの内容に関するさまざまな情報を提供するために定義されます。 XCOFF ファイルを処理するプログラムは、一部の有効なセクションのみを認識します。

XCOFF ファイル・セクションについて詳しくは、以下の情報を参照してください。

現在のアプリケーションは以下を使用しません:s_nameセクション・タイプを決定するフィールド。 ただし、以下の表に示すように、システム・ツールでは従来の名前が使用されます。

表 4. 標準的なヘッダー名
説明 複数可? 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_nreloc
オーバーフローしたセクション・ヘッダー (値を含むセクション・ヘッダー) のファイル・セクション番号を指定します。65535そのs_nrelocおよびs_nlnnoフィールド この値は、1 次セクション・ヘッダーへの参照を提供します。 このフィールドには、以下と同じ値を指定する必要があります。s_nlnno設定します。
注: 1 次セクション・ヘッダーには、該当するオーバーフロー・セクション・ヘッダーを識別する参照はありません。 このフィールドに正しい基本セクション・ヘッダー参照を含むオーバーフロー・セクション・ヘッダーを見つけるには、すべてのセクション・ヘッダーを検索する必要があります。
s_nlnno
オーバーフローしたセクション・ヘッダーのファイル・セクション番号を指定します。 このフィールドには、以下と同じ値を指定する必要があります。s_nreloc設定します。
s_paddr
実際に必要な再配置項目の数を指定します。 このフィールドは、以下の代わりに使用されます。s_nrelocオーバーフローしたセクション・ヘッダーのフィールド。
s_vaddr
実際に必要な行番号項目の数を指定します。 このフィールドは、以下の代わりに使用されます。s_nlnnoオーバーフローしたセクション・ヘッダーのフィールド。

この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 ファイルにあります。

ローダー・ヘッダー・フィールドの定義

以下の表では、ローダー・セクションのヘッダー・フィールド定義について説明します。

表 5. ローダー・セクション・ヘッダー構造体 ( loader.hで定義)
フィールド名と説明 XCOFF32 XCOFF64
l_version
ローダー・セクションのバージョン番号
  • オフセット: 0
  • 長さ: 4
  • オフセット: 0
  • 長さ: 4
l_nsyms
シンボル・テーブル・エントリーの数
  • オフセット: 4
  • 長さ: 4
  • オフセット: 4
  • 長さ: 4
l_nreloc
再配置テーブル項目の数
  • オフセット: 8
  • 長さ: 4
  • オフセット: 8
  • 長さ: 4
l_istlen
インポート・ファイル ID ストリング・テーブルの長さ
  • オフセット: 12
  • 長さ: 4
  • オフセット: 12
  • 長さ: 4
l_nimpid
インポート・ファイル ID の数
  • オフセット: 16
  • 長さ: 4
  • オフセット: 16
  • 長さ: 4
l_impoff+
インポート・ファイル ID の先頭までのオフセット
  • オフセット: 20
  • 長さ: 4
  • オフセット: 24
  • 長さ: 8
l_stlen+
ストリング・テーブルの長さ
  • オフセット: 24
  • 長さ: 4
  • オフセット: 20
  • 長さ: 4
l_stoff+
ストリング・テーブルの先頭までのオフセット
  • オフセット: 28
  • 長さ: 4
  • オフセット: 32
  • 長さ: 8
l_symoff
シンボル・テーブルの先頭までのオフセット
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 40
  • 長さ: 8
l_rldoff
再配置エントリーの先頭までのオフセット
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 48
  • 長さ: 8
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。

以下の情報は、ローダー・セクションのヘッダー・フィールドを定義します。

項目 説明
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 を使用して、再配置テーブル・エントリーから参照されます。

表 6. ローダー・セクション・シンボル・テーブル・エントリー構造
フィールド名と説明 XCOFF32 XCOFF64
l_name+
ストリング・テーブルへのシンボル名またはバイト・オフセット
  • オフセット: 0
  • 長さ: 8
  • オフセット: N/A
  • 長さ: N/A
l_zeroes+
ゼロは、シンボル名が l_offset から参照されていることを示します。
  • オフセット: 0
  • 長さ: 4
  • オフセット: N/A
  • 長さ: N/A
l_offset+
シンボル名のストリング・テーブルへのバイト・オフセット
  • オフセット: 4
  • 長さ: 4
  • オフセット: 8
  • 長さ: 4
l_value+
アドレス・フィールド (address field)
  • オフセット: 8
  • 長さ: 4
  • オフセット: 0
  • 長さ: 8
l_scnum
シンボルを含むセクション番号
  • オフセット: 12
  • 長さ: 2
  • オフセット: 12
  • 長さ: 2
l_smtype
シンボル・タイプ、エクスポート、インポート・フラグ
  • オフセット: 14
  • length: 1
  • オフセット: 14
  • length: 1
l_smclas
シンボル・ストレージ・クラス
  • オフセット: 15
  • length: 1
  • オフセット: 15
  • length: 1
l_ifile
インポート・ファイル ID (インポート・ファイル ID の序数)
  • オフセット: 16
  • 長さ: 4
  • オフセット: 16
  • 長さ: 4
l_parm
パラメーター・タイプ-チェック・フィールド
  • Offset:20
  • 長さ: 4
  • オフセット: 20
  • 長さ: 4
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。

シンボル・テーブル・フィールドは、以下のとおりです。

項目 説明
l_name (XCOFF32 のみ) 長さが 8 バイト以下の場合に、8 バイトのヌル埋め込みシンボル名を指定します。 それ以外の場合、このフィールドは、シンボル名にアクセスするための以下の 2 つの 4 バイト整数として扱われます。
l_zeroes
(XCOFF32 のみ) 値 0 は、シンボル名がローダー・セクション・ストリング・テーブルにあることを示します。 このフィールドは, 1 番目のワードをオーバーレイします。l_name設定します。 1 つのl_name最初の 4 バイト (最初のワード) が 0 に等しいフィールドは、名前ストリングがストリング・テーブルに含まれていることを示すために使用されます。l_name設定します。
l_offset
(XCOFF32 のみ) このフィールドは、以下の 2 番目のワードをオーバーレイします。l_name設定します。 このフィールドの値は、ローダー・セクション・ストリング・テーブルの先頭からシンボル名の最初のバイト (長さフィールドではない) までのバイト・オフセットです。
l_offset (XCOFF64 のみ) このフィールドの使用法は、l_offsetXCOFF32のフィールド。
l_value シンボルの仮想アドレスを指定します。
l_scnum シンボルを含む XCOFF セクションの番号を指定します。 シンボルが未定義またはインポートされた場合、セクション番号は 0 です。 それ以外の場合、セクション番号は、.text,.data、または.bssセクション。 セクション・ヘッダーには、1 から始まる番号が付けられます。
l_smtype シンボル・タイプ、インポート・フラグ、エクスポート・フラグ、およびエントリー・フラグを指定します。

ビット 0 から 4 は、次のように定義されたフラグ・ビットです。

Bit 0     0x80  Reserved.
Bit 1     0x40  Specifies an imported symbol.
Bit 2     0x20  Specifies an entry point descriptor symbol.
Bit 3     0x10  Specifies an exported symbol.
Bit 4     0x08  Specifies a weak symbol.
Bits 5-7  0x07 Symbol type--see below.

ビット 5 から 7 は、以下の定義を持つ 3 ビットのシンボル・タイプ・フィールドを構成します。

0
XTY_ER (サーバー)

別の XCOFF オブジェクト・ファイルに含まれる外部 (グローバル) シンボルのシンボル・テーブル・エントリーを提供する外部参照を指定します。

1
XT_ 標準偏差

csect セクション定義を指定し、XCOFF オブジェクト・ファイル内の最小初期化単位の定義を提供します。

2
XTY_LD (D)

ラベル定義を指定し、初期化された CSECT のグローバル・エントリー・ポイントの定義を提供します。 タイプ XTY_CM の初期化されていない csect には、ラベル定義を含めることはできません。

3
XTY_CM

共通 (BSS 未初期化データ) csect 定義を指定し、XCOFF オブジェクト・ファイル内の最小の未初期化単位の定義を提供します。

4 ~ 7
予約済み
l_smclas
シンボルのストレージ・マッピング・クラスを指定します。これは、 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 補助項目」 を参照してください。
l_ifile
インポート・ファイル ID ストリングを指定します。 この整数は、ローダー・セクションのインポート・ファイル ID 名ストリング・テーブル内のインポート・ファイル ID ストリングの位置の序数値です。 インポートされたシンボルの場合、このフィールドの値 0 は、シンボルがシステム・ローダーへの据え置きインポートであることを示します。 据え置きインポートは、ローダーの処理後もアドレスが未解決のままである可能性があるシンボルです。 シンボルがインポートされなかった場合、このフィールドの値は 0 でなければなりません。
l_parm
パラメーター・タイプ・チェック・ストリングへのオフセットを指定します。 バイト・オフセットは、ローダー・セクション・ストリング・テーブルの先頭からのオフセットです。 バイト・オフセットは、パラメーター・タイプ・チェック・ストリングの最初のバイトを指します (長さフィールドではありません)。 パラメーター・タイプ・チェック・ストリングについて詳しくは、 「タイプ・チェック・セクション」 を参照してください。 値が 0 の場合l_parmフィールドは、このシンボルにパラメーター・タイプ検査ストリングが存在しないことを示し、シンボルはユニバーサル・ハッシュを持つものとして扱われます。

ローダー再配置テーブルのフィールド定義

ローダー・セクション再配置テーブル構造には、ロード時に実行可能 XCOFF ファイルを正しく再配置するためにシステム・ローダーが必要とするすべての再配置情報が含まれています。 loader.h ファイルは、再配置テーブル・フィールドを定義します。 ローダー・セクション再配置テーブルの各項目の長さは、 XCOFF32では 12 バイト、 XCOFF64では 16 バイトです。 l_vaddrl_symndx、およびl_rtype フィールドは、 reloc.h ファイルに定義されている通常の再配置エントリーの対応するフィールドと同じ意味を持ちます。 再配置エントリーについて詳しくは、 XCOFF ファイルの再配置情報 (reloc.h)を参照してください。

表 7. ローダー・セクション再配置テーブル・エントリー構造
フィールド名と説明 XCOFF32 XCOFF64
l_vaddr+
アドレス・フィールド (address field)
  • オフセット: 0
  • 長さ: 4
  • オフセット: 0
  • 長さ: 8
l_symndx+
参照される項目のローダー・セクション・シンボル・テーブル索引
  • オフセット: 4
  • 長さ: 4
  • オフセット: 12
  • 長さ: 4
l_rtype
再配置タイプ
  • オフセット: 4
  • 長さ: 4
  • オフセット: 8
  • 長さ: 4
l_value+
アドレス・フィールド (address field)
  • オフセット: 8
  • 長さ: 2
  • オフセット: 8
  • 長さ: 2
l_rsecnm
再配置されるファイル・セクション番号
  • オフセット: 10
  • 長さ: 2
  • オフセット: 10
  • 長さ: 2
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。

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 名ストリングは、モジュールを正常にロードするためにシステム・ローダーがロードする必要がある従属モジュールのリストを提供します。 ただし、このリストには、指定されたモジュールが依存するモジュールの名前は含まれていません。

表 8. ローダー・セクション・インポート・ファイル 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 バイトの長さフィールドとそれに続くストリングで構成されます。

表 9. ローダー・セクション・ストリング・テーブル
オフセット 長さ (バイト数) 説明
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 ファイルにあります。

例外セクションの項目には、以下の表に示すフィールドが含まれています。

表 10. 初期エントリー: 例外セクションの構造
フィールド名と説明 XCOFF32 XCOFF64
e_addr.e_symndx+
関数のシンボル・テーブル索引
  • オフセット: 0
  • 長さ: 4
  • オフセット: 0
  • 長さ: 4
e_lang+
コンパイラー言語 ID コード
  • オフセット: 4
  • length: 1
  • オフセット: 8
  • length: 1
e_reason+
値 0 (例外理由コード 0)
  • オフセット: 5
  • length: 1
  • オフセット: 9
  • length: 1
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。 でe_addr.e_symndxに接尾部が追加されます。e_addr(すなわちe_addr32.e_symndx).
表 11. 後続のエントリー: 例外セクションの構造
フィールド名と説明 XCOFF32 XCOFF64
e_addr.e_paddr+
トラップ命令のアドレス
  • オフセット: 0
  • 長さ: 4
  • オフセット: 0
  • 長さ: 8
e_lang+
コンパイラー言語 ID コード
  • オフセット: 4
  • length: 1
  • オフセット: 8
  • length: 1
e_reason+
トラップ例外理由コード
  • オフセット: 5
  • length: 1
  • オフセット: 9
  • length: 1
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。 でe_addr.e_paddrに接尾部が追加されます。e_addr(すなわちe_addr32.e_paddr).

フィールド定義

以下に、例外セクションにリストされているフィールドを定義します。

項目 説明
e_symndx 整数が含まれています (e_paddrフィールド)。 使用中のe_reasonフィールドが 0 の場合、このフィールドは関数のシンボル・テーブル索引です。
e_paddr 仮想アドレスを含む (仮想アドレスをオーバーレイする)e_symndxフィールド)。 使用中のe_reasonフィールドがゼロ以外の場合、このフィールドはトラップ命令の仮想アドレスです。
e_lang ソース言語を指定します。 以下のリストは、使用可能な値を定義しています。e_lang設定します。
ID
言語
0x00
C
0x01
FORTRAN
0x02
Pascal
0x03
Ada
0x04
PL/I
0x05
  BASIC
0x06
Lisp
0x07
COBOLの
0x08
Modula2
0x09
C++
0x0A
RPG
0x0B
PL8、PLIX
0x0C
ASSEMBLY
0x0D-0xFF
予約済み
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_FILEC_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 ファイルにあります。 再配置項目には、以下の表に示すフィールドが含まれます。

表 12. 再配置エントリー構造
フィールド名と説明 XCOFF32 XCOFF64
r_vaddr+
再配置されるセクション内の仮想アドレス (位置)
  • オフセット: 0
  • 長さ: 4
  • オフセット: 0
  • 長さ: 8
r_symndx+
参照される項目のシンボル・テーブル・インデックス
  • オフセット: 4
  • 長さ: 4
  • オフセット: 8
  • 長さ: 4
r_rsize+
再配置のサイズと情報
  • オフセット: 8
  • length: 1
  • オフセット: 12
  • length: 1
r_rtype+
再配置タイプ
  • オフセット: 9
  • length: 1
  • オフセット: 13
  • length: 1
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。

セクションの再配置エントリーは、アドレスの昇順でなければなりません。

(ローダー・セクションには、システム・ローダーによって使用される再配置エントリーの単一セットが含まれています。したがって、変更する必要があるセクションを識別するために、各再配置エントリー内にセクション番号が必要です。)

フィールド定義

以下に、再配置情報フィールドを定義します。
項目 説明
r_vaddr バインダーによる変更が必要な値の仮想アドレスを指定します。 データを含むセクションの先頭から変更する必要があるデータへのバイト・オフセット値は、次のように計算できます。

offset_in_section = r_vaddr - s_paddr

r_symndx 参照されるシンボルを見つけるための XCOFF シンボル・テーブルへのゼロ・ベースの索引を指定します。 シンボル・テーブル・エントリーには、以下の時点で適用される変更値を計算するために使用されるアドレスが含まれています。r_vaddr再配置アドレス。
r_rsize 再配置のサイズと符号を指定します。 その内容の詳細については、以下のリストを参照してください。
0x80 (1 ビット)
再配置参照が符号付き (1) か符号なし (0) かを示します。
0x40 (1 ビット)
このフィールドが 1 の場合は、バインダーが元の命令を変更された命令に置き換えたことを示します。
0x3F(6 ビット)
再配置可能参照のビット長から 1 を引いた値を指定します。 現行のアーキテクチャーでは、最大 32 ビット (XCOFF32) または 64 ビット (XCOFF64) のフィールドを再配置できます。
r_rtype 変更値の計算に使用する再配置アルゴリズムをバインダーに示す、8 ビットの再配置タイプ・フィールドを指定します。 この値は、以下によって指定された再配置可能参照ロケーションで適用されます。r_vaddr設定します。 以下の再配置タイプが定義されています。
0x00
R_POS

正の再配置を指定します。 指定されたシンボルのアドレスを提供します。r_symndx設定します。

0x01
R_NEG (R)

負の再配置を指定します。 システムによって指定された記号のアドレスの負の値を提供します。r_symndx設定します。

0x02
R_REL (R)

自己関係の再配置を指定します。 以下によって指定されたシンボルのアドレス間の変位値を提供します。r_symndx変更する csect のアドレスを指定します。

0x03
R_TOC (R)

TOC に関連する再配置を指定します。 r_symndx フィールドで指定されたシンボルのアドレス値と TOC アンカー csect のアドレスとの差を示す変位値を提供します。 TOC アンカー csect は、 XMC_TC0 として定義され、長さが 0 のストレージ・マッピング・クラスを持つシンボルです。 XCOFF セクションごとに、最大で 1 つの TOC アンカー CSECT が許可されます。

リンケージ・エディターは、 r_vaddr フィールドによって参照される命令を変換することができます。 r_symndxフィールドによって指定されるシンボルは、そのストレージ・マッピング・クラスが XMC_TC の場合は TOC シンボルであり、TOC シンボルには、TOC アンカーまたはスレッド・ローカル・ストレージ・ベースの 32,768 バイト以内にある別のシンボルのアドレスが含まれます。 したがって、参照される命令がロードであり、 r_symndx フィールドによって指定されたシンボルが TOC シンボルである場合は、そのロードを即時追加命令に変換することができます。 この変換により、実行中のストレージ参照が除去されます。 命令が変換されると、出力ファイルの書き込み時に R_TOC 再配置タイプが R_TRLA 再配置タイプに置き換えられます。 これにより、オブジェクトが再リンクされた場合に後方変換が可能になります。

0x12
[R_TRL]

TOC に関連する再配置を指定します。 この再配置エントリーは、R_TOC 再配置エントリーと同じように扱われます。ただし、リンク・エディターは、命令をロードから即時追加命令に変換することはできません。

0x13
R_TRLA (R)

TOC に対する相対的な再配置、またはスレッド・ローカル・ストレージ・ベースに対する相対的な再配置を指定します。 r_vaddr フィールドで指定された命令は即時追加命令であり、 r_symndx フィールドで指定されたシンボルは TOC シンボルでなければなりません。これは、そのストレージ・マッピング・クラスが XMC_TC であることを意味します。 この命令は、リンケージ・エディターによって、ロード命令から即時追加命令に以前に変換されています。 リンク・エディターは、命令を変換してロード命令に戻し、再配置タイプを R_TRLA から R_TOC に変更します。 R_TOC 再配置項目の説明に従って、命令を再度変換することができます。

コンパイラーは、この再配置タイプの生成を許可されていません。

r_rtype続行
0x05
R_GL (R)

Global Linkage-外部 TOC アドレスの再配置を指定します。 定義された外部シンボルに関連付けられた TOC のアドレスを提供します。 必要な TOC アドレスを持つ外部シンボルは、以下によって指定されます。r_symndx再配置項目のフィールド。 この再配置エントリーは、以下の場所にある同じ実行可能ファイル内に含まれる TOC のアドレスにアクセスする方法を提供します。r_symndx外部シンボルが定義されています。

0x06
R_TCL

ローカル・オブジェクト TOC アドレスの再配置を指定します。 定義された外部シンボルに関連付けられた TOC のアドレスを提供します。 TOC アドレスが必要な外部シンボルは、以下によって指定されます。r_symndx再配置項目のフィールド。 外部シンボルは、結果の実行可能ファイル内でローカルに定義されます。 この再配置エントリーは、以下の場所にある同じ実行可能ファイル内に含まれる TOC のアドレスにアクセスする方法を提供します。r_symndx外部シンボルが定義されています。

0x0C
R_RL (R)

R_POS 再配置タイプと同じものとして扱われます。

0x0D
R_RLA (R)

R_POS 再配置タイプと同じものとして扱われます。

0x0F
参照

シンボルの (バインダーによる) ガーベッジ・コレクションを防止するための非再配置参照を指定します。 この再配置タイプは、特定の csect が実際の csect のスペースを使用せずに別の csect に依存していることを指定する方法をコンパイラーおよびアセンブラーに提供することを目的としています。 依存関係を参照する理由は、別の csect に暗黙的な依存関係がある csect をバインダーがガーベッジ・コレクション (除去) しないようにするためです。

0x08
R_BA (R)

R_RBA 再配置タイプと同じものとして扱われます。

0x18
R_RBA

ブランチの絶対再配置を指定します。 指定されたシンボルのアドレスを提供します。r_symndx分岐命令のターゲット・アドレスとして使用されます。 ターゲット・アドレスが再配置可能であれば、命令を (相対) ブランチ命令に変更することができます。

0x0A
R_BR (R)

R_RBR 再配置タイプと同じものとして扱われます。

0x1A
R_RBR (R)

(相対) 分岐再配置を指定します。 以下によって指定されたシンボルのアドレス間の変位値を提供します。r_symndx変更するブランチ命令を含む csect のアドレスを指定します。 ターゲット・アドレスが再配置可能でない場合は、命令を絶対ブランチ命令に変更することができます。

R_RBR 再配置タイプは、 のコンパイラーおよびアセンブラーによって使用される標準の分岐再配置タイプです。 この再配置タイプと glink コードにより、実行可能オブジェクト・ファイルは位置に依存しないテキスト・セクションを持つことができます。

r_rtype続行
0x20
R_TLS

汎用動的モデルを使用して、スレッド・ローカル・ストレージの再配置を指定します。 モジュールのスレッド・ローカル・ストレージへのオフセットを提供します。

0x21
R_TLS_IE

R_TLSと同じですが、initial-exec モデルが使用される点が異なります。 つまり、参照されるシンボルは、メインプログラム、または EXEC 時にロードされるモジュールによってエクスポートされる必要があります。

0x22
R_TLS_LD

ローカル動的モデルが使用されることを除き、 R_TLSと同じです。 つまり、参照されるシンボルは参照モジュール内になければなりません。

0x23
R_TLS_LE

R_TLSと同じですが、local-exec モデルが使用される点が異なります。 つまり、参照と参照されるシンボルの両方がメインプログラム内になければなりません。

0x24
R_TLSM

スレッド・ローカル・ストレージの再配置を指定します。 参照される変数のスレッド・ローカル・ストレージのハンドルを提供します。 このハンドルは、pthread ランタイムがスレッド・ローカル・ストレージを見つけるために使用します。

0x25
R_TLSML

スレッド・ローカル・ストレージの再配置を指定します。 参照を含むモジュールのハンドルを提供します。 このr_symndxフィールドには、参照を含む csect シンボルのシンボル・テーブル・インデックスを指定する必要があります。

0x30
R_TOCU

TOC 相対再配置の高位 16 ビットを指定します。 R_TOC 再配置と同様に、変位値が計算されます。 変位値は、 r_symndx フィールドが指定するシンボル内のアドレス値と、TOC アンカー csect のアドレスとの差です。 命令の更新には、変位の高位 16 ビットが使用されます。 TOC サイズが 231 バイトより大きい場合、この再配置でオーバーフローが発生する可能性があります。

0x31
R_TOCL

TOC 相対再配置の下位 16 ビットを指定します。 R_TOC 再配置と同様に、変位値が計算されます。 変位値は、 r_symndx フィールドが指定するシンボル内のアドレス値と、TOC アンカー csect のアドレスとの差です。 命令の更新には、変位の下位 16 ビットが使用されます。

追加の再配置機能

標準的な方法は、未解決の参照または異なるセクション間の参照についてのみ、再配置情報を保持することです。 参照が解決されると、再配置情報は破棄されます。 これは、増分バインドおよび固定アドレス・スペース・モデルには十分です。 再配置可能アドレス・スペース・モデルを再バインドおよび処理する機能を提供するために、再配置情報は 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 ファイルにあります。 行番号項目には、以下の表に示すフィールドが含まれています。

表 13 機能の初期行番号構造項目
フィールド名と説明 XCOFF32 XCOFF64
l_ addr.l_ symndx+
関数のシンボル・テーブル索引
  • オフセット: 0
  • 長さ: 4
  • オフセット: 0
  • 長さ: 4
l_ lnno +
値 0 (行番号 0)
  • オフセット: 4
  • 長さ: 2
  • オフセット: 8
  • 長さ: 4
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。 でl_addr.l_symndxに接尾部が追加されます。l_addr(すなわちl_addr32.l_symndx).
表 14. 機能の後続の行番号項目
フィールド名と説明 XCOFF32 XCOFF64
l_ paddr+
ブレークポイントが挿入されるアドレス
  • オフセット: 0
  • 長さ: 4
  • オフセット: 0
  • 長さ: 8
l_ lnno +
機能の開始を基準とする行番号
  • オフセット: 4
  • 長さ: 2
  • オフセット: 8
  • 長さ: 4
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。 でl_addr.l_paddrに接尾部が追加されます。l_addr(すなわちl_addr32.l_paddr).

フィールド定義

以下のリストは、行番号項目を定義しています。

項目 説明
l_symndx 関数名に対するシンボル・テーブル索引を指定します (l_paddrフィールド)。 使用中のl_lnnoフィールドが 0 の場合は、このフィールドの解釈が使用されます。
l_paddr 行番号に関連付けられたコードの最初の命令の仮想アドレスを指定します (l_symndxフィールド)。 使用中のl_lnnoフィールドが 0 でない場合は、このフィールドの解釈が使用されます。
l_lnno 関数の開始を基準とする行番号、または関数の開始を示す 0 のいずれかを指定します。
注: 先頭以外の関数の一部がインクルード・ファイルからのものである場合、行番号は、関数の先頭からの相対行ではなく、絶対行番号です。 (詳しくは、「使用法およびシンボル値の分類によるストレージ・クラス」の C_BINCL および C_EINCL シンボル・タイプを参照してください。)

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 です。 次の表は、シンボル・テーブル内の各シンボルの固定形式部分の構造を示しています。

表 15. シンボル・テーブル・エントリー・フォーマット
フィールド名と説明 XCOFF32 XCOFF64
n_name
シンボル名 ( n_zeroes および n_offsetと同じ 8 バイトを使用)
  • オフセット: 0
  • 長さ: 8
  • オフセット: N/A
  • 長さ: N/A
n_zeroes
ゼロ。ストリング・テーブルまたは .debug セクション内の名前を示します ( n_nameの最初の 4 バイトをオーバーレイします)。
  • オフセット: 0
  • 長さ: 4
  • オフセット: N/A
  • 長さ: N/A
n_offset+
ストリング・テーブルまたは .debug セクション内の名前のオフセット ( XCOFF32: は n_nameの最後の 4 バイトをオーバーレイします)
  • オフセット: 4
  • 長さ: 4
  • オフセット: 8
  • 長さ: 4
n_value+
シンボル値。ストレージ・クラスによって異なります。
  • オフセット: 8
  • 長さ: 4
  • オフセット: 0
  • 長さ: 8
n_scnum
シンボルのセクション番号
  • オフセット: 12
  • 長さ: 2
  • オフセット: 12
  • 長さ: 2
n_type
基本型および派生型の指定
  • オフセット: 14
  • 長さ: 2
  • オフセット: 14
  • 長さ: 2
n_lang
ソース言語 ID (n_type の最初のバイトをオーバーレイする)
  • オフセット: 14
  • length: 1
  • オフセット: 14
  • length: 1
n_cpu
CPU タイプ ID ( n_typeの 2 番目のバイトをオーバーレイ)
  • オフセット: 15
  • length: 1
  • オフセット: 15
  • length: 1
n_sclass
シンボルのストレージ・クラス
  • オフセット: 16
  • length: 1
  • オフセット: 16
  • length: 1
n_numaux
補助項目の数
  • オフセット: 17
  • length: 1
  • オフセット: 17
  • length: 1
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。

フィールド定義

以下に、シンボル・テーブル・エントリー・フィールドを定義します。

項目 説明
n_name XCOFF32 でのみ使用されます。 8 バイトのヌル埋め込みシンボル名またはシンボリック・デバッガー・スタブ・ストリングを指定します。 ストレージ・クラス・フィールドは、フィールドがシンボル名かシンボリック・デバッガー・ストリングかを判別するために使用されます。 規則により、高位ビットがオンのストレージ・クラス値は、このフィールドがシンボリック・デバッガー・スタブ・ストリングであることを示します。

XCOFF32 シンボル名が 8 バイトより長い場合、フィールドは以下の 2 つのフィールドとして解釈されます。

n_zeroes
値 0 は、シンボル名がストリング・テーブル内にあることを示します。.debugセクション (最初のワードをオーバーレイしますn_name).
n_offset
ストリング・テーブル内のシンボル名へのバイト・オフセットを指定します。.debugセクション (以下の最後の 4 バイトをオーバーレイします。n_name)。 バイト・オフセットは、ストリング・テーブルの先頭を基準にしています。.debugセクション。 バイト・オフセット値 0 は、ヌルまたは長さゼロのシンボル名です。
n_offset XCOFF64: ストリング・テーブル内のシンボル名へのバイト・オフセットを指定します。.debugセクション。 バイト・オフセットは、ストリング・テーブルの先頭を基準にしています。.debugセクション。 バイト・オフセット値 0 は、ヌルまたは長さゼロのシンボル名です。 ( XCOFF32 の場合のみ、以下と共に使用されます。n_zeroes. 上記の項目を参照してください。)
n_value シンボル値を指定します。 シンボル値フィールドの内容は、以下の定義に示すように、ストレージ・クラスによって異なります。
内容
ストレージ・クラス
再配置可能アドレス
C_EXT、C_WEAKEXT、C_HIDEXT、C_FCN、C_BLOCK、C_STAT
ゼロ
C_GSYM、C_BCOMM、C_DECL、C_ENTRY、C_ESTAT、C_ECOMM
csect におけるオフセット
C_FUN、C_STSYM
ファイル内のオフセット
C_BINCL、C_EINCL
コメント・セクションのオフセット
c_info
記号テーブル索引
C_FILE、C_BSTAT
スタック・フレームに対する相対オフセット
C_LSYM、C_PSYM
Register Number
C_RPSYM、C_RSYM
共通ブロック内のオフセット
C_ECOML (C_ECOML)
対応する DWARF セクション内のオフセット
C_DWARF (C_DWARF)
n_scnum 以下のいずれかのシンボルに関連したセクション番号を指定します。
-2
N_DEBUG(特殊シンボリック・デバッグ・シンボル) を指定します。
-1
絶対記号 N_ABSを指定します。 シンボルに値がありますが、再配置可能ではありません。
0
N_UNDEF(未定義の外部シンボル) を指定します。
その他の値
シンボルが定義されたセクション番号を指定します。
n_type このフィールドの使用法は、シンボルのストレージ・クラスによって異なります。 C_FILE シンボルについては、 C_FILE シンボルのファイル補助エントリー」 を参照してください。

C_EXTC_HIDEXT、および C_WEAKEXT シンボルの場合、n_typeフィールドには、 XCOFF32の 2 つの解釈と、 XCOFF64の 1 つの解釈があります。 XCOFF32 に古い解釈が使用されるのは、o_vstamp補助ヘッダーのフィールドは 1 です。

古い XCOFF32 解釈では、シンボルが関数の場合、ビット 10 (0x0020) を設定できます。 それ以外の場合、ビット 10 は 0 でなければなりません。 残りのビットは、タイプ情報を表すために COFF ファイルで定義され、使用されなくなります。

XCOFF64 および新しい XCOFF32 解釈では、n_typeフィールドは、次のようにシンボル・タイプおよび可視性に使用されます。

ビット 0-3
シンボルの可視性。 SYM_V_MASK マクロ (値 0xF000を指定) を使用して、以下のマスク・オフ・ビットを使用できます。n_type可視性を指定しないフィールド。 以下の可視性が定義されています。
0x1000	SYM_V_INTERNAL
0x2000	SYM_V_HIDDEN
0x3000	SYM_V_PROTECTED
0x4000	SYM_V_EXPORTED
ビット 10
シンボルが関数の場合は、オプションで 1 に設定します。 それ以外の場合は、0 に設定される。
ビット 4 から 9、11 から 15
将来のために予約されています。

シンボルの可視性については、 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
予約済み
1
(32 ビット・モード) を指定します。
2
予約済み
3
32 ビットと プロセッサーの共通部分を指定します。
4
プロセッサーを指定します。
5
異なるアーキテクチャー間での命令の組み合わせを指定します。
6
命令と 命令の混合を指定します ()。
7-223
予約済み
224
命令を指定します。
225-255
予約済み

両方のフィールドが 0 の場合、ソース言語に関する情報は提供されません。

ファイル名補助項目形式
オフセット
長さ (バイト単位)
名前
description
0
14
x_fname
ソース・ファイル・ストリング
0
4
x_zeroes
ゼロ。ストリング・テーブル内のファイル・ストリングを示します (以下の最初の 4 バイトをオーバーレイします)。x_fname)
4
4
x_offset
ストリング・テーブル内のファイル・ストリングのオフセット (以下の 5th-8th のバイトをオーバーレイします)x_fname)
14
1
x_ftype
ファイル・ストリング・タイプ
15
2
予約済み 0 を含む必要があります。
17
1
x_auxtype
補助シンボル・タイプ (XCOFF64 のみ)

フィールド定義

以下に、上記のフィールドを定義します。

項目 説明
x_fname ソース・ファイル名またはコンパイラー関連ストリングを指定します。

ファイル名またはストリングが 8 バイトより長い場合、フィールドは以下の 2 つのフィールドとして解釈されます。

x_zeroes
値 0 は、ソース・ファイル・ストリングがストリング・テーブル内にあることを示します (以下の最初の 4 バイトをオーバーレイします)。x_fname).
x_offset
ストリング・テーブルの先頭からソース・ファイル・ストリングの最初のバイトまでのオフセットを指定します (以下の最後の 4 バイトをオーバーレイします)。x_fname).
x_ftype ソース・ファイルのストリング・タイプを指定します。
0 XFT_FN
ソース・ファイル名を指定します。
1 つの XFT_CT
コンパイラーのタイム・スタンプを指定します。
2 つの XFT_CV
コンパイラー・バージョン番号を指定します。
128 個の XFT_CD
コンパイラー定義情報を指定します。
(名前なし) 予約済み このフィールドには 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 構造体にあります。

表 16. csect 補助項目形式
フィールド名と説明 XCOFF32 XCOFF64
x_scnlen
(フィールド定義セクションを参照)
  • オフセット: 0
  • 長さ: 4
  • オフセット: N/A
  • 長さ: N/A
x_scnlen_lo
(フィールド定義セクションを参照) セクション長の下位 4 バイト
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 0
  • 長さ: 4
x_parmhash
.typchk セクションのパラメーター・タイプ・チェック・ハッシュのオフセット
  • オフセット: 4
  • 長さ: 4
  • オフセット: 4
  • 長さ: 4
x_snhash
.typchk セクション番号
  • オフセット: 8
  • 長さ: 2
  • オフセット: 8
  • 長さ: 2
x_smtyp
シンボル位置合わせおよびタイプ 3 ビット・シンボル位置合わせ (ログ 2) 3 ビット・シンボル・タイプ
  • オフセット: 10
  • length: 1
  • オフセット: 10
  • length: 1
x_smclas
ストレージ・マッピング・クラス
  • オフセット: 11
  • length: 1
  • オフセット: 11
  • length: 1
x_stab
予約済み
  • オフセット: 12
  • 長さ: 4
  • オフセット: N/A
  • 長さ: N/A
x_snstab
予約済み
  • オフセット: 16
  • 長さ: 2
  • オフセット: N/A
  • 長さ: N/A
x_scnlen_hi
(フィールド定義セクションを参照) セクション長の上位 4 バイト
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 12
  • 長さ: 4
(パッド)
予約済み
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 16
  • length: 1
x_auxtype
_AUX_CSECT; 補助項目のタイプを示します。
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 17
  • length: 1

フィールド定義

以下に、上記のフィールドを定義します。
項目 説明
x_scnlen 以下に依存する意味を指定します。x_smtypことができます。
指定する場合は、
結果
XT_ 標準偏差
x_scnlencsect の長さが入っています。
XTY_LD (D)
x_scnlen収容 csect のシンボル・テーブル索引が入っています。
XTY_CM
x_scnlencsect の長さが入っています。
XTY_ER (サーバー)
x_scnlen0 が入ります。
XCOFF64 形式では、以下の値x_scnlen次の 2 つのフィールドに分割されます。x_scnlen_hiこれは、値の上位 4 バイトを表します。x_scnlen_lo値の下位 4 バイトを表します。
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 シンボルの位置合わせとタイプを指定します。
ビット 0-4
5 ビット csect アドレス位置合わせ値 (ログ・ベース 2) が入っています。 例えば、このフィールドの値 3 は、23 または 8 を示します。これは、csect が 8 バイトのアドレス値に位置合わせされることを意味します。 位置合わせ値が使用されるのは, システムのビット 5-7 の値がx_smtypフィールドは XTY_SD または XTY_CMのいずれかです。
ビット 5-7
3 ビットのシンボル・タイプ・フィールドが入っています。 以下のビット 5 から 7 の定義を参照してください。l_smtype詳細については、「ローダー・セクション」のフィールドを参照してください。
x_smclas csect ストレージ・マッピング・クラスを指定します。 このフィールドにより、バインダーは、ストレージ・マッピング・クラスごとに CSECT を配置することができます。 このx_smclasフィールドが使用されるのは, システムのビット 5-7 の値がx_smtypフィールドは XTY_SD または XTY_CMのいずれかです。

以下のストレージ・マッピング・クラスは読み取り専用であり、通常は以下にマップされます。.textセクション:

Value Class
説明
0 XMC_PR
プログラム・コードを指定します。 csect には、プログラムの実行可能命令が含まれています。
1 件の XMC_RO
読み取り専用定数を指定します。 csect には定数のデータが含まれており、プログラムの実行中に変更されることはありません。
2 XMC_DB
デバッグ・ディクショナリー・テーブルを指定します。 csect には、シンボリック・デバッグ・データまたは例外処理データが含まれています。 このストレージ・マッピング・クラスは、特殊なシンボリック・デバッグ要件または例外処理要件を持つコンパイラーが、実行時にロードされるが、プログラムの実行可能コードとは別に収集できる CSECT にデータを配置できるように定義されています。
6 XMC_GL (XMC_GL)
グローバル・リンケージを指定します。 csect は、モジュール外になる可能性があるターゲット・シンボルに対する csect 相対呼び出しを処理するために必要なインターフェース・コードを提供します。 このグローバル・リンケージ csect は、ターゲット・シンボルと同じ名前を持ち、相対呼び出しのローカル・ターゲットになります。 結果として、csect は位置に依存しないコードを.text実行可能 XCOFF オブジェクト・ファイルのセクション。
7 XMC_XO
拡張操作を指定します。 このタイプの csect は、TOC に依存 (参照) しません。 これは、ブランチ絶対命令のターゲットになることができるように、メモリー内の固定アドレスに常駐することを目的としています。
12 XMC_TI
予約済み
13 XMC_TB
予約済み

以下のストレージ・マッピング・クラスは読み取り/書き込みであり、通常は以下にマップされます。.dataまたは.bssセクション:

Value Class
説明
5 XMC_RW
読み取り/書き込みデータを指定します。 このタイプの csect には、プログラムの実行中に変更が許可される、初期化されたデータまたは初期化されていないデータが含まれています。 :NONE.x_smtyp値が XTY_SDの場合、csect には初期化されたデータが含まれ、.dataセクション。 :NONE.x_smtyp値が XTY_CMの場合、csect は初期化されず、.bssセクション。 通常、C ソース・ファイルからの初期化されたすべての静的データは、このタイプの単一の csect に含まれています。 csect のストレージ・クラス値は C_HIDEXTになります。 C ソース・ファイルからのグローバル・データ・スカラーまたは構造体の初期化された定義は、このタイプの独自の csect に含まれています。 csect のストレージ・クラス値は C_EXTになります。 このタイプの csect は、他のオブジェクト・ファイルからの名前参照によってアクセスできます。
x_smclas続行
Value Class
説明
15 XMC_TC0
TOC アドレス可能度の TOC アンカーを指定します。 これは長さがゼロの csect で、n_valueaddress は、TOC 相対アドレス可能度の基底アドレスを提供します。 XCOFF オブジェクト・ファイルのセクションごとに、タイプ XMC_TC0 の csect は 1 つしか許可されません。 コンパイラーおよびアセンブラーが複数を生成できるようにする実装.dataセクションでは、TOC 相対データ項目として (再配置エントリーを介して) 参照されるデータを含む各セクションに、 XMC_TC0 タイプの csect がなければなりません。 一部のハードウェア・アーキテクチャーでは、ロード命令内の相対変位フィールドに含まれる可能性のある値を制限します。 この制限は、実行可能 XCOFF オブジェクトの TOC のサイズに固有の制限になります。 RS/6000®の場合、この制限は 65,536 バイト、つまり 16,384 個の 4 バイト TOC エントリーです。
3 つの XMC_TC
22 XMC_TE
汎用 TOC エントリーを指定します。 このタイプの CSECT は、ポインターと同じサイズであり、他の CSECT またはグローバル・シンボルのアドレスを含んでいます。 これらの csects は、他の csects またはシンボルへのアドレス可能度を提供します。 シンボルは、ローカル実行可能 XCOFF オブジェクトまたは別の実行可能 XCOFF オブジェクトのいずれかにある可能性があります。 バインダーは、次のように特殊な処理セマンティクスを使用して、重複する TOC エントリーを除去します。
  • ストレージ・クラス値が C_EXT であるシンボルはグローバル・シンボルであり、名前 (非ヌル) を持つ必要があります。n_nameフィールド)。 これらのシンボルは、重複項目を結合するための特別な TOC 処理ロジックを必要としません。 同じ項目が重複していますn_name1 つの項目に結合されます。
  • ストレージ・クラス値が C_HIDEXT であるシンボルはグローバル・シンボルではなく、重複するエントリーはコンテキストによって解決されます。 このような 2 つのシンボルは、以下の条件が満たされるたびに、重複として定義され、単一のエントリーに結合されます。
    • このn_nameフィールドは同じです。 つまり、ヌル名または同じ名前ストリングのいずれかになります。
    • それぞれがポインターと同じサイズです。
    • それぞれに、同じ名前の外部シンボルを参照する単一の RLD 項目があります。

バインダーが結合できない重複 TOC エントリーの数を最小化するには、コンパイラーとアセンブラーは TOC エントリーの共通命名規則に従う必要があります。 規則により、コンパイラーおよびアセンブラーは、 C_HIDEXT のストレージ・クラス値を持つ TOC エントリーを作成します。n_name文字列と同じ文字列n_nameTOC エントリーがアドレス指定するシンボルの値。

ストレージ・マッピング・クラス XMC_TCXMC_TE は同等ですが、バインダーが XMC_TC および XMC_TD シンボルの後に XMC_TE シンボルをマップする必要がある点が異なります。

x_smclas続行
Value Class
説明
16 XMC_TD
TOC 内のスカラー・データ・エントリーを指定します。 コンパイラー生成コードによって TOC から直接アクセスされる、 XMC_RW csect の特殊な形式である csect。 これにより、頻繁に使用されるいくつかのグロボル・シンボルは、TOC に含まれるアドレス・ポインター csect を介して間接的にアクセスするのではなく、TOC から直接アクセスすることができます。 XMC_TD タイプの csect には、以下の特性があります。
  • コンパイラーは、タイプ XMC_TDの csect に含まれているデータに直接アクセスするための TOC であるコードを生成します。
  • 長さは 4 バイト以下です。
  • プログラムの実行時に変更できるデータを初期化しました。
  • 同じ名前付き csect (タイプ XMC_RW または XMC_UA ) が存在する場合、それは XMC_TD csect に置き換えられます。

TOC スカラーが TOC 内に存在できない場合、バインダーは、コンパイラーが生成した TOC 相対命令を従来の間接アドレッシング命令シーケンスに変換できなければなりません。 この変換は、TOC スカラーが共有オブジェクトに含まれている場合に必要です。

10 XMC_DS
以下の 3 つの値を含む関数記述子を含む csect を指定します。
  • 関数用の実行可能コードのアドレス。
  • 関数が含まれているモジュールの TOC アンカーのアドレス (TOC 基底アドレス)。
  • 環境ポインター (Pascal や PL/I などの言語で使用される)。

関数に対する関数記述子 csect は 1 つだけであり、関数自体が含まれているのと同じ実行可能ファイル内に含まれている必要があります。 関数記述子は C_EXT のストレージ・クラス値を持ち、n_nameソース・ファイルの中の関数の名前と同じ値。 関数記述子のアドレスは、実行可能 XCOFF ファイルにインポートされ、そこからエクスポートされます。

8 XMC_SV
32 ビット監視プログラム呼び出し記述子 csect を指定します。 監視プログラム呼び出し記述子は、オペレーティング・システム・カーネル内に含まれています。 アプリケーション・プログラムに対しては、監視プログラム呼び出し記述子への参照は、通常の関数記述子への参照と同じように扱われます。 関数記述子が監視プログラム呼び出し記述子として扱われるのは、インポート/エクスポート・メカニズムによってです。 これらのシンボルは、32 ビット・プログラムでのみ使用可能です。
17 XMC_SV64
64 ビット監視プログラム呼び出し記述子 csect を指定します。 監視プログラム呼び出し情報については、 XMV_SV を参照してください。 これらのシンボルは、64 ビット・プログラムでのみ使用可能です。
18 XMC_SV3264
32 ビットと 64 ビットの両方の監視プログラム呼び出し記述子 csect を指定します。 監視プログラム呼び出し情報については、 XMV_SV を参照してください。 これらのシンボルは、32 ビットと 64 ビットの両方のプログラムで使用できます。
4 XMC_UA
分類されていません。 この csect は読み取り/書き込みとして扱われます。 この csect は、結果の csect の真の分類を判別できないアセンブラーまたはオブジェクト・ファイル変換プログラムによって頻繁に作成されます。
9 XMC
BSS クラス (初期化されていない静的内部) を指定します。 このタイプの csect は初期化されておらず、以下のものにマップされます。.bssセクション。 このタイプの csect には、x_smtypXTY_CMの値。
x_smclas続行
Value Class
説明
11 XMC_UC
名前なし FORTRAN 共通を指定します。 このタイプの csect は、名前なしで初期化されていない共通 FORTRAN を対象としています。 これは、以下のものにマップされることを意図しています。.bssセクション。 このタイプの csect には、x_smtypXTY_CMの値。

以下のストレージ・マッピング・クラスは読み取り/書き込みであり、.tdataセクション:

20 XMC_TL
読み取り/書き込みスレッド・ローカル・データを指定します。 このタイプの csect には、プロセス内のすべてのスレッドに対してローカルな初期化データが含まれています。 新規スレッドが作成されると、スレッドのスレッド・ローカル・データを初期化するために XMC_TL タイプの csect が使用されます。

以下のストレージ・マッピング・クラスは読み取り/書き込みであり、.tbssセクション:

二一 XMC_UL
読み取り/書き込みスレッド・ローカル・データを指定します。 このタイプの csect には、プロセス内のすべてのスレッドに対してローカルな未初期化データが含まれています。 新規スレッドが作成されると、このタイプの csect のスレッド・ローカル・ストレージはゼロに初期化されます。
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フィールドは同じ値でなければなりません。

関数補助シンボル・テーブル項目は、以下の表に定義されています。

表 17. 機能補助項目形式
フィールド名と説明 XCOFF32 XCOFF64
x_exptr
例外テーブル項目へのファイル・オフセット
  • オフセット: 0
  • 長さ: 4
  • オフセット: N/A
  • 長さ: N/A
x_fsize
関数のサイズ (バイト単位)
  • オフセット: 4
  • 長さ: 4
  • オフセット: 8
  • 長さ: 4
x_lnnoptr
行番号へのファイル・ポインター
  • オフセット: 8
  • 長さ: 4
  • オフセット: 0
  • 長さ: 8
x_endndx
この機能を超える次の項目のシンボル・テーブル索引
  • オフセット: 12
  • 長さ: 4
  • オフセット: 12
  • 長さ: 4
(パッド)
未使用
  • オフセット: 16
  • 長さ: 2
  • オフセット: 16
  • length: 1
x_auxtype
_AUX_FCN; 補助項目のタイプ
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 17
  • length: 1

フィールド定義

以下は、機能補助項目フォーマット・テーブルにリストされているフィールドを定義しています。

項目 説明
x_exptr (XCOFF32 のみ) このフィールドは、例外テーブル・エントリーを指すファイル・ポインターです。 値は、XCOFF オブジェクト・ファイルの先頭からのバイト・オフセットです。 XCOFF64 ファイルでは、例外テーブル・オフセットは例外補助シンボル・テーブル・エントリーにあります。
x_fsize 関数のサイズをバイト単位で指定します。
x_lnnoptr 行番号へのファイル・ポインターを指定します。 値は、XCOFF オブジェクト・ファイルの先頭からのバイト・オフセットです。
x_endndx この機能を超える次の項目のシンボル・テーブル索引を指定します。

XCOFF64 でのみ定義されている例外補助シンボル・テーブル項目を以下の表に示します。

表 18. 例外補助項目フォーマット (XCOFF64 のみ)
オフセット 長さ 名前および説明
0 8
x_exptr
例外テーブル項目までのファイル・オフセット。
8 4
x_fsize
関数のサイズ (バイト単位)
12 4
x_endndx
この機能を超える次の項目のシンボル・テーブル索引
16 1
(パッド)
未使用
17 1
x_auxtype
_AUX_EXCEPT が入ります。補助項目のタイプ。

フィールド定義

以下は、例外補助項目フォーマット・テーブルにリストされるフィールドを定義しています。

項目 説明
x_exptr このフィールドは、例外テーブル・エントリーを指すファイル・ポインターです。 値は、XCOFF オブジェクト・ファイルの先頭からのバイト・オフセットです。
x_fsize 関数のサイズをバイト単位で指定します。
x_endndx この機能を超える次の項目のシンボル・テーブル索引を指定します。

Block Auxiliary Entry for the C_BLOCK and C_FCN Symbols (C_BLOCK および C_FCN シンボルのブロック補助項目)

シンボル補助シンボル・テーブル項目は、関数の開始ブロックと終了ブロックに関連した情報を提供するために XCOFF で定義されます。 シンボル補助シンボル・テーブル・エントリーは、シンボリック・デバッガーが使用するためにコンパイラーによって作成されます。

表 19. テーブル・エントリー・フォーマット
フィールド名と説明 XCOFF32 XCOFF64
(名前なし)
予約済み
  • オフセット: 0
  • 長さ: 2
  • オフセット: N/A
  • 長さ: N/A
x_lnnohi
ソースの行番号の上位 2 バイト
  • オフセット: 2
  • 長さ: 2
  • オフセット: N/A
  • 長さ: N/A
x_lnno
コピー元の行番号の下位 2 バイト
  • オフセット: 4
  • 長さ: 2
  • オフセット: N/A
  • 長さ: N/A
x_lnno
ソース行番号
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 0
  • 長さ: 4
(名前なし)
予約済み
  • オフセット: 6
  • 長さ: 12
  • オフセット: 4
  • 長さ: 13
x_auxtype
_AUX_SYM; 補助項目のタイプを含む
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 17
  • length: 1

フィールド定義

以下に、上記のフィールドを定義します。

項目 説明
(名前なし) 予約済み
x_lnnohi XCOFF32の場合、ソース・ファイルの行番号の高位 16 ビットを指定します。
x_lnno ソース・ファイルの行番号を指定します。 このフィールドの最大値は、 XCOFF64 の場合は 65535、 XCOFF64の場合は 232 です。

C_STAT シンボル用のセクション補助項目

セクション補助シンボル・テーブル・エントリー ID は XCOFF32 で定義され、コンパイラーまたはアセンブラーによって作成されたセクションのサイズに関する情報をシンボル・テーブルに提供します。 コンパイラーによるこの情報の生成はオプションであり、バインダーによって無視され、除去されます。

注: x_scnlen および x_nreloc の後の + は、肩文字でなければなりません。 この上付き文字の他のインスタンスは、既存の資料で見つけることができます。
表 20. セクション補助項目フォーマット (XCOFF32 のみ)
オフセット 長さ (バイト数) 名前および説明
0 4
x_scnlen
セクション長
4 2
x_nreloc
再配置エントリーの数
6 2
x_nlinno
行番号の数
8 10
(名前なし)
予約済み

フィールド定義

以下のリストは、フィールドを定義しています。

項目 説明
x_scnlen セクションの長さをバイト単位で指定します。
x_nreloc 再配置エントリーの数を指定します。 このフィールドの最大値は 65535 です。
x_nlinno 行番号の数を指定します。 このフィールドの最大値は 65535 です。
(名前なし) 予約済み

XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。 シンボル・テーブルについて詳しくは、 「シンボル・テーブル情報」 を参照してください。

デバッグについては、 「デバッグ・セクション」 を参照してください。

C_DWARF シンボル用の SECT 補助項目

SECT 補助シンボル・テーブル項目は、 C_DWARF シンボルによって表されるセクション部分のサイズに関する情報をシンボル・テーブルに提供するように定義されています。

表 21. C_DWARF シンボルのセクション補助エントリー・フォーマット
フィールド名と説明 XCOFF32 XCOFF64
x_scnlen+
シンボルによって表されるセクションの部分の長さ。
  • オフセット: 0
  • 長さ: 4
  • オフセット: 0
  • 長さ: 8
(名前なし)
予約済み
  • オフセット: 4
  • 長さ: 4
  • オフセット: N/A
  • 長さ: N/A
x_nreloc +
セクション内の再配置エントリーの数
  • オフセット: 8
  • 長さ: 4
  • オフセット: 8
  • 長さ: 8
(名前なし)
予約済み
  • オフセット: 12
  • 長さ: 4
  • オフセット: N/A
  • 長さ: N/A
(名前なし)
予約済み
  • オフセット: 16
  • 長さ: 2
  • オフセット: 16
  • length: 1
x_auxtype
_AUX_SECT; 補助項目のタイプを含む
  • オフセット: N/A
  • 長さ: N/A
  • オフセット: 17
  • length: 1
注:+__XCOFF_HYBRID__ が定義されている場合は、「32」または「64」の接尾部を使用します。

フィールド定義

以下のリストは、フィールドを定義しています。

項目 説明
(no name) 予約済み
x_scnlen このシンボルによって表されるセクションの部分のサイズ。
x_nreloc このシンボルの再配置エントリーの数。 バインダーはこのフィールドを 0 に設定します。

ストレージ・クラスごとのシンボル・テーブル・フィールドの内容

このセクションでは、定義された各ストレージ・クラスのシンボル・テーブル・フィールドの内容を定義します。n_sclass) XCOFF で使用されます。 次の表は、ストレージ・クラス項目をアルファベット順にリストしています。 詳しくは、 「シンボル・テーブル・エントリー (syms.h)」 を参照してください。

表 22. ストレージ・クラス別シンボル・テーブル
クラス定義 フィールドの内容
C_BCOMM 135 共通ブロックの開始
名前
共通ブロックの名前 *
n_value
0、未定義
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_BINCL 108 インクルード・ファイルの先頭
名前
インクルード・ファイルのソース名 **
n_value
ファイル・ポインター (file pointer)
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_BLOCK 100 内部ブロックの開始または終了
名前
.bb または .eb
n_value
再配置可能アドレス
N_SCNUM
N_SCNUM
補助 (補助) エントリー
BLOCK
C_BSTAT 143 静的ブロックの開始
名前
.bs
n_value
記号テーブル索引
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_DECL 140 オブジェクト (タイプ) の宣言
名前
デバッガー・スタブ・ストリング *
n_value
0、未定義
N_SCNUM
N_SCNUM
補助 (補助) エントリー
C_DWARF 112 DWARF シンボル
名前
対応する DWARF セクションの名前と同じ
n_value
対応する DWARF セクションへの再配置可能オフセット
N_SCNUM
DWARF セクションのセクション番号
補助 (補助) エントリー
SECT
C_ECOML 136 共通ブロックのローカル・メンバー
名前
デバッガー・スタブ・ストリング *
n_value
共通ブロック内のオフセット
N_SCNUM
N_ABS
補助 (補助) エントリー
C_ECOMM 137 共通ブロックの終わり
名前
デバッガー・スタブ・ストリング *
n_value
0、未定義
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_EINCL 109 インクルード・ファイルの終わり
名前
インクルード・ファイルのソース名 **
n_value
ファイル・ポインター (file pointer)
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_ENTRY 141 代替エントリー
名前
*
n_value
0、未定義
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_ESTAT 144 静的ブロックの終わり
名前
.es
n_value
0、未定義
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_EXT 2 外部シンボル (バインダー処理用の外部シンボルの定義)
名前
シンボル名 **
n_value
再配置可能アドレス
N_SCNUM
N_SCNUM または N_UNDEF
補助 (補助) エントリー
機能 CSECT
C_FCN 101 機能の開始または終了
名前
.bf または .ef
n_value
再配置可能アドレス
N_SCNUM
N_SCNUM
補助 (補助) エントリー
BLOCK
C_FILE 103 ソース・ファイル名およびコンパイラー情報
名前
.file またはソース・ファイル名 (補助項目がない場合) * *
n_value
記号テーブル索引
N_SCNUM
N_DEBUG
補助 (補助) エントリー
ファイル
C_FUN 142 関数またはプロシージャー
名前
デバッガー・スタブ・ストリング *
n_value
包含 csect 内のオフセット
N_SCNUM
N_ABS
補助 (補助) エントリー
C_GSYM 128 グローバル変数
名前
デバッガー・スタブ・ストリング *
n_value
0、未定義
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_GTLS 145 グローバル・スレッド・ローカル変数
名前
デバッガー・スタブ・ストリング *
n_value
0、未定義
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_HIDEXT 107 名前なし外部シンボル
名前
シンボル名またはヌル * *
n_value
再配置可能アドレス
N_SCNUM
N_SCNUM
補助 (補助) エントリー
機能 CSECT
C_INFO 100 コメント・セクション参照
名前
情報名 ID またはヌル **
n_value
コメント・セクション内のオフセット
N_SCNUM
N_SCNUM
補助 (補助) エントリー
C_LSYM 129 スタックに割り振られた自動変数
名前
デバッガー・スタブ・ストリング *
n_value
スタック・フレームに対する相対オフセット
N_SCNUM
N_ABS
補助 (補助) エントリー
C_NULL 0 削除のマークが付けられたシンボル・テーブル・エントリー。
名前
n_value
0x00DE1E00
N_SCNUM
補助 (補助) エントリー
任意
C_PSYM 130 スタックに割り振られたサブルーチンの引数
名前
デバッガー・スタブ・ストリング *
n_value
スタック・フレームに対する相対オフセット
N_SCNUM
N_ABS
補助 (補助) エントリー
C_RPSYM 132 レジスターに保管されている関数またはプロシージャーの引数
名前
デバッガー・スタブ・ストリング *
n_value
Register Number
N_SCNUM
N_ABS
補助 (補助) エントリー
C_RSYM 131 レジスター変数
名前
デバッガー・スタブ・ストリング *
n_value
Register Number
N_SCNUM
N_ABS
補助 (補助) エントリー
C_STAT 3 静的シンボル (不明。 一部のコンパイラーは、シンボル・テーブル内にこれらのシンボルを生成して、.text,.dataおよび.bssセクション。 バインダーによって使用または保存されない。)
名前
シンボル名 **
n_value
再配置可能アドレス
N_SCNUM
N_SCNUM
補助 (補助) エントリー
SECTION
C_STSYM 133 静的に割り振られたシンボル
名前
デバッガー・スタブ・ストリング *
n_value
csect 内のオフセット
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_STTLS 146 静的スレッド・ローカル変数
名前
デバッガー・スタブ・ストリング *
n_value
0、未定義
N_SCNUM
N_DEBUG
補助 (補助) エントリー
C_TCSYM 134 予約済み
名前
デバッガー・スタブ・ストリング *
n_value
N_SCNUM
補助 (補助) エントリー
C_WEAKEXT 111 弱い外部シンボル (バインダー処理用の弱い外部シンボルの定義)
名前
シンボル名 **
n_value
再配置可能アドレス
N_SCNUM
N_SCNUM または N_UNDEF
補助 (補助) エントリー
機能 CSECT
注:
  1. * ロング・ネームの場合、n_offset値は次の値へのオフセットです:.debugセクション。
  2. ** ロング・ネームの場合、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 をお勧めします。 以下の表は、ストリング表の編成を示しています。

表 23. ストリング・テーブル編成
オフセット 長さ (バイト数) 説明
0 4 ストリング・テーブルの長さ。
4 n シンボル名ストリング、ヌル終了。
    フィールドは、シンボル名ごとに繰り返されます。

XCOFF ファイル・フォーマットの一般情報については、 「XCOFF オブジェクト・ファイル・フォーマット」 を参照してください。

dbx アプリケーション・ストリング

デバッグ・セクションには、シンボリック・デバッガー・スタブ・ストリング (シンボル・テーブル・ストリング) が含まれています。 これは、コンパイラーおよびアセンブラーによって生成されます。 これは、シンボリック・デバッガーが使用するシンボル属性情報を提供します。

一般的な説明については、 「デバッグ・セクション」 を参照してください。

Stabstring Terminal Symbols

stabstring 文法には、すべて大文字で書かれた 5 つのタイプの終端記号があります。 これらの記号は、以下のリストの正規表現によって記述されます。
注: [] (大括弧) は 1 つのインスタンスを表し、[] * (大括弧のアスタリスク) はゼロ個以上のインスタンスを表し、[] + (大括弧の正符号) は 1 つ以上のインスタンスを表します。 (括弧) は、0 個または 1 個のインスタンスを表します。* (ドット・アスタリスク) はゼロ個以上のバイトのシーケンスを表し、| (パイプ) は代替を表します。
シンボル 正規表現
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 = 値による受け渡し