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
貴重なご意見を有り難うございました!

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

機能セクション

SHT_SUNW_cap セクションはオブジェクトの機能要件を指定します。これらの機能はオブジェクト機能と呼ばれます。このセクションは、オブジェクト内の関数の機能要件または初期化されたデータ項目も指定できます。これらの機能はシンボル機能と呼ばれます。このセクションには、次の構造の配列が含まれます。sys/elf.h を参照してください。

typedef struct {
        Elf32_Word      c_tag;
        union {
                Elf32_Word      c_val;
                Elf32_Addr      c_ptr;
        } c_un;
} Elf32_Cap;

typedef struct {
        Elf64_Xword     c_tag;
        union {
                Elf64_Xword     c_val;
                Elf64_Addr      c_ptr;
        } c_un;
} Elf64_Cap;

この種の各オブジェクトに対して、c_tagc_un の解釈を制御します。

c_val

このオブジェクトは、さまざまに解釈される整数値を表します。

c_ptr

このオブジェクトは、プログラムの仮想アドレスを表します。

次の機能タグがあります。

表 12-13 ELF 機能配列タグ

名前
c_un
CA_SUNW_NULL
0
無視される
CA_SUNW_HW_1
1
c_val
CA_SUNW_SF_1
2
c_val
CA_SUNW_HW_2
3
c_val
CA_SUNW_PLAT
4
c_ptr
CA_SUNW_MACH
5
c_ptr
CA_SUNW_ID
6
c_ptr
CA_SUNW_NULL

機能グループの最後にマークを付けます。

CA_SUNW_HW_1CA_SUNW_HW_2

ハードウェア機能の値を示します。c_val 要素は、関連ハードウェア機能を表す値を含みます。SPARC プラットフォームでは、ハードウェア機能は sys/auxv_SPARC.h に定義されます。x86 プラットフォームでは、ハードウェア機能は sys/auxv_386.h に定義されます。

CA_SUNW_SF_1

ソフトウェア機能の値を示します。c_val 要素は、sys/elf.h に定義される関連ソフトウェア機能を表す値を含みます。

CA_SUNW_PLAT

プラットフォーム名を指定します。c_ptr 要素は、プラットフォーム名を定義する、ヌル文字で終わる文字列の文字列テーブルオフセットを含みます。

CA_SUNW_MACH

マシン名を指定します。c_ptr 要素は、マシンハードウェア名を定義する、ヌル文字で終わる文字列の文字列テーブルオフセットを含みます。

CA_SUNW_ID

機能識別子名を指定します。c_ptr 要素は、識別子名を定義する、ヌル文字で終わる文字列の文字列テーブルオフセットを含みます。この要素は機能を定義しませんが、機能グループの参照に使用できる固有のシンボリック名を機能グループに割り当てます。この識別子名は、リンカーの -z symbolcap 処理の一部として局所シンボルに変換される、すべての大域シンボル名に追加されます。「オブジェクト機能のシンボル機能への変換」を参照してください。

再配置可能オブジェクトには、機能セクションを含めることができます。リンカーは、複数の入力再配置可能オブジェクトからの機能セクションを 1 つの機能セクションに統合します。リンカーを使用すると、オブジェクトの構築時に機能を定義することもできます。「機能要件の特定」を参照してください。

CA_SUNW_NULL で終了する複数の機能グループがオブジェクト内に存在できます。最初のグループ (インデックス 0 から開始) はオブジェクト機能を指定します。オブジェクト機能を定義する動的オブジェクトには、セクションに関連した PT_SUNWCAP プログラムヘッダーがあります。このプログラムヘッダーにより、実行時リンカーは、プロセスで利用可能なシステム機能に対してオブジェクトを確認できます。異なるオブジェクト機能を利用する動的オブジェクトは、フィルタを使用して柔軟な実行環境を提供できます。「機能固有の共有オブジェクト」を参照してください。

追加の機能グループはシンボル機能を指定します。シンボル機能によって、同じシンボルの複数のインスタンスがオブジェクト内に存在できます。各インスタンスは、そのインスタンスを使用するために利用できなければならない一連の機能に関連付けられています。シンボル機能が存在する場合、SHT_SUNW_cap セクションの sh_link 要素は関連の SHT_SUNW_capinfo テーブルを指します。シンボル機能を利用する動的オブジェクトでは、特定のシステム向けに最適化された関数を柔軟に有効化できます。「シンボル機能関数ファミリの作成」を参照してください。

