506
リンカーとライブラリガイド Part No: E38860 2013 1

リンカーとライブラリガイド直接結合と割り込み.....173 シンボルインスタンスのローカライズ.....174 同じ名前の多重定義シンボルの削除.....175

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • リンカーとライブラリガイド

    Part No: E388602013年 1月

  • Copyright © 1993, 2012, Oracle and/or its affiliates. All rights reserved.

    このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

    ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

    このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

    U.S. GOVERNMENT END USERS:

    Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S.Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplementalregulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programsinstalled on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted tothe U.S. Government.

    このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

    OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

    Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

    このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

    130221@25097

  • 目次

    はじめに ...............................................................................................................................................19

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

    1 Oracle Solarisリンカーの紹介 ........................................................................................................27リンク編集 .......................................................................................................................................... 28静的実行可能ファイル ............................................................................................................ 29

    実行時リンク ..................................................................................................................................... 29関連情報 .............................................................................................................................................. 30動的リンク .................................................................................................................................. 30アプリケーションバイナリインタフェース ..................................................................... 3132ビットおよび 64ビット環境 ............................................................................................. 31環境変数 ...................................................................................................................................... 32サポートするツール ................................................................................................................. 32

    2 リンカー ...............................................................................................................................................33リンカーの起動 ................................................................................................................................. 34直接起動 ...................................................................................................................................... 34コンパイラドライバを使用する ........................................................................................... 35クロスリンク編集 ..................................................................................................................... 35

    リンカーオプションの指定 ........................................................................................................... 36入力ファイルの処理 ........................................................................................................................ 37アーカイブ処理 ......................................................................................................................... 37共有オブジェクトの処理 ........................................................................................................ 38追加ライブラリとのリンク ................................................................................................... 40初期設定および終了セクション ........................................................................................... 45

    シンボルの処理 ................................................................................................................................. 47

    3

  • シンボルの可視性 ..................................................................................................................... 47シンボル解決 .............................................................................................................................. 48未定義シンボル ......................................................................................................................... 52出力ファイル内の一時的シンボル順序 ............................................................................. 55追加シンボルの定義 ................................................................................................................. 55シンボル範囲の縮小 ................................................................................................................. 60外部結合 ...................................................................................................................................... 64文字列テーブルの圧縮 ............................................................................................................ 64

    出力ファイルの生成 ........................................................................................................................ 65機能要件の特定 ......................................................................................................................... 66機能ファミリの実行 ................................................................................................................. 83

    再配置処理 .......................................................................................................................................... 85ディスプレイスメント再配置 ............................................................................................... 86

    スタブオブジェクト ........................................................................................................................ 87デバッグ支援 ..................................................................................................................................... 91

    3 実行時リンカー ..................................................................................................................................95共有オブジェクトの依存性 ........................................................................................................... 96共有オブジェクトの依存関係の検索 .................................................................................. 96実行時リンカーが検索するディレクトリ ......................................................................... 97デフォルトの検索パスの構成 ............................................................................................... 99動的ストリングトークン ........................................................................................................ 99

    再配置処理 ........................................................................................................................................ 100再配置シンボルの検索 .......................................................................................................... 101再配置が実行されるとき ...................................................................................................... 104再配置エラー ............................................................................................................................ 105

    追加オブジェクトの読み込み .................................................................................................... 106動的依存関係の遅延読み込み .................................................................................................... 108

    dlopen()の代替手段の提供 ................................................................................................. 110初期設定および終了ルーチン .................................................................................................... 112初期設定と終了の順序 .......................................................................................................... 113

    セキュリティー ............................................................................................................................... 117実行時リンクのプログラミングインタフェース ................................................................. 118追加オブジェクトの読み込み ............................................................................................. 119再配置処理 ................................................................................................................................ 121

    目次

    リンカーとライブラリガイド • 2013年 1月4

  • 新しいシンボルの入手 .......................................................................................................... 127デバッグ支援 ................................................................................................................................... 131機能のデバッグ ....................................................................................................................... 131デバッガモジュール ............................................................................................................... 134

    4 共有オブジェクト .......................................................................................................................... 139命名規約 ............................................................................................................................................ 140共有オブジェクト名の記録 ................................................................................................. 141

    依存関係を持つ共有オブジェクト ............................................................................................ 143依存関係の順序 ............................................................................................................................... 144フィルタとしての共有オブジェクト ....................................................................................... 145標準フィルタの生成 ............................................................................................................... 146補助フィルタの生成 ............................................................................................................... 149フィルタ処理の組み合わせ ................................................................................................. 152フィルティーの処理 ............................................................................................................... 152

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

    5 リンカーのクイックリファレンス ............................................................................................ 157静的方法 ............................................................................................................................................ 158再配置可能オブジェクトの作成 ......................................................................................... 158静的実行プログラムの作成 ................................................................................................. 158

    動的方法 ............................................................................................................................................ 159共有オブジェクトの作成 ...................................................................................................... 159動的実行可能プログラムの作成 ......................................................................................... 161

    パート III 詳細情報 .............................................................................................................................................163

    6 直接結合 ............................................................................................................................................ 165シンボル結合の確認 ...................................................................................................................... 166直接結合の有効化 .......................................................................................................................... 168

    -B directオプションの使用方法 ....................................................................................... 169-z directオプションの使用方法 ....................................................................................... 171DIRECT mapfileキーワードの使用方法 ............................................................................. 172

    目次

    5

  • 直接結合と割り込み ...................................................................................................................... 173シンボルインスタンスのローカライズ ........................................................................... 174同じ名前の多重定義シンボルの削除 ................................................................................ 175明示的な割り込みの定義 ...................................................................................................... 177

    シンボルの直接結合の回避 ......................................................................................................... 179-B nodirectオプションの使用方法 .................................................................................. 179NODIRECT mapfileキーワードの使用方法 ......................................................................... 180

    7 システムのパフォーマンスを最適化するオブジェクトの構築 ....................................... 183elfdumpを使用したファイルの解析 ......................................................................................... 183基本システム ................................................................................................................................... 185動的依存関係の遅延読み込み .................................................................................................... 186位置独立のコード .......................................................................................................................... 186

    -K picと -K PICオプション ..................................................................................................188使用されない対象物の削除 ......................................................................................................... 189未使用セクションの削除 ...................................................................................................... 190未使用ファイルの削除 .......................................................................................................... 190未使用の依存関係の削除 ...................................................................................................... 191

    共有可能性の最大化 ...................................................................................................................... 192テキストへの読み取り専用データの移動 ....................................................................... 192多重定義されたデータの短縮 ............................................................................................. 193自動変数の使用 ....................................................................................................................... 193バッファーの動的割り当て ................................................................................................. 193

    ページング回数の削減 .................................................................................................................. 194再配置 ................................................................................................................................................ 194シンボルの検索 ....................................................................................................................... 194再配置が実行されるとき ...................................................................................................... 195再配置セクションの結合 ...................................................................................................... 196コピー再配置 ............................................................................................................................ 196

    -B symbolicオプションの使用 ................................................................................................... 199共有オブジェクトのプロファイリング ................................................................................... 200

    8 mapfile ................................................................................................................................................ 203mapfileの構造と構文 ..................................................................................................................... 204

    mapfileのバージョン .............................................................................................................. 206

    目次

    リンカーとライブラリガイド • 2013年 1月6

  • 条件付き入力 ............................................................................................................................ 207指令の構文 ................................................................................................................................ 210

    mapfile指令 ....................................................................................................................................... 211CAPABILITY指令 .................................................................................................................... 211DEPEND_VERSIONS指令 ..................................................................................................... 214HDR_NOALLOC指令 ............................................................................................................. 215PHDR_ADD_NULL指令 ........................................................................................................ 215LOAD_SEGMENT/NOTE_SEGMENT/NULL_SEGMENT指令 .................................... 216SEGMENT_ORDER指令 ........................................................................................................ 223STACK指令 ............................................................................................................................... 224STUB_OBJECT指令 ................................................................................................................ 225SYMBOL_SCOPE/SYMBOL_VERSION指令 ..................................................................... 225

    定義済みセグメント ...................................................................................................................... 232マッピングの例 ............................................................................................................................... 234例:セクションからセグメントへの割り当て ................................................................. 234例:定義済みセクションの変更 ........................................................................................... 235

    リンカー内部情報:セクションおよびセグメント処理 ....................................................... 236セクションからセグメントへの割り当て ....................................................................... 237定義済みセグメントとエントランス基準のためのmapfile指令 .............................. 238

    9 インタフェースおよびバージョン管理 ................................................................................... 241インタフェースの互換性 ............................................................................................................. 242内部バージョン管理 ...................................................................................................................... 243バージョン定義の作成 .......................................................................................................... 243バージョン定義への結合 ...................................................................................................... 249バージョン結合の指定 .......................................................................................................... 253バージョンの安定性 ............................................................................................................... 257再配置可能オブジェクト ...................................................................................................... 258

    外部バージョン管理 ...................................................................................................................... 258バージョン管理ファイル名の管理 .................................................................................... 259同じプロセス内の複数の外部バージョン管理ファイル ............................................. 260

    10 動的ストリングトークンによる依存関係の確立 ................................................................. 263機能固有の共有オブジェクト .................................................................................................... 263「フィルティー」検索の縮小 ............................................................................................. 265

    目次

    7

  • 命令セット固有の共有オブジェクト ....................................................................................... 265「フィルティー」検索の縮小 ............................................................................................. 266

    システム固有の共有オブジェクト ............................................................................................ 267関連する依存関係の配置 ............................................................................................................. 268バンドルされていない製品間の依存関係 ....................................................................... 269セキュリティー ....................................................................................................................... 271

    11 拡張性メカニズム .......................................................................................................................... 273リンカーのサポートインタフェース ....................................................................................... 273サポートインタフェースの呼び出し ................................................................................ 274サポートインタフェース関数 ............................................................................................. 275サポートインタフェースの例 ............................................................................................. 279

    実行時リンカーの監査インタフェース ................................................................................... 281名前空間の確立 ....................................................................................................................... 281監査ライブラリの作成 .......................................................................................................... 282監査インタフェースの呼び出し ......................................................................................... 283ローカル監査の記録 ............................................................................................................... 284大域監査の記録 ....................................................................................................................... 284監査インタフェースの対話 ................................................................................................. 285監査インタフェースの関数 ................................................................................................. 285監査インタフェースの例 ...................................................................................................... 292監査インタフェースのデモンストレーション .............................................................. 292監査インタフェースの制限 ................................................................................................. 293

    実行時リンカーのデバッガインタフェース .......................................................................... 294制御プロセスとターゲットプロセス間の対話 .............................................................. 294デバッガインタフェースのエージェント ....................................................................... 296デバッガエクスポートインタフェース ........................................................................... 296デバッガインポートインタフェース ................................................................................ 305

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

    12 オブジェクトファイル形式 ......................................................................................................... 309ファイル形式 ................................................................................................................................... 310データ表現 ........................................................................................................................................ 311

    目次

    リンカーとライブラリガイド • 2013年 1月8

  • ELFヘッダー .................................................................................................................................... 312ELF識別 ............................................................................................................................................. 316データのエンコード ...................................................................................................................... 319セクション ........................................................................................................................................ 320セクションのマージ ...................................................................................................................... 338特殊セクション ............................................................................................................................... 339COMDATセクション .................................................................................................................... 345グループセクション ...................................................................................................................... 346機能セクション ............................................................................................................................... 347ハッシュテーブルセクション .................................................................................................... 351移動セクション ............................................................................................................................... 352注釈セクション ............................................................................................................................... 354再配置セクション .......................................................................................................................... 356再配置計算 ................................................................................................................................ 358SPARC:再配置 .......................................................................................................................... 358x86:再配置 ................................................................................................................................. 36532ビット x86:再配置型 ......................................................................................................... 366x64:再配置型 ............................................................................................................................ 368

    文字列テーブルセクション ......................................................................................................... 369シンボルテーブルセクション .................................................................................................... 371シンボル値 ................................................................................................................................ 378シンボルテーブルのレイアウトと規則 ........................................................................... 378シンボルソートセクション ................................................................................................. 380レジスタシンボル ................................................................................................................... 382

    Syminfoテーブルセクション ...................................................................................................... 383バージョン管理セクション ......................................................................................................... 385バージョン定義セクション ................................................................................................. 385バージョン依存セクション ................................................................................................. 387バージョンシンボルセクション ......................................................................................... 389

    13 プログラムの読み込みと動的リンク ....................................................................................... 393プログラムヘッダー ...................................................................................................................... 393ベースアドレス ....................................................................................................................... 397セグメントへのアクセス権 ................................................................................................. 398セグメントの内容 ................................................................................................................... 399

    目次

    9

  • プログラムの読み込み (プロセッサ固有) ............................................................................... 400プログラムインタプリタ ...................................................................................................... 406

    実行時リンカー ............................................................................................................................... 407動的セクション ............................................................................................................................... 407大域オフセットテーブル (プロセッサ固有) ........................................................................... 424プロシージャーのリンクテーブル (プロセッサ固有) ......................................................... 425

    32ビット SPARC:プロシージャーのリンクテーブル ................................................... 42564ビット SPARC:プロシージャーのリンクテーブル ................................................... 42832ビット x86:プロシージャーのリンクテーブル ......................................................... 432x64:プロシージャーのリンクテーブル ............................................................................ 434

    14 スレッド固有ストレージ (TLS) ....................................................................................................437C/C++プログラミングインタフェース ................................................................................... 437スレッド固有ストレージ (TLS)セクション ........................................................................... 439スレッド固有ストレージの実行時の割り当て ...................................................................... 440プログラムの起動 ................................................................................................................... 440スレッドの作成 ....................................................................................................................... 441起動後の動的読み込み .......................................................................................................... 442スレッド固有ストレージブロックの遅延割り当て ..................................................... 443

    スレッド固有ストレージのアクセスモデル .......................................................................... 443SPARC:スレッド固有変数へのアクセス .......................................................................... 446SPARC:スレッド固有ストレージの再配置のタイプ .................................................... 45132ビット x86:スレッド固有変数へのアクセス .............................................................. 45432ビット x86:スレッド固有ストレージの再配置のタイプ ........................................ 458x64:スレッド固有変数へのアクセス ................................................................................ 460x64:スレッド固有ストレージの再配置のタイプ ........................................................... 464

    パートV 付録 .....................................................................................................................................................467

    A リンカーとライブラリのアップデートおよび新機能 ......................................................... 469Oracle Solaris 10 1/13リリース ..................................................................................................... 469Oracle Solaris 10 8/11リリース ..................................................................................................... 469廃止機能 .................................................................................................................................... 471

    Solaris 10 5/08リリース ................................................................................................................. 471

    目次

    リンカーとライブラリガイド • 2013年 1月10

  • Solaris 10 8/07リリース ................................................................................................................. 472Solaris 10 1/06リリース ................................................................................................................. 472Solaris 10リリース .......................................................................................................................... 472Solaris 9 9/04リリース ................................................................................................................... 473Solaris 9 4/04リリース ................................................................................................................... 473Solaris 9 12/03リリース ................................................................................................................. 473Solaris 9 8/03リリース ................................................................................................................... 474Solaris 9 12/02リリース ................................................................................................................. 474Solaris 9リリース ............................................................................................................................ 474Solaris 8 07/01リリース ................................................................................................................. 475Solaris 8 01/01リリース ................................................................................................................. 475Solaris 8 10/00リリース ................................................................................................................. 476Solaris 8リリース ............................................................................................................................ 476

    B System V Release 4 (バージョン1) Mapfile ................................................................................. 479mapfileの構造と構文 ..................................................................................................................... 479セグメントの宣言 ................................................................................................................... 480対応付け指令 ............................................................................................................................ 484セグメント内セクションの順序 ......................................................................................... 486サイズシンボル宣言 ............................................................................................................... 486ファイル制御指令 ................................................................................................................... 486

    対応付けの例 ................................................................................................................................... 487mapfileオプションのデフォルト ............................................................................................... 488内部対応付け構造 .......................................................................................................................... 489

    索引 ..................................................................................................................................................... 493

    目次

    11

  • 12

  • 図目次

    図 1–1 静的または動的リンク編集 ................................................................................. 29図 3–1 単一の dlopen()要求 ........................................................................................... 123図 3–2 複数の dlopen()リクエスト .............................................................................. 124図 3–3 共通依存関係を伴う複数の dlopen()要求 .................................................... 125図 10–1 バンドルされていない製品の相互依存関係 ................................................ 268図 10–2 バンドルされていない製品の「相互依存関係」 ....................................... 270図 11–1 「rtld-デバッガ」の情報の流れ ....................................................................... 295図 12–1 オブジェクトファイル形式 ............................................................................... 310図 12–2 データのエンコード方法ELFDATA2LSB ....................................................... 319図 12–3 データのエンコード方法ELFDATA2MSB ..................................................... 320図 12–4 シンボルハッシュテーブル ............................................................................... 351図 12–5 注釈の情報 .............................................................................................................. 354図 12–6 注釈セグメントの例 ............................................................................................ 355図 12–7 ELF文字列テーブル ............................................................................................. 370図 13–1 SPARC:実行可能ファイル (64Kに整列) ......................................................... 401図 13–2 32ビット x86:実行可能ファイル (64Kに整列) ............................................ 402図 13–3 32ビット SPARC:プロセスイメージセグメント ......................................... 404図 13–4 x86:プロセスイメージセグメント .................................................................. 405図 14–1 スレッド固有ストレージの実行時のレイアウト ....................................... 440図 14–2 スレッド固有ストレージのアクセスモデルと移行 ................................... 446図 B–1 簡単な対応付け構造 ............................................................................................ 490

    13

  • 14

  • 表目次

    表 2–1 CA_SUNW_SF_1フレームポインタフラグ組み合わせ状態テーブル ........... 75表 8–1 二重引用符テキストのエスケープシーケンス ............................................ 205表 8–2 mapfile内で一般的に使用される名前およびその他の文字列 ................. 205表 8–3 セグメントフラグ ................................................................................................ 206表 8–4 定義済みの条件式の名前 ................................................................................... 207表 8–5 条件式の演算子 ..................................................................................................... 208表 8–6 mapfile指令 ............................................................................................................. 211表 8–7 セクションフラグの値 ........................................................................................ 220表 8–8 シンボルのスコープのタイプ .......................................................................... 226表 8–9 SH_ATTRの値 ....................................................................................................... 229表 8–10 シンボルフラグの値 ............................................................................................ 230表 9–1 インタフェースの互換性の例 .......................................................................... 242表 12–1 ELF 32ビットデータタイプ ............................................................................... 311表 12–2 ELF 64ビットデータタイプ ............................................................................... 312表 12–3 ELF識別インデックス ........................................................................................ 317表 12–4 ELFセクションの特殊インデックス .............................................................. 320表 12–5 ELFセクションタイプ、sh_type ....................................................................... 324表 12–6 ELFセクションヘッダーテーブルエントリ:インデックス 0 .................. 331表 12–7 ELF拡張セクションヘッダーテーブルエントリ:インデックス 0 ......... 331表 12–8 ELFセクションの属性フラグ ........................................................................... 332表 12–9 ELF sh_linkと sh_infoの解釈 .......................................................................... 336表 12–10 ELF特殊セクション ............................................................................................. 339表 12–11 ELFグループセクションのフラグ .................................................................. 346表 12–12 ELF機能配列タグ ................................................................................................. 348表 12–13 SPARC: ELF再配置型 ........................................................................................... 360表 12–14 64ビット SPARC: ELF再配置型 ........................................................................ 365表 12–15 32ビット x86: ELF再配置型 ............................................................................... 366表 12–16 x64: ELF再配置型 .................................................................................................. 368

    15

  • 表 12–17 ELF文字列テーブルインデックス .................................................................. 370表 12–18 ELFシンボルのバインディング、(ELF32_ST_BIND、ELF64_ST_BIND) .... 372表 12–19 ELFシンボルのタイプ (ELF32_ST_TYPE、ELF64_ST_TYPE) ......................... 374表 12–20 ELFシンボルの可視性 ........................................................................................ 375表 12–21 ELFシンボルテーブルエントリ:インデックス 0 ........................................ 378表 12–22 SPARC: ELFシンボルテーブルエントリ:レジスタシンボル ................... 382表 12–23 SPARC: ELFレジスタ番号 ................................................................................... 383表 12–24 ELFバージョン依存インデックス .................................................................. 390表 13–1 ELFセグメント型 ................................................................................................. 395表 13–2 ELFセグメントフラグ ........................................................................................ 398表 13–3 ELFセグメントへのアクセス権 ....................................................................... 399表 13–4 SPARC: ELFプログラムヘッダーセグメント (64Kに整列) ...................... 401表 13–5 32ビット x86: ELFプログラムヘッダーセグメント (64Kに整列) .......... 402表 13–6 32ビット SPARC: ELF共有オブジェクトセグメントアドレスの例 ...... 406表 13–7 32ビット x86: ELF共有オブジェクトセグメントアドレスの例 ............. 406表 13–8 ELF動的配列タグ ................................................................................................. 408表 13–9 ELF動的フラグ DT_FLAGS .................................................................................... 419表 13–10 ELF動的フラグ DT_FLAGS_1 ................................................................................ 420表 13–11 ELF動的位置フラグ DT_POSFLAG_1 ................................................................... 423表 13–12 32ビット SPARC:プロシージャーのリンクテーブルの例 ....................... 426表 13–13 64ビット SPARC:プロシージャーのリンクテーブルの例 ....................... 429表 13–14 32ビット x86:絶対プロシージャーのリンクテーブルの例 ..................... 433表 13–15 32ビット x86:位置独立のプロシージャーリンクテーブルの例 ............ 433表 13–16 x64:プロシージャーのリンクテーブルの例 ................................................. 435表 14–1 ELF PT_TLSプログラムヘッダーエントリ ..................................................... 440表 14–2 SPARC: General Dynamicスレッド固有変数のアクセスコード ............... 446表 14–3 SPARC: Local Dynamicスレッド固有変数のアクセスコード ................... 448表 14–4 32ビット SPARC: Initial Executableスレッド固有変数のアクセスコード

    .................................................................................................................................... 449表 14–5 64ビット SPARC: Initial Executableスレッド固有変数のアクセスコード

    .................................................................................................................................... 450表 14–6 SPARC: Local Executableスレッド固有変数のアクセスコード ................ 451表 14–7 SPARC:スレッド固有ストレージの再配置のタイプ ................................. 452表 14–8 32ビット x86: General Dynamicスレッド固有変数のアクセスコード .. 454表 14–9 32ビット x86: Local Dynamicスレッド固有変数のアクセスコード ....... 455表 14–10 32ビット x86:位置に依存しない Initial Executableスレッド固有変数のア

    表目次

    リンカーとライブラリガイド • 2013年 1月16

  • クセスコード ......................................................................................................... 456表 14–11 32ビット x86:位置に依存する Initial Executableスレッド固有変数のアク

    セスコード ............................................................................................................. 456表 14–12 32ビット x86:位置に依存しない Initial Executable動的スレッド固有変数

    のアクセスコード ................................................................................................ 457表 14–13 32ビット x86:位置に依存しない Initial Executableスレッド固有変数のア

    クセスコード ......................................................................................................... 457表 14–14 32ビット x86: Local Executableスレッド固有変数のアクセスコード .... 458表 14–15 32ビット x86: Local Executableスレッド固有変数のアクセスコード .... 458表 14–16 32ビット x86: Local Executableスレッド固有変数のアクセスコード .... 458表 14–17 32ビット x86:スレッド固有ストレージの再配置のタイプ ..................... 459表 14–18 x64: General Dynamicスレッド固有変数のアクセスコード ..................... 460表 14–19 x64: Local Dynamicスレッド固有変数のアクセスコード .......................... 461表 14–20 x64: Initial Executableスレッド固有変数のアクセスコード ...................... 462表 14–21 x64: Initial Executableスレッド固有変数のアクセスコード II .................. 463表 14–22 x64: Local Executableスレッド固有変数のアクセスコード ....................... 463表 14–23 x64: Local Executableスレッド固有変数のアクセスコード II ................... 463表 14–24 x64: Local Executableスレッド固有変数のアクセスコード III .................. 464表 14–25 x64:スレッド固有ストレージの再配置のタイプ ........................................ 464表 B–1 Mapfileセグメント属性 ....................................................................................... 481表 B–2 セクション属性 ..................................................................................................... 484

    表目次

    17

  • 18

  • はじめに

    Oracle Solarisオペレーティングシステム (Oracle Solaris OS)では、アプリケーション開発者は、リンカー ld(1)を使用してアプリケーションおよびライブラリを作成し、実行時リンカー ld.so.1(1)の支援でこれらのオブジェクトを実行できます。このマニュアルは、Oracle Solarisリンカー、実行時リンカー、および関連ツールの使用方法に関する概念を、より完全に理解したいエンジニアを対象としています。

    注 –このOracle Solarisのリリースでは、SPARCおよび x86系列のプロセッサアーキテクチャーを使用するシステムをサポートしています。サポートされるシステムは、Oracle Solaris OS: Hardware Compatibility Listsに記載されています。このドキュメントでは、プラットフォームにより実装が異なる場合は、それを特記します。

    このドキュメントの x86に関連する用語については、次を参照してください。

    ■ x86は、64ビットおよび 32ビットの x86互換製品系列を指します。■ x64は特に 64ビット x86互換CPUを指します。■ 「32ビット x86」は、x86をベースとするシステムに関する 32ビット特有の情報を指します。

    サポートされるシステムについては、Oracle Solaris OS: Hardware Compatibility Listsを参照してください。

    このドキュメントの x86に関連する用語については、次を参照してください。

    ■ 「x86」は、64ビットおよび 32ビットの x86互換オブジェクト系列を指します。■ 「x64」は 64ビットの x86固有のオブジェクトに関連します。■ 「32ビット x86」は 32ビットの x86固有のオブジェクトに関連します。

    お読みになる前にこのマニュアルでは、Oracle Solarisリンカーおよび実行時リンカーの操作について説明しています。動的実行可能ファイルと共有オブジェクトの生成および使用方法に関しては、動的実行環境において重要であるため、特に重点を置いて説明しています。

    19

    http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1ld-1http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1ld.so.1-1http://www.oracle.com/webfolder/technetwork/hcl/index.html

  • 対象読者このマニュアルは、Oracle Solarisリンカー、実行時リンカー、および関連ツールに興味を持つ、意欲的な初心者から上級ユーザーまでのプログラマを対象としています。

    ■ 初心者は、リンカーと実行時リンカーの操作の原理を学ぶ■ 中級プログラマは、有効なカスタムライブラリの作成と使用方法を学ぶ■ 言語ツール開発者などの上級プログラマは、オブジェクトファイルの変換と生成方法を学ぶ

    ほとんどのプログラマは、このマニュアルの最初から最後までを通読する必要はありません。

    内容の紹介このドキュメントを通して、すべてのコマンド行の例は、sh(1)の構文を使用しています。すべてのプログラム例は、C言語で記述されています。

    このマニュアルは次の部分に分かれています。

    Oracle Solarisリンカーおよび実行時リンカーの使用パート 1ではOracle Solarisリンカーの使用方法について記載しています。この情報は、すべてのプログラマを対象としています。

    第 1章「Oracle Solarisリンカーの紹介」では、Oracle Solaris OSでのリンク処理の概要を紹介します。

    第 2章「リンカー」では、リンカーの機能について説明します。

    第 3章「実行時リンカー」では、実行環境と、プログラム制御によるコードおよびデータの実行時の結び付きについて記載しています。

    第 4章「共有オブジェクト」では、共有オブジェクトの定義について記載し、そのメカニズムと作成方法および使用方法について説明しています。

    クイックリファレンスパート 2では、新規ユーザーがすぐに開始できるようにするためのクイックリファレンス情報を提供します。この情報は、すべてのプログラマを対象としています。

    第 5章「リンカーのクイックリファレンス」では、もっとも一般的に使用されるリンカーオプションの概要を提供します。

    はじめに

    リンカーとライブラリガイド • 2013年 1月20

    http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1sh-1

  • 詳細情報パート 3では特殊なトピックについて扱います。この情報は、上級プログラマを対象としています。

    第 6章「直接結合」では、直接結合に関連する実行時シンボル検索モデルについて説明します。

    第 7章「システムのパフォーマンスを最適化するオブジェクトの構築」では、動的オブジェクトの実行時の初期設定と処理を調べ、それらの実行時パフォーマンスに影響を与える手法について説明します。

    第 8章「mapfile」では、リンカーに対するバージョン 2の mapfile指令について説明します。

    第 9章「インタフェースおよびバージョン管理」では、動的オブジェクトによって提供されたインタフェースの展開を管理する方法について説明します。

    第 10章「動的ストリングトークンによる依存関係の確立」では、動的依存関係を定義するための予約された動的ストリングトークンを使用する方法の例を提供します。

    第 11章「拡張性メカニズム」では、リンカーと実行時リンカーの処理を監視し、場合によっては修正するインタフェースについて記載しています。

    Oracle Solaris ELFアプリケーションバイナリインタフェースパート 4では、Oracle Solaris ELFアプリケーションバイナリインタフェース (ABI)について記載します。この情報は、上級プログラマを対象としています。

    第 12章「オブジェクトファイル形式」は、ELFファイル用のリファレンスの章です。

    第 13章「プログラムの読み込みと動的リンク」では、実行時の ELFファイルの読み込みと管理方法について説明します。

    第 14章「スレッド固有ストレージ (TLS)」では、スレッド固有ストレージについて説明しています。

    付録付録A「リンカーとライブラリのアップデートおよび新機能」では、新しい機能と、リンカー、実行時リンカー、および関連ツールへの更新内容の概要を、変更が行われたリリースを示しながら説明します。

    付録 B「System V Release 4 (バージョン 1) Mapfile」では、リンカーに対するバージョン 1の mapfile指令について説明します。この付録は、古い構文で記述された既存の mapfilesへのサポートを必要とするプログラマを対象としています。すべての新しいアプリケーションについては、第 8章「mapfile」で説明されているバージョン 2の mapfile構文をお勧めします。

    はじめに

    21

  • OracleサポートへのアクセスOracleのお客様は、My Oracle Supportを通じて電子的なサポートを利用することができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoを参照してください。聴覚に障害をお持ちの場合は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

    表記上の規則次の表では、このドキュメントで使用される表記上の規則について説明します。

    表P–1 表記上の規則

    字体 説明 例

    AaBbCc123 コマンド名、ファイル名、ディレクトリ名、画面上のコンピュータ出力、コード例を示します。

    .loginファイルを編集します。

    ls -aを使用してすべてのファイルを表示します。

    machine_name% you have mail.

    AaBbCc123 ユーザーが入力する文字を、画面上のコンピュータ出力と区別して示します。

    machine_name% su

    Password:

    aabbcc123 プレースホルダ:実際に使用する特定の名前または値で置き換えます。

    ファイルを削除するには、 rmfilenameと入力します。

    AaBbCc123 書名、新しい単語、および強調する単語を示します。

    『ユーザーズガイド』の第 6章を参照してください。

    キャッシュは、ローカルに格納されるコピーです。

    ファイルを保存しないでください。

    注:いくつかの強調された項目は、オンラインでは太字で表示されます。

    はじめに

    リンカーとライブラリガイド • 2013年 1月22

    http://www.oracle.com/pls/topic/lookup?ctx=acc&id=infohttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trshttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs

  • コマンド例のシェルプロンプトOracle Solaris OSに含まれるシェルで使用する、UNIXのシステムプロンプトとスーパーユーザープロンプトを次に示します。コマンド例のシェルプロンプトから、通常ユーザーと特権ユーザーのどちらがコマンドを実行すべきかがわかります。

    表P–2 シェルプロンプト

    シェル プロンプト

    Bashシェル、Kornシェル、および Bourneシェル

    $

    Bashシェル、Kornシェル、および Bourneシェルのスーパーユーザー

    #

    Cシェル machine_name%

    Cシェルのスーパーユーザー machine_name#

    はじめに

    23

  • 24

  • リンカーおよび実行時リンカーの使用

    パ ー ト I

    25

  • 26

  • Oracle Solarisリンカーの紹介

    このマニュアルは、Oracle Solarisリンカーと実行時リンカーの動作に加え、これらのユーティリティーが動作するオブジェクトについて説明しています。Oracle Solarisリンカーと実行時リンカーの基本動作は、オブジェクトを組み合わせることです。この結合によって、接続されるオブジェクトから別のオブジェクト内のシンボル定義へシンボル参照されるようになります。

    このマニュアルは次の領域を扱っています。

    リンカーリンカー ld(1)は、1つまたは複数の入力ファイルのデータを連結および解釈します。入力ファイルは、再配置可能オブジェクト、共有オブジェクト、またはアーカイブライブラリです。これら入力ファイルから 1つの出力ファイルが作成されます。このファイルは、再配置可能オブジェクト、動的実行可能プログラム、共有オブジェクトのいずれかです。リンカーは通常、コンパイル環境の一環として呼び出されます。

    実行時リンカー実行時リンカー ld.so.1(1)は、動的実行可能ファイルと共有オブジェクトを実行時に処理し、実行可能ファイルと共有オブジェクトを結合して、実行可能プロセスを作成します。

    共有オブジェクト共有オブジェクトとは、リンク編集フェーズからの出力の形式の 1つです。共有オブジェクトを「共有ライブラリ」と呼ぶこともあります。共有オブジェクトは、強力で柔軟な実行時環境を作成する上で重要です。

    オブジェクトファイルOracle Solarisリンカー、実行時リンカー、および関連ツールは、実行可能かつリンク可能なフォーマット (executable and linking format, ELF)に準拠したファイルを処理します。

    1第 1 章

    27

    http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1ld-1http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1ld.so.1-1

  • これらの領域は、それぞれのトピックに分割できますが、重複する部分も多数あります。このドキュメントでは、相互に参照させながら、各領域について説明しています。

    リンク編集リンク編集では、一般に、コンパイラ、アセンブラ、または ld(1)によって生成されたさまざまな入力ファイルを受け取ります。リンカーは、これら入力ファイル内のデータを連結および解釈して、1つの出力ファイルを生成します。リンカーにはさまざまなオプションを使用できますが、出力ファイル (入力再配置可能オブジェクトの連結)は次のいずれかの形式になります。

    ■ 「再配置可能オブジェクト」–後続のリンク編集フェーズで使用可能な、入力再配置可能オブジェクトの連結。

    ■ 「静的実行可能ファイル」–すべてのシンボル参照を解決する入力再配置可能オブジェクトの連結。この実行可能ファイルは、実行準備が整ったプロセスを表します。29ページの「静的実行可能ファイル」を参照してください。

    ■ 「動的実行可能ファイル」–実行可能プロセスを生成するときに、実行時リンカーによる割り込みを必要とする入力再配置可能オブジェクトの連結。動的実行可能ファイルには、実行時に結合されるシンボル参照も必要です。動的実行可能ファイルは、通常共有オブジェクトの形で 1つ以上の依存関係を持っています。

    ■ 「共有オブジェクト」–実行時に動的実行可能ファイルに結合される可能性があるサービスを提供する入力再配置可能オブジェクトの連結。また、共有オブジェクトの中にも、ほかの共有オブジェクトに依存する依存関係がある場合もあります。

    これらの出力ファイルと、出力ファイルを作成する場合に使用するキーリンカーオプションを、図 1–1に示します。

    「動的実行可能ファイル」と「共有オブジェクト」を、しばしばまとめて「動的オブジェクト」と呼びます。このドキュメントでは、この動的オブジェクトに焦点を当てて説明します。

    リンク編集

    リンカーとライブラリガイド • 2013年 1月28

    http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1ld-1

  • 静的実行可能ファイル静的実行可能ファイルは、多くのリリースで作成しないように勧められています。実際、64ビットシステムアーカイブライブラリが提供されたことはありません。静的実行可能ファイルは、システムアーカイブライブラリに反して構築されるので、実行可能ファイルにはシステム実装の詳細が含まれます。この自己内包には、多数の欠点があります。

    ■ この実行可能ファイルは、共有オブジェクトとして提供されるシステムパッチの恩恵を受けることができません。したがって、多くのシステムの改良を利用するには、この実行可能ファイルを再構築する必要があります。

    ■ 将来のリリースでこの実行可能ファイルを実行できなくなる可能性があります。■ システム実装の詳細を複製すると、システムのパフォーマンスに悪影響を与えます。

    Oracle Solaris 10リリース以降、このOSに 32ビット版のシステムアーカイブライブラリは含まれていません。これらのライブラリ (特に libc.a)が提供されないため、特別なシステムに関する知識を持っていないかぎり、静的実行可能ファイルは作成できなくなりました。なお、リンカーの静的リンクオプションを処理する機能とアーカイブライブラリを処理する機能に変更はありません。

    実行時リンク実行時リンクには、通常、過去のリンク編集から生成された 1つまたは複数のオブジェクトの結び付けが組み込まれ、実行可能プロセスを生成します。リンカーによってこれらのオブジェクトが生成されている間、確認済みの結合要件を表す適切な記帳情報が生成されます。この情報によって、実行時リンカーは読み込み、再配置し、結合プロセスを完了できます。

    プロセス実行中、実行時リンカーの機能が使用できるようになります。これらの機能は、必要に応じて共有オブジェクトを追加することによって、プロセスのアドレ

    図 1–1 静的または動的リンク編集

    実行時リンク

    第 1章 • Oracle Solarisリンカーの紹介 29

  • ス領域を拡張するために使用できます。実行時リンクに組み込まれたコンポーネントのうち、もっとも一般的なのは、「動的実行可能ファイル」と「共有オブジェクト」の 2つです。

    動的実行可能ファイルとは、実行時リンカーの制御下で実行されるアプリケーションのことです。これらのアプリケーションは、通常、共有オブジェクト形式の依存関係を持ち、これらは、実行時リンカーによって配置および結合されて、実行可能プロセスが作成されます。動的実行可能ファイルは、リンカーによって生成されるデフォルトの出力ファイルになります。

    共有オブジェクトは、動的にリンクされたシステムに対し、キー構築ブロックを提供します。共有オブジェクトは動的実行可能ファイルに類似していますが、共有オブジェクトには、仮想アドレスが割り当てられていません。

    動的実行可能ファイルは、通常、1つまたは複数の共有オブジェクトに依存する依存関係を持ちます。一般的に、実行可能プロセスを作成するには、1つまたは複数の共有オブジェクトを動的実行可能ファイルに結合する必要があります。共有オブジェクトは多くのアプリケーションで使用できるため、その構造上の観点は、共有性、バージョン管理およびパフォーマンスに直接影響します。

    リンカーまたは実行時リンカーによる共有オブジェクトの処理は、共有オブジェクトが使用される環境によって次のように区別されます。

    コンパイル環境共有オブジェクトは、リンカーによって処理され、動的実行可能ファイルまたはほかの共有オブジェクトを生成します。共有オブジェクトは、生成される出力ファイルの依存関係になります。

    実行時環境共有オブジェクトは、動的実行可能ファイルとともに実行時リンカーによって処理され、実行可能プロセスを作成します。

    関連情報

    動的リンク動的リンクという言葉は、しばしば、いくつかのリンク概念を含めて使用されます。動的リンクは、リンカープロセスの動的実行可能ファイルおよび共有オブジェクトを生成する部分を指します。動的リンクは、実行可能プロセスを生成するこれらのオブジェクトの実行時リンクも指します。動的リンクを使用すると、実行時にアプリケーションを共有オブジェクトへ結合することによって、共有オブジェクトが提供するコードを複数のアプリケーションで使用できます。

    標準ライブラリのサービスからアプリケーションを切り離すことにより、動的リンクも、アプリケーションの移植性および拡張性を向上させることができま

    関連情報

    リンカーとライブラリガイド • 2013年 1月30

  • す。サービスのインタフェースと実装が独立しているため、アプリケーションの安定性を維持しながら、システムを更新することができます。動的リンクは、ABI (アプリケーションバイナリインタフェース)を利用するときに必要不可欠な要素で、Oracle Solarisアプリケーションに適したコンパイル方式です。

    アプリケーションバイナリインタフェースシステムコンポーネントとアプリケーションコンポーネントの間に定義されたバイナリインタフェースを利用すると、これらのコンポーネントを非同期的に更新できます。Oracle Solarisリンカーと実行時リンカーはこれらのインタフェース上で動作して、実行用にアプリケーションをアセンブルします。Oracle Solarisリンカーと実行時リンカーによって処理されるすべてのコンポーネントにはバイナリインタフェースがありますが、Oracle Solarisシステムが提供するバイナリインタフェースを総称して、「Oracle Solaris ABI」と言います。

    Oracle Solaris ABIは、「System Vアプリケーションバイナリインタフェース」によって始まったABIの成果の技術上の子孫です。この成果は、SPARC International,Inc.によって行われた SPARCプロセッサ向けの追加により発展し、「SPARCCompliance Definition (SCD)」と呼ばれます。

    32ビットおよび64ビット環境リンカーは 32ビットアプリケーションおよび 64ビットアプリケーションとして提供されています。各リンカーは 32ビットオブジェクトおよび 64ビットオブジェクトで動作可能です。64ビット環境を実行するシステムでは、両方のバージョンのリンカーを実行できます。32ビット環境を実行するシステムでは、32ビットバージョンのリンカーのみを実行できます。

    実行時リンカーは 32ビットオブジェクトおよび 64ビットオブジェクトとして提供されています。32ビットオブジェクトは 32ビットプロセスを実行するために使用され、64ビットオブジェクトは 64ビットプロセスを実行するために使用されます。

    32ビットオブジェクト上および 64ビットオブジェクト上のリンカーと実行時リンカーの操作に違いはありません。このドキュメントでは、多くの場合、32ビットオブジェクトでの操作の例を使用します。64ビットの処理が 32ビットの処理と異なる場合には説明します。

    64ビットアプリケーションについては、『Solaris 64ビット開発ガイド』を参照してください。

    関連情報

    第 1章 • Oracle Solarisリンカーの紹介 31

    http://www.oracle.com/pls/topic/lookup?ctx=dsc&id=/app/docs/doc/819-0389

  • 環境変数リンカーおよび実行時リンカーは、たとえば LD_LIBRARY_PATHなど、LD_から始まる環境変数を多数サポートしています。これらの環境変数は、この汎用形式でも使用できますが、_32または _64を接尾辞として指定することもできます(LD_LIBRARY_PATH_64など)。この接尾辞は、環境変数をそれぞれ 32ビットまたは 64ビットプロセス固有のものにします。またこの接尾辞は、接尾辞の付いていない汎用形式の環境変数が有効な場合でも、それをオーバーライドします。

    注 – Oracle Solaris 10よりも前のリリースでは、リンカーおよび実行時リンカーは値なしで指定された環境変数を無視していました。したがって、次の例では、汎用環境変数設定である /opt/libが 32ビットアプリケーション progの依存関係の検索に使われていました。

    $ LD_LIBRARY_PATH=/opt/lib LD_LIBRARY_PATH_32= prog

    Oracle Solaris 10リリース以降、接尾辞 _32または _64を持つ、値なしで指定された環境変数も処理されるようになりました。これらの環境変数は、関連する汎用環境変数設定を事実上取り消します。このため、前の例で、32ビットアプリケーションprogの依存関係を検索するために、/opt/libが使われることはありません。

    このドキュメントでは、リンカーの環境変数を記述する場合は、接尾辞の付いていない汎用形式を使用します。サポートされているすべての環境変数は、ld(1)およびld.so.1(1)に定義されています。

    サポートするツールOracle Solaris OSでは、いくつかのサポートツールとライブラリも提供しています。これらのツールを使用すると、これらのオブジェクトとリンク処理の分析や検査が行えます。これらのツールには、elfdump(1)、lari(1)、nm(1)、dump(1)、ldd(1)、pvs(1)、elf(3ELF)、およびリンカーデバッグサポートライブラリが含まれます。これらのツールについては、例を使用して詳しく説明します。

    関連情報

    リンカーとライブラリガイド • 2013年 1月32

    http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1ld-1http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1ld.so.1-1http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1elfdump-1http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1lari-1http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1nm-1http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1dump-1http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1ldd-1http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1pvs-1http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN3Eelf-3elf

  • リンカー

    リンク編集プロセスにより、1つまたは複数の入力ファイルから出力ファイルが作成されます。出力ファイルの作成は、リンカーのオプションによって指示され、入力セクションは入力ファイルによって提供されます。

    ファイルはすべて、実行可能リンク形式 (ELF)で表現されます。ELF書式の詳細については、第 12章「オブジェクトファイル形式」を参照してください。この概要として、「セクション」と「セグメント」という 2つの ELF構造を紹介します。

    セクションとは、ELFファイル内で処理できる、分割できない最小単位のことです。セグメントとは、セクションの集合で、exec(2)または実行時リンカーld.so.1(1)でメモリーイメージに対応付けできる個別の最小単位です。

    ELFセクションには多くのタイプがありますが、リンク編集フェーズに関して次の 2つのカテゴリに分類されます。

    ■ プログラム命令 .textおよびその関連データ .dataや .bssなど、その解釈がアプリケーションに対してだけ意味のあるプログラムデータを含むセクション。

    ■ .symtabや .strtabに含まれるシンボルテーブル情報や .rela.textなどの再配置情報など、リンク編集情報を含むセクション。

    基本的には、リンカーにより、「プログラムデータセクション」が連結されて出力ファイルになります。「リンク編集情報」セクションは、その他のセクションを修正するためにリンカーによって解釈されます。情報セクションは、後で行われる出力ファイル処理で使用される新しい出力情報セクションの生成にも使用されます。

    リンカーの、次のような単純な機能の内訳については、この章で説明します。

    ■ すべての提供オプションの検証と整合性チェック。

    ■ 入力再配置可能オブジェクトの同じ特性を持つセクションを連結することによる出力ファイル内での新しいセクションの形成。これらの連結されたセクションは、次に、出力セグメントへと連結できます。

    2第 2 章

    33

    http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN2exec-2http://www.oracle.com/pls/topic/lookup?ctx=E26505&id=REFMAN1ld.so.1-1

  • ■ 定義の参照を検証およびまとめるための再配置可能オブジェクトおよび共有オブジェクトのシンボルテーブル情報の処理。出力ファイル内での新しいシンボルテーブルまたはテーブルの生成。

    ■ 入力再配置可能オブジェクトの再配置情報の処理、および出力ファイルを構成するセクションへのこの情報の適用。さらに、実行時リンカーが使用するために出力再配置セクションも生成されます。

    ■ 作成されたすべてのセグメントを記述するプログラムヘッダーの生成。■ 必要に応じた、共有オブジェクトの依存関係やシンボルの結合などの情報を実行時リンカーに提供する、動的リンク情報セクションの生成。

    セクションと関連するセクションを連結してセグメントにするといった連結プロセスは、リンカー内のデフォルト情報を使用して実行されます。通常、ほとんどのリンク編集では、リンカーによって提供されるデフォルトのセクションとセグメントの処理で十分です。ただし、これらのデフォルトは対応する -mapfileを指定した Mオプションを使用して操作できます。付録 B「System V Release 4 (バージョン 1)Mapfile」を参照してください。

    リンカーの起動リンカーは、コマンド行から直接実行することもコンパイラドライバから呼び出すようにすることもできます。次の 2つのセクションでは、この両方の方法を詳しく説明します。ただし、通常は、コンパイラドライバを使用することをお勧めします。コンパイル環境は、多くの場合、コンパイラドライバだけが認識し、頻繁に変化する複雑な操作の連続によって構成されています。

    直接起動リンカーを直接的に起動させる場合は、出力を作成するために必要なすべてのオブジェクトファイルとライブラリを提供する必要があります。リンカーは、出力の作成に使用するつもりのオブジェクトモジュールまたはライブラリに関して、仮説を立てることをしません。たとえば、次のコマンドは、入力ファイル test.oのみを使って a.outという名前の動的実行可能ファイルを作成するように、リンカーに命令します。

    $ ld test.o

    通常、動的実行可能ファイルには、特殊な起動コードおよび終了処理コードが必要です。このコードは、言語またはオペレーティングシステム固有のもので、通常、コンパイラドライバによって提供されるファイルを通じて提供されます。

    また、自分専用の初期設定コードおよび