JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris 11.1 リンカーとライブラリガイド     Oracle Solaris 11.1 Information Library (日本語)
このドキュメントの評価
search filter icon
search icon

ドキュメントの情報

はじめに

パート I リンカーおよび実行時リンカーの使用

1.  Oracle Solaris リンカーの紹介

2.  リンカー

3.  実行時リンカー

4.  共有オブジェクト

パート II クイックリファレンス

5.  リンカーのクイックリファレンス

パート III 詳細情報

6.  直接結合

7.  システムのパフォーマンスを最適化するオブジェクトの構築

8.  mapfile

9.  インタフェースおよびバージョン管理

10.  動的ストリングトークンによる依存関係の確立

11.  拡張性メカニズム

パート IV ELF アプリケーションバイナリインタフェース

12.  オブジェクトファイル形式

ファイル形式

データ表現

ELF ヘッダー

ELF 識別

データのエンコード

セクション

セクションのマージ

特殊セクション

補助セクション

COMDAT セクション

グループセクション

機能セクション

ハッシュテーブルセクション

移動セクション

注釈セクション

再配置セクション

再配置計算

SPARC: 再配置

SPARC: 再配置型

64 ビット SPARC: 再配置型

x86: 再配置

32 ビット x86: 再配置型

x64: 再配置型

文字列テーブルセクション

シンボルテーブルセクション

シンボル値

シンボルテーブルのレイアウトと規則

シンボルソートセクション

レジスタシンボル

Syminfo テーブルセクション

バージョン管理セクション

バージョン定義セクション

バージョン依存セクション

バージョンシンボルセクション

13.  プログラムの読み込みと動的リンク

14.  スレッド固有ストレージ (TLS)

パート V 付録

A.  リンカーとライブラリのアップデートおよび新機能

B.  System V Release 4 (バージョン 1) Mapfile

索引

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

特殊セクション

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

表 12-10 ELF 特殊セクション

名前
タイプ
属性
.bss
SHT_NOBITS
SHF_ALLOC + SHF_WRITE
.comment
SHT_PROGBITS
None
.data.data1
SHT_PROGBITS
SHF_ALLOC + SHF_WRITE
.dynamic
SHT_DYNAMIC
SHF_ALLOC + SHF_WRITE
.dynstr
SHT_STRTAB
SHF_ALLOC
.dynsym
SHT_DYNSYM
SHF_ALLOC
.eh_frame_hdr
SHT_AMD64_UNWIND
SHF_ALLOC
.eh_frame
SHT_AMD64_UNWIND
SHF_ALLOC + SHF_WRITE
.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
None
.lbss
SHT_NOBITS
SHF_ALLOC + SHF_WRITE + SHF_AMD64_LARGE
.ldata.ldata1
SHT_PROGBITS
SHF_ALLOC + SHF_WRITE + SHF_AMD64_LARGE
.lrodata.lrodata1
SHT_PROGBITS
SHF_ALLOC + SHF_AMD64_LARGE
.plt
SHT_PROGBITS
.preinit_array
SHT_PREINIT_ARRAY
SHF_ALLOC + SHF_WRITE
.rela
SHT_RELA
None
.relname
SHT_REL
「再配置セクション」を参照してください
.relaname
SHT_RELA
「再配置セクション」を参照してください
.rodata.rodata1
SHT_PROGBITS
SHF_ALLOC
.shstrtab
SHT_STRTAB
None
.strtab
SHT_STRTAB
この表のあとの説明を参照してください。
.symtab
SHT_SYMTAB
.symtab_shndx
SHT_SYMTAB_SHNDX
.tbss
SHT_NOBITS
SHF_ALLOC + SHF_WRITE + SHF_TLS
.tdata.tdata1
SHT_PROGBITS
SHF_ALLOC + SHF_WRITE + SHF_TLS
.text
SHT_PROGBITS
SHF_ALLOC + SHF_EXECINSTR
.SUNW_ancillary
SHT_SUNW_ancillary
None
.SUNW_bss
SHT_NOBITS
SHF_ALLOC + SHF_WRITE
.SUNW_cap
SHT_SUNW_cap
SHF_ALLOC
.SUNW_capchain
SHT_SUNW_capchain
SHF_ALLOC
.SUNW_capinfo
SHT_SUNW_capinfo
SHF_ALLOC
.SUNW_heap
SHT_PROGBITS
SHF_ALLOC + SHF_WRITE
.SUNW_ldynsym
SHT_SUNW_LDYNSYM
SHF_ALLOC
.SUNW_dynsymsort
SHT_SUNW_symsort
SHF_ALLOC
.SUNW_dymtlssort
SHT_SUNW_tlssort
SHF_ALLOC
.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

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

