dbx コマンドによるデバッグ

ild の動作

ild は最初のリンクで次の情報を保存します。

最初の ild リンクには、ld リンクと同じくらいの時間がかかります。

ild はインクリメンタルリンクで次のことを行います。

インクリメンタル ild のリンクは、ld のリンクよりもかなり短い時間で終了します。

通常、最初のリンクを 1 つ行うと、その後のリンクはすべてインクリメンタルリンクになります。

2 つのリンク時の動作を例をあげて説明しましょう。たとえば、ild が最初のリンクで、コードの中のシンボル foo を参照するすべての位置のリストを保存したとします。この後、foo の値を変更するインクリメンタルリンクを実行すると、ildfoo を参照するすべての参照値を変更します。

ild はプログラムのコンポーネントを展開し、実行可能ファイルの各セクションにパディングを行います。このパディングによって、実行可能モジュールは ld でリンクされる場合よりもサイズが大きくなります。インクリメンタルリンクが連続的に行われ、オブジェクトファイルのサイズが肥大していくと、パディングの余地がなくなってしまう可能性があります。こうなった場合、ild はメッセージを表示し、実行ファイル全体の完全な再リンクを行います。

図 B-1 を例にとって説明しましょう。図の 3 つのカラムはそれぞれ、リンクされた実行可能プログラムのテキストとデータのシーケンスを示しています。左のカラムは、ld によってリンクされた実行可能プログラムのテキストとデータです。中央のカラムは、ild でリンクされた実行可能プログラムに、パディングテキストとデータが追加されたことを示しています。ここでは、テキスト 1 のソースファイルが、ほかのセクションのサイズに影響することなく変更され、拡張されたと想定されます。右のカラムでは、テキスト 1 の元の位置がパディングされたテキストによって置き換わり (テキスト 1 が無効になる)、テキスト 1 は、テキストのパディング領域の部分に移動されています。

インクリメンタルでない小さな実行可能ファイルを作成するには、-xildoff オプションを使用してコンパイラドライバ (ccCC など) を実行します。こうすると、ld が起動され、コンパクトな実行可能ファイルが作成されます。

ild で作成された実行可能ファイルは、dbx でデバッグできます。これは、dbx デバッガが、ild によってプログラム間に挿入されたパディングを認識できるためです。

ild でサポートされていないコマンド行オプションを指定すると、ildld を起動します。ild/usr/ccs/bin/ld 内の ld と互換性があります。詳細については、「オプション」を参照してください。

ild には、特別なファイルは使用されません。