リンカーとライブラリ

特殊セクション

さまざまなセクションがプログラム情報と制御情報を保持します。以下の一覧表に示されているセクションはシステムで使用されますが、これらのセクションには一覧表で示されている型と属性が存在します。

表 7-17 特殊セクション

名前 

型 

属性 

.bss

SHT_NOBITS

SHF_ALLOC + SHF_WRITE

.comment

SHT_PROGBITS

なし 

.data

SHT_PROGBITS

SHF_ALLOC + SHF_WRITE

.data1

SHT_PROGBITS

SHF_ALLOC + SHF_WRITE

.dynamic

SHT_DYNAMIC

SHF_ALLOC + SHF_WRITE

.dynstr

SHT_STRTAB

SHF_ALLOC

.dynsym

SHT_DYNSYM

SHF_ALLOC

.fini

SHT_PROGBITS

SHF_ALLOC + SHF_EXECINSTR

.fini_array

SHT_FINI_ARRAY

SHF_ALLOC + SHF_WRITE

.got

SHT_PROGBITS

「大域オフセットテーブル (プロセッサ固有)」を参照

.hash

SHT_HASH

SHF_ALLOC

.init

SHT_PROGBITS

SHF_ALLOC + SHF_EXECINSTR

.init_array

SHT_INIT_ARRAY

SHF_ALLOC + SHF_WRITE

.interp

SHT_PROGBITS

「プログラムインタプリタ」を参照

.note

SHT_NOTE

なし 

.plt

SHT_PROGBITS

「プロシージャのリンクテーブル (プロセッサ固有)」を参照

.preinit_array

SHT_PREINIT_ARRAY

SHF_ALLOC + SHF_WRITE

.rela

SHT_RELA

なし 

.relname

SHT_REL

「再配置」を参照

.relaname

SHT_RELA

「再配置」を参照

.rodata

SHT_PROGBITS

SHF_ALLOC

.rodata1

SHT_PROGBITS

SHF_ALLOC

.shstrtab

SHT_STRTAB

なし 

.strtab

SHT_STRTAB

後続の .strtab 記述を参照

.symtab

SHT_SYMTAB

「シンボルテーブル」を参照

.text

SHT_PROGBITS

SHF_ALLOC + SHF_EXECINSTR

.SUNW_bss

SHT_NOBITS

SHF_ALLOC + SHF_WRITE

.SUNW_heap

SHT_PROGBITS

SHF_ALLOC + SHF_WRITE

.SUNW_move

SHT_SUNW_move

SHF_ALLOC

.SUNW_reloc

SHT_rel

SHT_rela

SHF_ALLOC

.SUNW_syminfo

SHT_SUNW_syminfo

SHF_ALLOC

.SUNW_version

SHT_SUNW_verdef

SHT_SUNW_verneed

SHT_SUNW_versym

SHF_ALLOC

.bss

このセクションは、プログラムのメモリーイメージで使用される初期化されていないデータを保持します。システムは、プログラムが実行を開始すると 0 でデータを初期化することになっています。このセクションは、セクション型 SHT_NOBITS で示されているとおり、ファイルスペースを占めません。

.comment

このセクションは、コメント情報を保持し、このセクションはコメント情報を保持し、通常、コンパイルシステムのコンポーネントが使用します。このセクションは mcs(1) によって操作できます。

.data.data1

これらのセクションは、プログラムのメモリーイメージに使用される初期化されているデータを保持します。

.dynamic

このセクションは、動的リンク情報を保持します。詳細は、「動的セクション」を参照してください。

.dynstr

このセクションは、動的リンクに必要な文字列 (最も一般的には、シンボルテーブルエントリに関連付けられている名前を表す文字列) を保持します。

.dynsym

このセクションは、動的リンクシンボルテーブルを保持します。詳細は、「シンボルテーブル」を参照してください。

.fini

このセクションは、プロセス終了時に使用される実行可能命令を保持します。つまり、プログラムが正常終了すると、システムはこのセクションの命令を実行できるようにします。詳細は、「初期設定および終了ルーチン」を参照してください。

.fini_array

このセクションは、そのセクションを含む実行可能ファイルまたは共有オブジェクトの単一の終了配列に使用される関数ポインタの配列を保持します。詳細は、「初期設定および終了ルーチン」を参照してください。

.got

このセクションは、大域オフセットテーブルを保持します。詳細は、「大域オフセットテーブル (プロセッサ固有)」を参照してください。

.hash

このセクションは、シンボルハッシュテーブルを保持します。詳細は、「ハッシュテーブル」を参照してください。

.init

このセクションは、プロセス初期化時に使用される実行可能命令を保持します。つまり、プログラムが実行を開始すると、システムはプログラムエントリポイントを呼び出す前にこのセクションの命令を実行できるようにします。詳細は、「初期設定および終了ルーチン」を参照してください。