.eh_frame_hdr.eh_frame

スタックを戻すために使用する呼び出しフレーム情報。

.fini

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

.fini_array

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

.got

大域オフセットテーブル。詳細は、「大域オフセットテーブル (プロセッサ固有)」を参照してください。

.hash

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

.init

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

.init_array

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

.interp

プログラムインタプリタのパス名。詳細は、「プログラムインタプリタ」を参照してください。

.lbss

x64 固有の初期化されていないデータ。このデータは .bss に似ていますが、2G バイトを超えるセクションをサポートする点が異なります。

.ldata.ldata1

x64 固有の初期化済みデータ。このデータは .data に似ていますが、2G バイトを超えるセクションをサポートする点が異なります。

.lrodata.lrodata1

x64 固有の読み取り専用データ。このデータは .rodata に似ていますが、2G バイトを超えるセクションをサポートする点が異なります。

.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 ビットがオンになります。そうでない場合、このビットはオフになります。

.symtab_shndx

このセクションには、.symtab による指定に従い、特別なシンボルテーブルセクションインデックス配列が保持されます。関連付けられたシンボルテーブルセクションに SHF_ALLOC ビットが含まれる場合、このセクションの属性も SHF_ALLOC ビットを含みます。そうでない場合、このビットはオフになります。

.tbss

このセクションには、プログラムのメモリーイメージで使用される、初期化されていないスレッド固有データが格納されます。データが新しい実行フロー用に具体化されると、システムはデータを 0 で初期化します。このセクションは、セクション型 SHT_NOBITS で示しているとおり、ファイル領域を占めません。詳細は、第 14 章スレッド固有ストレージ (TLS)を参照してください。

.tdata.tdata1

これらのセクションは、プログラムのメモリーイメージで使用される、初期化されたスレッド固有データを保持します。その内容のコピーは、それぞれ新しい実行フロー用にシステムによって具体化されます。詳細は、第 14 章スレッド固有ストレージ (TLS)を参照してください。

.text

プログラムの「テキスト」すなわち実行可能命令。

.SUNW_ancillary

補助グループの情報。詳細は、「補助セクション」を参照してください。

.SUNW_bss

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

.SUNW_cap

機能要件。詳細については、「機能セクション」を参照してください。

.SUNW_capchain

機能連鎖テーブル。詳細については、「機能セクション」を参照してください。

.SUNW_capinfo

機能シンボル情報。詳細は、「機能セクション」を参照してください。

.SUNW_heap

dldump(3C) により作成される動的実行可能ファイルのヒープ

.SUNW_dynsymsort

.SUNW_ldynsym.dynsym の結合シンボルテーブル内のシンボルへのインデックスの配列。インデックスは、アドレスの昇順にシンボルを参照するようにソートされます。変数を表現しないシンボルまたは関数を表現しないシンボルは取り込まれません。大域シンボルとウィークシンボルが冗長な場合には、ウィークシンボルのみが残ります。詳細は、「シンボルソートセクション」を参照してください。

.SUNW_dyntlssort

.SUNW_ldynsym.dynsym の結合シンボルテーブル内のスレッド固有ストレージシンボルへのインデックスの配列。インデックスは、オフセットの昇順にシンボルを参照するようにソートされます。TLS 変数を表現しないシンボルは取り込まれません。大域シンボルとウィークシンボルが冗長な場合には、ウィークシンボルのみが残ります。詳細は、「シンボルソートセクション」を参照してください。

.SUNW_ldynsym

.dynsym セクションを拡張します。このセクションには、完全な .symtab セクションを使用できない状況で使用される局所関数シンボルが含まれます。リンカーは常に、.SUNW_ldynsym セクションのデータを .dynsym セクションの直前に並べて配置します。両方のセクションは常に同じ .dynstr 文字列テーブルセクションを使用します。この配置と構成により、両方のシンボルテーブルを 1 つの大きなシンボルテーブルとして処理することができます。「シンボルテーブルセクション」を参照してください。

.SUNW_move

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

.SUNW_reloc

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

.SUNW_syminfo

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

.SUNW_version

バージョン情報。詳細は、「バージョン管理セクション」を参照してください。

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

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

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