LDFCN(3X) — NEWS-OS Programmer’s Manual
名称
ldfcn − 共通オブジェクトファイルのアクセスルーチン
形式
#include <stdio.h>
#include <filehdr.h>
#include <syms.h>
#include <ldfcn.h>
解説
共通オブジェクトファイルのアクセスルーチンは、 共通オブジェクトファイル形式にあるオブジェクトファイルを 読み込むための関数の集まりです。 この関数を呼び出すプログラムは、 処理するオブジェクトファイルの各部分の詳細な構造を知っていなければならないが、 このルーチンを用いることにより オブジェクトファイルのすべての構造を知る必要はなくなります。
呼ぶプログラムとオブジェクトファイルのアクセスルーチン間のインタフェースは、 定義された型 LDFILE ( struct ldfile として定義)に基づいています。 これは、ヘッダファイル <ldfcn.h> 内で宣言されます。 最初に、この構造体は、単純なオブジェクトファイルおよびアーカイブファイル のメンバであるオブジェクトファイルへの均一なアクセスを提供します。
関数 ldopen(3X) は、 LDFILE 構造体を割り当て、初期化し、シンボルテーブルヘッダがあればそれを読み込み、 その構造体を指すポインタを呼ぶプログラムへ返します。 LDFILE 構造体の各フィールドは、 <ldfcn.h> で定義されたマクロを介してここにアクセスすることができます。 各フィールドは、以下の情報を含みます。
LDFILE∗ldptr;
TYPE(ldptr) ファイルマジック番号、アーカイブメンバと単純なオブジェクトファイルを 区別するために使用します。
IOPTR(ldptr) fopen(3S) により返され、標準入出力関数により使用されるファイルポインタ。
OFFSET(ldptr) オブジェクトファイルがアーカイブファイルのメンバで、 オフセットが 0 でない値の場合の、 オブジェクトファイルの始まりのファイルアドレス。
HEADER(ldptr) オブジェクトファイルのファイルヘッダ構造体。
SYMHEADER(ldptr)
オブジェクトファイルと対応するシンボルテーブルのシンボリックヘッダ構造体。
PFD(ldptr) シンボルテーブルと対応するファイルテーブル。
SYMTAB(ldptr) メモリされているシンボルテーブルのコピーを指すポインタ。 これは、pCHDR 構造体を介してアクセスされます(cmplrs/stsupport.h を参照)。 シンボルテーブルが存在しない場合、このフィールドは NULL です。
注意: このマクロは、全シンボルテーブルを読み込ませます。
LDSWAP(ldptr) ヘッダとシンボルテーブル構造体がオブジェクトファイル内でスワップされ、 すべてのアクセスが libsex を使用する必要がある場合、このフィールドは、 真に設定されます。 注意: libmld ルーチンを使用する場合は、 オプショナルヘッダと補助シンボルを除くすべての構造体は、スワップされます。
オブジェクトファイルのアクセス関数は、5 つのカテゴリーに分けることが できます。
(1) オブジェクトファイルをオープンまたはクローズする関数。
ldopen(3X) と ldaopen
共通オブジェクトファイルをオープンします。
ldclose(3X) と ldaclose
共通オブジェクトファイルをクローズします。
(2) ヘッダまたはシンボルテーブル情報を返す関数。
ldahread(3X)
アーカイブファイルのメンバのアーカイブヘッダを読み込みます。
ldfhread(3X)
共通オブジェクトファイルのファイルヘッダを読み込みます。
ldshread(3X) と ldnshread
共通オブジェクトファイルのセクションヘッダを読み込みます。
ldtbread(3X)
共通オブジェクトファイルのシンボルテーブルエントリを読み込みます。
ldgetname(3X)
シンボルテーブルエントリまたは文字列テーブルから、シンボル名を検索します。
ldgetaux(3X)
指定された ldptr に対する aux テーブルへのポインタを検索します。
ldgetsymstr(3X)
指定されたシンボルに対するタイプ文字列(たとえば、C 宣言)を作成します。
ldgetpd(3X)
プロシージャディスクリプタを検索します。
ldgetrfd(3X)
相対ファイルのテーブルエントリを検索します。
(3) オブジェクトファイルを、特別なセクションに関するセクション情報、 再配置情報または行番号情報の始めに位置付ける(シークする)関数。
ldohseek(3X)
共通オブジェクトファイルのオプショナルファイルヘッダまでシークします。
ldsseek(3X) と ldnsseek
共通オブジェクトファイルのセクションまでシークします。
ldrseek(3X) と ldnrseek
共通オブジェクトファイルのセクションに関する再配置情報までシークします。
ldlseek(3X) と ldnlseek
共通オブジェクトファイルのセクションに関する行番号情報までシークします。
ldtbseek(3X)
共通オブジェクトファイルのシンボルテーブルまでシークします。
(4) その他の関数
ldtbindex(3X)
共通オブジェクトファイルの特別なシンボルテーブルエントリのインデックス を返します。
ranhashinit(3X)
アーカイブのハッシュおよびルックアップルーチンが動作するように、 テーブルおよび定数を初期化します。
ranhash(3X)
ハッシュインデックスを返すための文字列を与えます。
ranlookup(3X)
空であるか、文字列の引数と一致するアーカイブハッシュバケットを返します。
disassembler(3X)
MIPS アセンブラ命令を表示します。
ldreadst(3X)
シンボルテーブルのセクションを読み込ませます。
これらの関数の詳細は、各関数に関係するマニュアルページに記述されています。
ldopen と ldaopen は両方とも、 LDFILE 構造体 を指すポインタを返します。
マクロ
オブジェクトファイルへの追加のアクセスは、 <ldfcn.h> で定義された一群のマクロを介して提供されます。 これらのマクロは、標準の入出力ファイルの読込みおよび処理機能に匹敵します。 これらのマクロは、 LDFILE 構造体の参照を、そのファイルディスクリプタフィールドに対する参照に変換します。
以下のマクロが提供されています。
GETC(ldptr)
FGETC(ldptr)
GETW(ldptr)
UNGETC(c, ldptr)
FGETS(s, n, ldptr)
FREAD((char ∗) ptr, sizeof (∗ptr), nitems, ldptr)
FSEEK(ldptr, offset, ptrname)
FTELL(ldptr)
REWIND(ldptr)
FEOF(ldptr)
FERROR(ldptr)
FILENO(ldptr)
SETBUF(ldptr, buf)
STROFFSET(ldptr)
STROFFSET マクロは、オブジェクトファイル 中のローカルシンボルの 文字列テーブルのアドレスを計算します。 これらマクロの使用の詳細については、 対応する標準の入出力ライブラリ関数に対するマニュアルエントリを 参照してください(各関数は本マニュアルの第 3 節の 3S として識別されます)。
プログラムは、オブジェクトファイルのアクセスルーチンライブラリ libmld.a とともにロードされなければなりません。
警告
ヘッダファイル <ldfcn.h> で定義されたマクロ FSEEK は、標準の入出力関数 fseek(3S) へのコールに変換されます。 FSEEK は、アーカイブファイルの終わりからのシークには使用すべきではありません。 なぜならば、アーカイブファイル終わりは、 そのオブジェクトファイルメンバのうちの 1 つの終わりと同じではないからです。
関連事項
ar(1), fopen(3S), fseek(3S), ldahread(3X), ldclose(3X), ldfhread(3X), ldgetname(3X), ldlread(3X), ldlseek(3X), ldohseek(3X), ldopen(3X), ldrseek(3X), ldlseek(3X), ldshread(3X), ldtbindex(3X), ldtbread(3X), ldtbseek(3X). RISC NEWS Assembler Language Programmer’s Guide 中の COFF。
NEWS-OSRelease 4.2.1R