SHT_SUNW_capinfo テーブルは関連のシンボルテーブルに相当します。SHT_SUNW_capinfo セクションの sh_link 要素は関連のシンボルテーブルを指します。機能に関連付けられた関数は、SHT_SUNW_cap セクション内の機能グループを指定する SHT_SUNW_capinfo テーブル内にインデックスを持ちます。

動的オブジェクト内では、SHT_SUNW_capinfo セクションの sh_info 要素は機能連鎖テーブルである SHT_SUNW_capchain を指します。このテーブルは、実行時リンカーが機能ファミリのメンバーの位置を特定するために使用されます。

SHT_SUNW_capinfo テーブルエントリの形式は次のとおりです。sys/elf.h を参照してください。

typedef Elf32_Word    Elf32_Capinfo;
typedef Elf64_Xword   Elf64_Capinfo;

このテーブル内の要素は、次のマクロを使用して解釈されます。sys/elf.h を参照してください。

#define ELF32_C_SYM(info)       ((info)>>8)
#define ELF32_C_GROUP(info)     ((unsigned char)(info))
#define ELF32_C_INFO(sym, grp)  (((sym)<<8)+(unsigned char)(grp))

#define ELF64_C_SYM(info)       ((info)>>32)
#define ELF64_C_GROUP(info)     ((Elf64_Word)(info))
#define ELF64_C_INFO(sym, grp)  (((Elf64_Xword)(sym)<<32)+(Elf64_Xword)(grp))

SHT_SUNW_capinfo エントリの group 要素には、このシンボルに関連する SHT_SUNW_cap テーブルのインデックスが含まれています。このようにして、この要素はシンボルを機能グループに関連付けます。予約済みのグループインデックスである CAPINFO_SUNW_GLOB は、機能インスタンスファミリの先頭のシンボルを識別して、デフォルトのインスタンスを指定します。

名前
意味
CAPINFO_SUNW_GLOB
0xff
デフォルトのシンボルを特定します。このシンボルは特定の機能に関連付けられていませんが、シンボル機能ファミリの先頭になります。

SHT_SUNW_capinfo エントリの symbol 要素には、このシンボルに関連する先頭のシンボルのインデックスが含まれます。グループとシンボルの情報を使用すると、リンカーは再配置可能オブジェクトから機能シンボルファミリを処理し、すべての出力オブジェクトに必要な機能情報を作成できます。動的オブジェクトでは、グループ CAPINFO_SUNW_GLOB を使用してタグが付けられた先頭のシンボルのシンボル要素が、SHT_SUNW_capchain テーブル内へのインデックスです。このインデックスを使用すると、実行時リンカーは機能連鎖テーブルをこのインデックスからたどり、0 エントリが検出されるまでエントリを次々に検査できます。この連鎖エントリには、機能ファミリメンバーごとにシンボルインデックスが含まれています。

シンボル機能を定義している動的オブジェクトには、DT_SUNW_CAP 動的エントリと DT_SUNW_CAPINFO 動的エントリがあります。これらのエントリは、それぞれ SHT_SUNW_cap セクションと SHT_SUNW_capinfo セクションを特定します。オブジェクトには、SHT_SUNW_capchain セクション、セクションのエントリサイズ、および合計サイズを指定する DT_SUNW_CAPCHAINDT_SUNW_CAPCHAINENT、および DT_SUNW_CAPCHAINSZ のエントリも含まれます。これらのエントリを使用すると、実行時リンカーはシンボル機能インスタンスファミリから、使用に最適なシンボルを確立できます。

オブジェクトは、オブジェクト機能のみ、シンボル機能のみ、または両方のタイプの機能を定義できます。オブジェクト機能グループはインデックス 0 から開始します。シンボル機能グループは 0 以外のインデックスから開始します。オブジェクトでシンボル機能が定義されているが、オブジェクト機能が定義されていない場合、シンボル機能の開始を示すためにインデックス 0 に 1 つの CA_SUNW_NULL エントリが存在する必要があります。