Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ld(1) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

pc(1)

f77(1)

as(1)

ar(1)

LD(1)  —  NEWS-OS Programmer’s Manual

名称

ld − RISC NEWS リンクエディタ
uld − ucode リンクエディタ

形式

ld [ option ] ...  file ... 
uld [ option ] ...  file ... 

解説

ld は RISC NEWS リンクエディタであり、UNIX System 4.3bsd および System  V の RISC NEWS マシン上で動作します。 ld は、RISC NEWS の拡張 coff オブジェクトファイルのリンクを行います。 ld が理解するアーカイブフォーマットは、RISC NEWS アーカイバ ar(1) によって作成されたものです。

ld コマンドは、いくつかのオブジェクトファイルを結合して 1 つにし、 再配置を実行し、外部参照を解決し、 シンボリックデバッギング用のシンボルテーブル情報をサポートします。 最も単純なケースでは、いくつかのオブジェクトファイルの名前が与えられます。 ld はこれらのファイルを 1 つにまとめ、実行可能な、またはその後の ld の実行の入力として使用できるオブジェクトモジュールを生成します (後者の場合、 −r オプションを指定して再配置エントリを保存しなければなりません)。 ld の出力は、 a.out に入れられます。 デフォルトでは、ロード中にエラーが発生しなければ、 このファイルは実行可能です。

引数オブジェクトファイルは指定された順序で連結されます。 出力のエントリポイントは、テキストセグメントの先頭です (−e オプションが指定された場合は除く)。

uld コマンドは、いくつかの ucode オブジェクトファイルとライブラリを 結合して 1 つの ucode オブジェクトファイルを生成します。 uld は、その後のコンパイラパスによるよりよい最適化のために 外部記号を「隠します」。 ucode オブジェクトファイルとともにロードされた coff オブジェクトファイルのシンボルテーブルは、どの外部記号が、 シンボル名のリストを含む、 ユーザによって指定されたファイルとともに「隠さない」かを決定するために 使用されます。

引数がライブラリである場合、それは、 引数リスト内で出会ったポイントで正確に 1 度だけ検索されます。 未解決の外部参照を定義するルーチンだけがロードされます。 ライブラリ(アーカイブ)シンボルテーブル (ar(1) を参照)はハッシュテーブルであり、ライブラリメンバが満足することの できる解決された外部参照まで探索されます。 ライブラリメンバの順序付けは重要ではありません。

下記のオプションは、 ld と uld の両方によって認識されます。 どちらか一方だけが使用するオプションは無視されます。 オプションはすべて前に k をつけることができ、(たとえば、 −ko outfile)、 −klx を除いて、前に k がついていてもいなくても意味は変わりません。 前に k をつけるのは、これらのオプションをコンパイラドライバを介して両方の リンクエディタに渡すためです。

ライブラリを検索する場合、検索されるデフォルトのディレクトリは /lib/、/usr/lib/cmplrs/cc、/usr/lib/ および /usr/local/lib/ です。 ロードされているオブジェクトファイルのターゲットのバイト 順序付け (byte ordering) がリンクエディタが実行されているマシンの バイト順序付けとは反対の場合、 ライブラリ用のデフォルトのサーチディレクトリは変更されます。 この変更は、ロードされているオブジェクトのターゲットのバイト順序付けと 一致するように、ディレクトリの最後の名前を lib/ から libeb/ または libel/ へ置き換えるものです。

シンボル etext、edata、end、 _ftext、_fdata、_fbss、 _gp、_procedure_table、_procedure_table_size および _procedure_string_table はリザーブされています。 これらのローダ定義のシンボルは、参照された場合、 end(3) に説明されているようにその値が設定されます。 これらのシンボルを定義することは誤りです。

−o outfile
outfile という名前で出力オブジェクトファイルを生成します。 デフォルトのオブジェクトファイルの名前は a.out です。

−lx ライブラリ libx.a を検索します。 ここで、 x は文字列です。 ライブラリは、その名前に出会ったときに検索されますので、 −l の位置は重要です。

−klx ライブラリ libx.b をサーチします。 ここで x は文字列です。 これらのライブラリは ucode オブジェクトライブラリであることになっています。 その他の点ではすべて、このオプションは −lx オプションと同様です。

−Ldir libx.a または libx.b をサーチするアルゴリズムを変更して、デフォルトのディレクトリの中を サーチする前に dir の中を調べるようにします。 このオプションは、コマンドライン上の −l オプションの前にあるときだけ有効です。

−L libx.a または libx.b をサーチするアルゴリズムを変更して、デフォルトのディレクトリの中を調べ ないようにします。 これは、ライブラリのデフォルトのディレクトリをサーチせず、 −Ldir によって指定されたディレクトリだけをサーチしたいときに役立ちます。

−Kdir
デフォルトのディレクトリをシングルディレクトリ dir に変更します。 このオプションは、コンパイラドライバによって使用されることだけを目的 としたものです。 ユーザは、 −L および −Ldir オプションを使用して、希望する効果を得てください。

