227 lines
7.1 KiB
Groff
227 lines
7.1 KiB
Groff
.\" %Id: rtld.1,v 1.15 1997/09/13 16:01:41 wosch Exp %
|
|
.\"
|
|
.\" 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.
|
|
.\"
|
|
.\" translated to japanese by Mochida Shuji 1995/03/31
|
|
.\" jpman %Id: rtld.1,v 1.3 1997/07/06 17:03:02 horikawa Stab %
|
|
.Dd June 27, 1995
|
|
.Dt RTLD 1
|
|
.Os FreeBSD
|
|
.Sh 名称
|
|
.Nm ld.so
|
|
.Nd 実行時リンクエディタ
|
|
.Sh 解説
|
|
.Nm
|
|
は、実行時にシェアードオブジェクトをプロセスのアドレス空間へロードし、
|
|
リンク編集する機能を提供する、自己完結・位置非依存のプログラムイメージです。
|
|
動的リンクされたプログラム内のデータ構造
|
|
.Po
|
|
.Xr link 5
|
|
参照
|
|
.Pc
|
|
から、どのシェアードライブラリが必要かを調べ、
|
|
.Xr mmap 2
|
|
システムコールを使って、それらを適当な仮想アドレスへロードします。
|
|
.Pp
|
|
全てのシェアードライブラリのロードが完了すると、次に
|
|
.Nm
|
|
はメインプログラムと、ロードされた全オブジェクトからの大域参照の解決を
|
|
行います。初期化ルーチン呼び出しの仕組みが各オブジェクトの単位で提供されて
|
|
おり、プログラムが実際に開始される前に、各シェアードオブジェクトに独自の
|
|
セットアップを行わせることができます。このことは、静的なコンストラクタを
|
|
含む C++ のライブラリに有用です。
|
|
.Pp
|
|
.Nm
|
|
はそれ自体一つのシェアードオブジェクトであり、
|
|
.Em crt0
|
|
初期化モジュールによって最初にロードされます。
|
|
.Xr a.out 5
|
|
形式は実行中のプロセス内からファイルヘッダに容易にはアクセスできないので、
|
|
.Em crt0
|
|
は
|
|
.Va _DYNAMIC
|
|
という特殊なシンボルによって、プログラムが動的にリンクされているがどうかを
|
|
判別します。たとえリンカ
|
|
.Xr ld 1
|
|
がこのシンボルを 0 以外の位置に再配置した場合、
|
|
.Em crt0
|
|
は
|
|
.Nm
|
|
による処置が必要と想定します
|
|
.Po
|
|
詳細は
|
|
.Xr link 5
|
|
を参照
|
|
.Pc \&。
|
|
.Em crt0
|
|
はプログラムの
|
|
.Fn main
|
|
ルーチンが呼び出されるより前に
|
|
.Nm
|
|
のエントリ位置へ制御を移します。こうして、
|
|
.Nm
|
|
は動的プログラムがダイナミックライブラリ内のサービスを呼び出すより前に、
|
|
リンク編集操作を完了します。
|
|
.Pp
|
|
要求されたシェアードオブジェクトをファイルシステムから迅速に配置するために、
|
|
.Nm
|
|
は
|
|
.Dq hints
|
|
ファイルを使用することがあります。このファイルは
|
|
.Xr ldconfig 8
|
|
ユーティリティで作成され、シェアードオブジェクトのフルパス指定が 3 つのタプル
|
|
.Ao
|
|
ライブラリ名, メジャーバージョン番号, マイナーバージョン番号
|
|
.Ac
|
|
でハッシュ化され格納されています。
|
|
.Pp
|
|
.Nm
|
|
は、以下の種々の環境変数によって動作を変えることができます:
|
|
.Pp
|
|
.Bl -tag -width "LD_IGNORE_MISSING_OBJECTS"
|
|
.It Ev LD_LIBRARY_PATH
|
|
コロン区切りのディレクトリリストで、
|
|
シェアードライブラリのデフォルト検索パスを上書きします。
|
|
セットユーザ ID およびセットグループ ID されているプログラムに関しては
|
|
無視されます。
|
|
.It Ev LD_PRELOAD
|
|
コロン区切りのシェアードライブラリのリストで、
|
|
他のシェアードライブラリのリンク前にリンクされます。
|
|
ディレクトリが指定されていない場合は、
|
|
LD_LIBRARY_PATH で指定されるディレクトリをまず探し、
|
|
次に組み込みの標準のディレクトリを探します。
|
|
セットユーザ ID およびセットグループ ID されているプログラムに関しては
|
|
無視されます。
|
|
.It Ev LD_BIND_NOW
|
|
空文字列以外に設定すると、
|
|
.Nm
|
|
はプログラム実行開始前に外部関数呼び出しをリロケートします。
|
|
通常、関数呼び出しの結合は各関数の最初の呼び出しまで遅延されます。
|
|
.Ev LD_BIND_NOW
|
|
はプログラムのスタートアップ時間を増加させますが、
|
|
実行中に予期せぬ未定義関数にでくわすことを防ぎます。
|
|
.It Ev LD_WARN_NON_PURE_CODE
|
|
空文字列以外に設定すると、リンク編集作業でロードされたオブジェクトの
|
|
テキストセグメントの修正が必要になる度に警告を出します。
|
|
これは通常、ライブラリの作成が正しくないということを示します。
|
|
.It Ev LD_SUPPRESS_WARNINGS
|
|
空文字列以外に設定すると、どんな種類の警告メッセージも出しません。
|
|
通常は、適正なバージョンのライブラリが見つからなければ警告を出します。
|
|
.It Ev LD_IGNORE_MISSING_OBJECTS
|
|
空文字列以外に設定すると、要求された 1 つ以上のシェアードオブジェクト
|
|
がロードできなくとも致命的な状態であるとは扱いません。
|
|
ロードおよび実行は利用可能なものを使用して行います。
|
|
環境変数
|
|
.Ev LD_SUPPRESS_WARNINGS
|
|
が空文字列以外に設定されている場合以外は、
|
|
存在しないオブジェクトごとに警告を生成します。
|
|
.Pp
|
|
セットユーザ ID プログラムおよびセットグループ ID プログラム
|
|
に関しては、無視されます。
|
|
.Pp
|
|
以下の条件が全て満される場合には、
|
|
存在しないシェアードオブジェクトは無視されます:
|
|
.Bl -bullet
|
|
.It
|
|
要求されているデータシンボルの定義を
|
|
これらのシェアードオブジェクトが提供しない。
|
|
.It
|
|
これらのシェアードオブジェクトが定義する関数を
|
|
プログラム実行中に呼出さない。
|
|
.It
|
|
環境変数
|
|
.Ev LD_BIND_NOW
|
|
が設定されていないか空文字列に設定されている。
|
|
.El
|
|
.It Ev LD_TRACE_LOADED_OBJECTS
|
|
空文字列以外に設定すると、
|
|
.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 -indent "LD_TRACE_LOADED_OBJECTS_FMT1 " -width "xxxx"
|
|
.It \&%a
|
|
メインプログラム名
|
|
.Po
|
|
.Dq __progname
|
|
と同じ
|
|
.Pc 。
|
|
.It \&%A
|
|
環境変数
|
|
.Ev LD_TRACE_LOADED_OBJECTS_PROGNAME
|
|
の値。
|
|
.It \&%o
|
|
ライブラリ名。
|
|
.It \&%m
|
|
ライブラリのメジャーバージョン番号。
|
|
.It \&%n
|
|
ライブラリのマイナバージョン番号。
|
|
.It \&%p
|
|
.Nm rtld
|
|
のライブラリ検索規則にて決定されるフルパス名。
|
|
.It \&%x
|
|
ライブラリのロードアドレス。
|
|
.El
|
|
.Pp
|
|
さらに、
|
|
.Sy \en
|
|
と
|
|
.Sy \et
|
|
とが解釈され、いつも通りの意味を持ちます。
|
|
.\" .It Ev LD_NO_INTERN_SEARCH
|
|
.\" 設定すると、
|
|
.\" .Nm
|
|
.\" は実行ファイル内に記録されている検索パスを無視します。
|
|
.\" .It Ev LD_NOSTD_PATH
|
|
.\" 設定すると、組み込みの標準検索パスを使用しません。
|
|
.\" 標準と全く異なったファイルシステムレイアウトのシステムを
|
|
.\" 使用する場合に便利です。
|
|
.El
|
|
.Pp
|
|
.Sh 関連ファイル
|
|
/var/run/ld.so.hints
|
|
.Pp
|
|
.Sh 関連項目
|
|
.Xr ld 1 ,
|
|
.Xr link 5 ,
|
|
.Xr ldconfig 8
|
|
.Sh 歴史
|
|
採用している shared library モデルが最初に登場したのは SunOS 4.0 です。
|