リンカーとライブラリ

サポートインタフェース関数

ld-サポートインタフェースはすべて、ヘッダファイル link.h に定義されています。インタフェース引数はすべて、基本的な C タイプまたは ELF タイプです。ELF データタイプは、ELF アクセスライブラリ libelf によって調べることができます (libelf の内容については、elf(3E) を参照)。次のインタフェース関数は、ld-サポートインタフェースによって提供されており、予定の使用順序に従って記述されています。


void ld_start(const char * name, const Elf32_Half type,
        const char * caller);
	void ld_start64(const char * name, const Elf64_Half type,
        const char * caller);
ld_start()

この関数は、リンカーコマンド行の初期妥当性検査の後に呼び出されて、入力ファイル処理の開始を示します。

name は、作成される出力ファイル名を示します。type は出力ファイルタイプであり、ET_DYNET_REL、または ET_EXEC のどれかです (sys/elf.h に定義)。caller は、インタフェースを呼び出すアプリケーションを示します。これは通常、/usr/ccs/bin/ld です。


void ld_file(const char * name, const Elf_Kind kind, int flags,
        Elf * elf);
void ld_file64(const char * name, const Elf_Kind kind, int flags,
        Elf * elf);
ld_file()

この関数は、ファイルデータの処理が実行される前に、各入力ファイルに対して呼び出されます。

name は処理される入力ファイルを示します。kind は入力ファイルのタイプを示し、 ELF_K_AR、または ELF_K_ELF のどちらかになります (libelf.h に定義)。flags は、リンカーによるファイルの取得方法を示し、次の 1 つまたは複数の定義にすることができます。

  • LD_SUP_DERIVED - ファイル名はコマンド行に明示的に指定されていない。 -l の拡張から派生するか、または抽出されたアーカイブ構成要素を示す

  • LD_SUP_INHERITED - ファイルは、コマンド行共有オブジェクトの依存関係として取得される

  • LD_SUP_EXTRACTED - ファイルは、アーカイブから抽出される

flags 値が指定されていない場合、入力ファイルはコマンド行に明示的に指定されています。elf は、ファイル ELF 記述子へのポインタです。


void ld_section(const char * name, Elf32_Shdr * shdr,
        Elf32_Word sndx, Elf_Data * data, Elf * elf);
void ld_section64(const char * name, Elf64_Shdr * shdr,
        Elf64_Word sndx, Elf_Data * data, Elf * elf);
ld_section()

この関数は、セクションデータの処理が実行される前に、入力ファイルの各セクションに対して呼び出されます。

name は、入力セクション名を示します。shdr は、関連のセクションヘッダへのポインタを示します。sndx は、入力ファイル内のセクションインデックスです。data は、関連データバッファへのポインタを示します。elf は、ファイル ELF 記述子へのポインタです。

データの変更は、データ自体を再割り当てして、Elf_Data バッファに d_buf ポインタを再割り当てすることによって可能になります。データへの変更はすべて、Elf_Data バッファの d_size 要素を保証しなければなりません。出力イメージの一部になる入力セクションでは、d_size 要素をゼロに設定すると、出力イメージからデータが効率的に削除されます。


注 -

リンカーの -s オプションによって取り除かれるセクションは、ld_section() に報告されません。



void ld_atexit(int status);
void ld_atexit64(int status);
ld_atexit()

この関数は、リンク編集の終了時に呼び出されます。

status は、リンカーによって返される exit(2) コードであり、EXIT_FAILURE または EXIT_SUCCESS のどちらかです (stdlib.h に定義)。