−Bstring
ライブラリ名をサーチするときに −lx および −klx のために作成されたライブラリ名に string を付加します。 サーチされる各ディレクトリについて、名前はまずこの string 付きで作成され、それが見つからなかった場合、 string なしで作成されます。

−p file
ucode オブジェクトファイルをロードするときに、 file 内にリストされているシンボル名を保存します(「隠し」ません)。 このファイル内のシンボル名は空白、タブ、または復帰改行で区切られます。

−s 出力オブジェクトファイルからシンボリック情報を取り除きます。

−x ローカル (.globl ではない)シンボルを出力シンボルテーブルに保存しません。 外部記号および静的シンボルだけを格納します。 このオプションは出力ファイルのスペースを節約します。

−r 出力ファイル内の再配置エントリを保存します。 出力がその後の ld の実行で入力ファイルになる場合は、再配置エントリをセーブしなければ なりません。 このオプションは、共通シンボルに最終定義が与えられることを防ぎ、 「未定義シンボル」の診断を抑制します。

−d 共通記憶領域の定義を強制し、 −r がある場合でもローダ定義のシンボルを定義します。

−u symname
symname を未定義としてシンボルテーブルに入力します。 最初はシンボルテーブルは空であり、 最初のルーチンのロードを強制するには未解決の参照が必要であるため、 これはライブラリから完全にロードする場合に役立ちます。

−F または −z
プロセスが事前にロードされるのではなく、要求に応じて実行可能 ファイル (0413 フォーマット) からロードされるような ZMAGIC ファイルにします。これがデフォルトです。

−n (出力ファイルに 0410 の「マジック番号」を与えることによって) 出力するファイルが実行されたときにテキスト部分がリードオンリになり、 そのファイルを実行するすべてのユーザの間で共用されるような NMAGIC ファイルにします。 これに伴って、データエリアはテキストの終わりに続く最初の可能な pagesize バイト境界まで移動します。

−N データセクションをテキストのすぐ後に置き、テキスト部分をリードオンリ または共用可能にしない OMAGIC ファイルにします(「マジック番号」 0407 を使用します)。

−T num
テキストセグメントの原点を設定します。 引数 num は 16進数です。 制限については、注意の節を参照してください。

−D num
データセグメントの原点を設定します。 引数 num は 16 進数です。 制限については、注意の節を参照してください。

−B num
bss セグメントの原点を設定します。 引数 num は 16 進数です。 このオプションは、最後のオブジェクトが OMAGIC ファイルである場合だけ 使用できます。

−e epsym
出力ファイルのデフォルトのエントリポイントアドレスを、シンボル epsym のアドレスに設定します。

−m 標準入力/出力セクションのマップまたはリストを生成します(UNIX System V のようなマップ)。

−M ロードされるファイルの名前をリストしたプリミティブロードマップを 生成します(UNIX 4.3bsd のようなマップ)。

−S サイレント(黙った)モードを設定し、致命的でないエラーを抑制します。

−v 多弁モードを設定します。 処理されている各ファイルの名前を表示します。

−ysym
sym が現れる各ファイル、 sym のタイプ、およびそのファイルが sym を定義するのか参照するのかを示します。 このようなオプションを数多く与えて多くのシンボルをトレースすることが できます。

−V 使用されている ld のバージョンに関する情報を与えるメッセージを表示します。

−VS num
num を 10 進数バージョンスタンプとして使用し、生成される a.out ファイルを識別します。 バージョンスタンプは任意ヘッダおよびシンボリックヘッダにストアされます。

−f fill 出力セクション内の ‘holes’ のフィルパターンを設定します。 引数 fill は 4 バイトの 16 進定数です。

−G num
引数 num は、 グローバルポインタから参照されない小さな bss セクションに割り当てられる .comm アイテムまたはリテラルの最大サイズ(単位:バイト)として使われます。 デフォルトは 8 バイトです。

−bestGnum
リンクされているオブジェクトを生成するファイルのコンパイルまたは リンクを行うときに使用する最善の −G num を計算します。 −G num オプションで大きすぎる数を使用すると、gp (グローバルポインタ)データ 領域がオーバフローすることがあります。 小さすぎる数を使用すると、ユーザのプログラムの実行速度が落ちることが あります。

−count、−nocount、−countall
これらのオプションは、どのオブジェクトを最善の −G num 計算のために再コンパイル可能なものとしてカウントするかを制御します。 デフォルトでは、 −bestGnum オプションは、ユーザが異なる −G num オプションですべてを再コンパイルできるものとみなします。 (たとえば、そのソースをもっていないなどの理由で) 特定のオブジェクトファイルまたはライブラリを再コンパイルできない場合は、 これらのオプションを使用して、最善の −G num の値を計算する際にそのことを考慮に入れるようにリンクエディタに 指示します。 −nocount は、コマンドライン上でその後に現れるオブジェクトファイルは再コンパイル できないものとします。 −count は、コマンドライン上でその後に現れるオブジェクトファイルは再コンパイル できるものとします。 −nocount と −count を交互に使用することができます。 −countall は、コマンドライン上でその後に現れる −nocount オブジェクトを無効にします。