.init_array

このセクションは、そのセクションを含む実行可能ファイルまたは共有オブジェクトの単一の初期設定配列に使用される関数ポインタの配列を保持します。詳細は、「初期設定および終了ルーチン」を参照してください。

.interp

このセクションは、プログラムインタプリタのパス名を保持します。詳細は、「プログラムインタプリタ」を参照してください。

.note

このセクションは、「注釈セクション」に記述されている形式で情報を保持します。

.plt

このセクションは、プロシージャのリンクテーブルを保持します。詳細は、「プロシージャのリンクテーブル (プロセッサ固有)」を参照してください。

.preinit_array

このセクションは、そのセクションを含む実行可能ファイルまたは共有オブジェクトの単一の初期設定前の配列に使用される関数ポインタの配列を保持します。詳細は、「初期設定および終了ルーチン」 を参照してください。

.rela

このセクションは、特定のセクションに適用されないレジスタ再配置情報を保持します。このセクションの用途の 1 つは、レジスタの再配置です。詳細は、「レジスタシンボル」を参照してください。

.relname.relaname

これらのセクションは、再配置情報 (「再配置」に記述されている) を保持します。再配置が存在する読み込み可能セグメントがファイルに存在する場合、これらのセクションの属性として SHF_ALLOC ビットがオンになります。そうでない場合、このビットはオフになります。慣例により、name は再配置が適用されるセクションの名前になります。したがって、.text の再配置セクションには、通常 .rel.text または .rela.text という名前が存在します。

.rodata.rodata1

これらのセクションは、読み取り専用データを保持します。このデータは、通常はプロセスイメージの書き込み不可セグメントに使用されます。詳細は、「プログラムヘッダー」を参照してください。

.shstrtab

このセクションは、セクション名を保持します。

.strtab

このセクションは、文字列 (最も一般的には、シンボルテーブルエントリに関連付けられている名前を表す文字列) を保持します。シンボル文字列テーブルが存在する読み込み可能セグメントがファイルに存在する場合、セクションの属性として SHF_ALLOC ビットがオンになります。そうでない場合、このビットはオフになります。

.symtab

このセクションは、「シンボルテーブル」に記述しているとおり、シンボルテーブルを保持します。シンボルテーブルが存在する読み込み可能セグメントがファイルに存在する場合、セクションの属性として SHF_ALLOC ビットがオンになります。そうでない場合、このビットはオフになります。

.text

このセクションは、プログラムの「テキスト」すなわち実行可能命令を保持します。

.SUNW_bss

このセクションは、プログラムのメモリーイメージで使用される、共有オブジェクトの部分的に初期化されたデータを保持します。データは実行時に初期化されます。このセクションは、セクション型 SHT_NOBITS で示しているとおり、ファイル領域を占めません。

.SUNW_heap

このセクションは、dldump(3DL) によって作成される動的実行可能ファイルのデータ領域 (ヒープ) を保持します。

.SUNW_move

このセクションは、部分的に初期化されたデータに関する追加情報を保持します。「移動セクション」を参照してください。

.SUNW_reloc

このセクションは、「再配置」で記述しているとおり、再配置情報を保持します。このセクションは再配置セクションが連結されたものであり、個々の再配置レコードに対するより良い参照のローカル性 (局所性) を与えます。再配置レコード自身のオフセットのみが意味があり、したがってセクション sh_info の値は 0 です。

.SUNW_syminfo

このセクションは、シンボルテーブルの追加情報を保持します。詳細は、「Syminfo テーブル」を参照してください。

.SUNW_version

この名前を持つセクションは、バージョン情報を保持します。詳細は、「バージョン情報」を参照してください。

ドット (.) 接頭辞付きのセクション名はシステムにおいて予約されています。これらのセクションの既存の意味が満足できるものであれば、アプリケーションはこれらのセクションを使用できます。アプリケーションは、ドット (.) 接頭辞なしの名前を使用して、システムで予約されたセクションとの競合を回避することができます。オブジェクトファイル形式では、上記リストに記載されていないセクションが定義できます。オブジェクトファイルには、同じ名前を持つ複数のセクションが存在できます。

プロセッサアーキテクチャに対して予約されるセクション名は、アーキテクチャ名の省略形をセクション名の前に入れることで作成されます。セクション名の前に、e_machine に対して使用されるアーキテクチャ名を入れる必要があります。たとえば、.Foo.psect は、FOO アーキテクチャで定義される psect セクションです。

既存の拡張セクションは、従来から使用されている名前をそのまま使用しています。

既存の拡張セクション

.conflict

.liblist

.lit8

.sdata

.debug

.line

.reginfo

.stab

.gptab

.lit4

.sbss

.tdesc