730eb3d2f8
Submitted by: Sarumaru Yoshihiko <mistral at imasy or jp>
193 lines
6 KiB
Groff
193 lines
6 KiB
Groff
.\" Copyright (c) 1995 Paul Kranenburg
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgment:
|
|
.\" This product includes software developed by Paul Kranenburg.
|
|
.\" 3. The name of the author may not be used to endorse or promote products
|
|
.\" derived from this software without specific prior written permission
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
.\"
|
|
.\" %FreeBSD: src/libexec/rtld-elf/rtld.1,v 1.38.4.1 2005/02/27 20:47:20 mdodd Exp %
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.Dd May 31, 2003
|
|
.Dt RTLD 1
|
|
.Os
|
|
.Sh 名称
|
|
.Nm ld-elf.so.1 ,
|
|
.Nm ld.so ,
|
|
.Nm rtld
|
|
.Nd 実行時リンクエディタ
|
|
.Sh 解説
|
|
.Nm
|
|
ユーティリティは自己完結した共有オブジェクトで、
|
|
実行時にプロセスのアドレス空間に共有オブジェクトを読み込んで
|
|
編集する機能を提供します。
|
|
一般には動的リンカという名前でも知られています。
|
|
動的リンクされたプログラムに含まれるデータ構造を使って
|
|
どの共有ライブラリが必要なのかを決定し、
|
|
.Xr mmap 2
|
|
システムコールを使ってそれらを読み込みます。
|
|
.Pp
|
|
全ての共有ライブラリを読み込むことに成功すると、次に
|
|
.Nm
|
|
はメインプログラムおよび読み込んだ
|
|
全てのオブジェクトからの外部参照を解決します。
|
|
プログラム本体の実行が始まる前になんらかの設定をする機会を
|
|
共有オブジェクトに与えるために、
|
|
オブジェクトごとに初期化ルーチンを呼ぶ機構があります。
|
|
これは静的コンストラクタを含むような C++ ライブラリにとって有用です。
|
|
.Pp
|
|
実行されるプログラムが動的にリンクされている場合には、そのプログラムと一緒に
|
|
.Nm
|
|
ユーティリティ自体がカーネルによって読み込まれます。
|
|
そしてカーネルは動的リンカに制御を移します。
|
|
動的リンカがプログラムとそれに必要な共有オブジェクトの
|
|
読み込み、再配置、初期化を終えると、
|
|
プログラムのエントリポイントに制御を移します。
|
|
.Pp
|
|
ファイルシステム中にある必要な共有オブジェクトを探索するために、
|
|
.Nm
|
|
は
|
|
.Xr ldconfig 8
|
|
ユーティリティによって用意される
|
|
.Dq hints
|
|
ファイルを使います。
|
|
.Pp
|
|
.Nm
|
|
ユーティリティは以下に挙げるような、
|
|
自身の動作を変えるために使用されるいくつかの環境変数を認識します:
|
|
.Pp
|
|
.Bl -tag -width ".Ev LD_LIBMAP_DISABLE"
|
|
.It Ev LD_DUMP_REL_POST
|
|
これが設定されていた場合、シンボル束縛と再配置の後に、
|
|
.Nm
|
|
は全再配置を含む表を表示します。
|
|
.It Ev LD_DUMP_REL_PRE
|
|
これが設定されていた場合、シンボル束縛と再配置の前に、
|
|
.Nm
|
|
は全再配置を含む表を表示します。
|
|
.It Ev LD_LIBMAP
|
|
ライブラリ置換リストで、形式は
|
|
.Xr libmap.conf 5
|
|
と同じです。
|
|
便利なように、空白と改行のかわりに
|
|
.Ql =
|
|
と
|
|
.Ql \&,
|
|
の文字を使うことができます。
|
|
この変数は
|
|
.Xr libmap.conf 5
|
|
の後に解析され、このファイルで指定された項目を上書きします。
|
|
.It Ev LD_LIBMAP_DISABLE
|
|
これが設定されていた場合、
|
|
.Xr libmap.conf 5
|
|
および
|
|
.Ev LD_LIBMAP
|
|
の使用を無効化します。
|
|
.It Ev LD_LIBRARY_PATH
|
|
コロンで区切られたディレクトリのリストで、
|
|
共有ライブラリのデフォルトサーチパスを上書きします。
|
|
この環境変数は、
|
|
set-user-ID 及び set-group-ID されたプログラムにおいては無視されます。
|
|
.It Ev LD_PRELOAD
|
|
他の共有ライブラリより前にリンクされるべき共有ライブラリのリストで、
|
|
コロンか空白で区切られています。
|
|
もしディレクトリが指定されていないならば、
|
|
最初に
|
|
.Ev LD_LIBRARY_PATH
|
|
で指定されるディレクトリから、
|
|
続いて組み込みの標準ディレクトリ群から検索されます。
|
|
この環境変数は、
|
|
set-user-ID 及び set-group-ID されたプログラムにおいては無視されます。
|
|
.It Ev LD_BIND_NOW
|
|
空ではない文字列が設定されている場合には、
|
|
.Nm
|
|
は、全ての外部関数呼び出しをプログラムの実行を始める前に再配置します。
|
|
通常、関数呼び出しの結合は遅延方式 (lazy binding) で行われます。
|
|
すなわち、関数呼び出しはそれぞれの関数が最初に呼ばれる時に結合されます。
|
|
.Ev LD_BIND_NOW
|
|
はプログラムの起動時間を増加させますが、
|
|
実行時に思いもかけず関数が定義されていなかったという事件は避けられます。
|
|
.It Ev LD_TRACE_LOADED_OBJECTS
|
|
空ではない文字列が設定されている場合には、
|
|
.Nm
|
|
は共有オブジェクトを読み込んで、全てのオブジェクトの絶対パス名を含む
|
|
概要を標準出力に表示した後に終了します。
|
|
.It Ev LD_TRACE_LOADED_OBJECTS_ALL
|
|
空ではない文字列に設定されている場合には、
|
|
どのオブジェクトがどのオブジェクトのロードの原因となったのかという
|
|
まとめを
|
|
.Nm
|
|
が展開するようにさせます。
|
|
.It Ev LD_TRACE_LOADED_OBJECTS_FMT1
|
|
.It Ev LD_TRACE_LOADED_OBJECTS_FMT2
|
|
設定されている場合には、
|
|
これらの変数は
|
|
トレース出力をカスタマイズするための
|
|
.Xr printf 3
|
|
流フォーマット文字列として解釈されます。
|
|
.Xr ldd 1
|
|
の
|
|
.Fl f
|
|
オプションがこれらを使用するので、
|
|
.Xr ldd 1
|
|
をより便利にフィルタとして使うことができます。
|
|
以下の変換を使うことができます:
|
|
.Bl -tag -width 4n
|
|
.It Li %a
|
|
メインプログラムの名前
|
|
(またの名を
|
|
.Dq __progname )
|
|
。
|
|
.It Li \&%A
|
|
.Ev LD_TRACE_LOADED_OBJECTS_PROGNAME
|
|
環境変数の値。
|
|
.It Li %o
|
|
ライブラリの名前。
|
|
.It Li %m
|
|
ライブラリのメジャーバージョン番号。
|
|
.It Li %p
|
|
.Nm rtld
|
|
のライブラリ検索ルールで決定されるフルパス名。
|
|
.It Li %x
|
|
ライブラリのロードアドレス。
|
|
.El
|
|
.Pp
|
|
さらに、
|
|
.Ql \en
|
|
と
|
|
.Ql \et
|
|
が認識され、通常の意味をもちます。
|
|
.El
|
|
.Sh 関連ファイル
|
|
.Bl -tag -width ".Pa /var/run/ld-elf.so.hints" -compact
|
|
.It Pa /var/run/ld-elf.so.hints
|
|
.It Pa /etc/libmap.conf
|
|
libmap の設定ファイル。
|
|
.El
|
|
.Sh 関連項目
|
|
.Xr ld 1 ,
|
|
.Xr ldd 1 ,
|
|
.Xr elf 5 ,
|
|
.Xr libmap.conf 5 ,
|
|
.Xr ldconfig 8
|