−b 同じファイルのシンボリック情報エントリをそのファイルの 1 つのエントリに マージしません。 このオプションは、同じファイルからのシンボリック情報が、 リンクされるオブジェクトのどれかで異なっている場合にだけ必要です。 これは、オブジェクトファイルを条件付きコンパイルの方法によって、 明らかに異なるバージョンのインクルードファイルとコンパイルするときに 発生することがあります。

−jmpopt または −nojmpopt
飛越し命令の遅延スロットを飛越しのターゲットでフィルするか、 あるいはフィルしません。 これは常に、デバッギングの場合 (−g1、−g2 または −g フラグがある場合)には使用できません。 このオプションが使用可能な場合、ロードされたプログラムのテキストが すべてメモリ上に存在することが要求され、そのためにローダがメモリを 使い果たしてしまう可能性があります。 デフォルトは −nojmpopt です。

−g または −g[0123]
これらのオプションは受け付けられ、 −g1、−g2 または −g が −jmpopt を使用不能にすることを除いて何の効果もありません。

−A file
このオプションはインクリメンタルロードを指定します。 すなわち、結果として生じるオブジェクトをすでに実行中のプログラムに 読み込むことができるような方法でリンクが行われます。 次の引数 file は、そのシンボルテーブルが追加のシンボルを定義するための基準であると みなされるファイルの名前です。 新しくリンクされた資料だけが a.out のテキストおよびデータ部分に入れられますが、 新しいシンボルテーブルはインクリメンタルロードの前後に 定義されたすべてのシンボルを反映します。 この引数は、引数リスト内で他のどのオブジェクトファイルよりも前に なければなりません。 さらに −T オプションも使用でき、これは、新しくリンクされたセグメントは対応する アドレス(これは、結果として生じるオブジェクトのタイプに適した倍数で なければならない)で始まることを意味するものとみなされます。 結果として生じるオブジェクトのタイプのデフォルトは OMAGIC ファイルであり、 テキストの開始アドレスのデフォルトは、インクルードファイル  <scnhdr.h> で定義された SCNROUND へ丸められたエンドの古い値です。 デフォルトを使用すると、このファイルがすでに実行中のプログラムに 読み込まれたときに、ブレークの初期値も丸めなければなりません。 −A オプションへの引数を除くその他のオブジェクトはすべて −G 0 でコンパイルしなければならず、これはリンク用の −G 0 を設定します。

下記のオプションはコマンド mkshlib(1) によって使用されるもので、一般に使用するためのものではありません。

−c ターゲットの共用ライブラリオブジェクトファイルを作成します。 これは LIBMAGIC ファイル (0443フォーマット) です。 リンクされたオブジェクトは −G 0 でコンパイルしなければならず、これはリンク用の −G 0 を設定します。 このファイルは要求に応じてページングされ、ヘッダはテキストの一部ですが、 実際のテキストのページはテキストがロードされた次のページから始まります。

−i file file の .text セクションが、結果として生じるオブジェクトファイルの .init セクションに移動します。

ld および uld は、任意のバイト順序付けのヘッダおよびシンボリックテーブルとともに、 どちらかのバイト順序付けのターゲットとされるオブジェクトファイルを 受け付けます。 しかし、ヘッダおよびシンボリックテーブルが、 ld および uld が実行されているマシンのバイト順序付けをもつ場合、 ld および uld は速くなります。 ヘッダおよびシンボリックテーブルのバイト順序付けのデフォルトは、 出力オブジェクトファイルのターゲットのバイト順序付けです。 再配置できないオブジェクトファイルの場合、ヘッダおよびシンボリック テーブルのバイト順序付けのデフォルトを変更することはできません。

−EB big-endian のバイト順序付けされたヘッダおよびシンボリック情報テーブルを もつ出力オブジェクトファイルを生成します。

−EL little-endian のバイト順序付けされたヘッダおよびシンボリック情報テーブル をもつ出力オブジェクトファイルを生成します。

下記に示すオプションは主に、本来のコンパイル環境以外の NEWS-OS コンパイル環境を提供するために使用されます。

−systype name
name で指定されたコンパイル環境を使用します。 サポートされるコンパイル環境の名前は、 bsd43 と sysv です。 これは #include ファイルの標準ディレクトリ、ランタイムライブラリ、および ランタイムライブラリがサーチされる場所を変更する効果をもっています。 新しい項目は、その通常のパスに置かれますが、そのパスには /name がプリペンドされます。また、 (name を大文字にした)形式 SYSTYPE_NAME のプリプロセッサマクロがデフォルトの SYSTYPE_BSD の代わりに定義されます。

ファイル

/lib/lib∗.a
/usr/lib/lib∗.a
/usr/local/lib/lib∗.a ライブラリ
a.out出力ファイル

関連事項

cc(1), pc(1), f77(1), as(1), ar(1)

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026