inner.h
にもどるdynload.h
《R4 で追加された機能》
ダイナミックリンクライブラリのサポートライブラリである。
ヘッダファイルは、btron/dynload.h
|
ERR b_dlsearch( TC *path, LINK *lnk, W mode )
path で指定したライブラリファイル(共有オブジェクトファイル)を検索し、その LINK を lnk に返す。 path が相対パス指定のときは、mode で指定された場所を検索する。
mode = [DL_BASE] | [DL_WORK] | [DL_PROC] | [DL_STDLIB] DL_BASE (0x08) lnk で指定したファイル DL_WORK (0x04) 現在の作業ファイル DL_PROC (0x02) 自プロセスのプログラムファイル DL_STDLIB (0x01) 標準ライブラリファイル /SYS/lib 検索はこの並び順(DL_BASE → DL_STDLIB)で行われる。
なお、検索はファイル名でのみ行われる。ファイルの内容に関しては関知しない。
ファイルが見つからないときは ER_NOEXS を返す。
|
WERR b_dlopen( LINK *lnk, W flag )
lnk で指定した共有オブジェクトを自プロセスのローカル空間にローディングする。戻値に、共有オブジェクトへのアクセスハンドル(>0)を返す。
lnk = NULL の場合はローディングを行わず、メインプログラムへのアクセスハンドルを返す。
flag = ( DL_LAZY ‖ DL_NOW ) | [DL_GLOBAL] DL_LAZY (1) 未確定シンボルを実行時に順次解決する。 未確定シンボルが解決できなかった場合の動作は保証され ない。(通常は例外でプロセスが落ちる) DL_NOW (2) ローディング時にすべての未確定シンボルを解決する。 未確定シンボルが解決できなかった場合は、b_dlopen() が エラーを返しローディングされない。 DL_GLOBAL (0x100) シンボルをグローバルとする。 ロードしたオブジェクトの外部シンボルを、他の共有オブ ジェクトからも参照できるようにする。
すでにロードされている共有オブジェクトと同じものをロードした場合、再度のローディングは行われず、同じハンドルが返される。
|
ERR b_dlsym( W handle, const char *symbol, UW *val )
handle で指定した共有オブジェクトから symbol で指定したシンボルを検索し、その値を val に返す。
シンボルが見つからない場合は ER_NOEXS を返す。このとき、val には NULL を返す。
以下の特殊な handle が使用できる。
DL_DEFAULT (0) グローバルシンボルを検索する。 DL_NEXT (-1) 自身より下の階層のシンボルを検索する。
|
WERR b_dladdr( VP addr, DLINFO *info )
addr で指定したアドレスを所有しているライブラリに関する情報を info に返す。また、戻値にその共有オブジェクトのアクセスハンドルを返す。
addr の位置に共有オブジェクトがなければ ER_NOEXS を返す。
typedef struct { const LINK *link; /* ファイル */ void *fbase; /* ベースアドレス */ const char *sname; /* シンボル名 */ void *saddr; /* シンボルのアドレス */ } DLINFO; link 共有オブジェクトファイル fbase 共有オブジェクトのロードオフセット sname addr の位置または addr より小さなアドレスで最も近い位置のシンボルの名称 saddr sname のシンボルの値(アドレス)
|
ERR b_dlclose( W handle )
handle で指定した共有オブジェクトをアンロードする。
複数回 b_dlopen() されている場合、その回数分 b_dlclose() したとき始めてアンロードされる。
inner.h
にもどる