                                                    更新日付: 2004 年 5 月 25 日 

Sun Studio 9: インクリメンタルリンカー Readme 

    目次
        A.はじめに 
        B.Sun Studio 9 インクリメンタルリンカーについて 
        C.新規および変更された機能 
        D.ソフトウェアの修正事項 
        E.問題点と回避策 
        F.制限事項と互換性の問題 
        G.記述の誤りの訂正 



    ------------------------------------------------------------------

    A. はじめに 

    この文書には、Sun[tm] Studio 9 インクリメンタルリンカー (ILD) に関する
    情報が記載されています。このリリースで導入された新機能、ソフトウェアの
    修正事項、既知の問題点、制限事項、互換性の問題について説明します。
    この文書の記載内容は、このリリースのマニュアルの記載内容に優先します。


    製品マニュアル 

      * リリースノート: http://docs.sun.com から入手可能です。リリースノートの
        情報は、各製品の Readme ファイルの情報に優先します。
      * Sun Studio 9 のドキュメント :
        /installation_directory/docs/ja/index.html からは、製品のマ
        ニュアルページ、README の HTML バージョン、およびマニュアル
        にアクセスできます。デフォルトの installation_directory は 
        /opt です。index.html ページから以下のマニュアルにアクセスできます。
            C コンパイラ Readme 
            C++ コンパイラ Readme 
            C ユーザーズガイド 
            C++ ユーザーズガイド 
            数学ライブラリ Readme 
            数値計算ガイド 
            Sun Performance Library Readme 
            Sun Performance Library Reference Manual 
            Sun Performance Library User's Guide 

      * IDE のドキュメント : IDE の「ヘルプ」メニューからは、Sun
        Studio 9 IDE のすべてのコンポーネントに関するオンラインヘルプ
        にアクセスできます。
      * 開発者向けリソースのポータル : 技術資料、サンプルコード、ド
        キュメント、ナレッジベースについては、開発者向けポータルの
        http://developers.sun.com/prodtech/cc を参照してください。

	この文書のテキスト版を表示するには、コマンドプロンプトで次のコマン
	ドを入力します。

            more /opt/SUNWspro/READMEs/ild

    この文書の HTML 版を表示するには、デフォルトのインストールディレク
    トリにある次のファイルにアクセスします。

       file:file:/opt/SUNWspro/docs/ja/index.html
     
    注 - Sun Studio 9 ソフトウェアが /opt 以外のディレクトリにインストール
    されている場合は、ご使用のシステムにおける実際のパスを、システム管理者に
    確認してください。


    ------------------------------------------------------------------

    B. Sun Studio 9: インクリメンタルリンカーについて 

    このリリースの ILD は、Solaris[tm] オペレーティングシステム 
    SPARC(R) プラットフォーム版のバージョン 8、9、10 Beta と、
    Solaris オペレーティングシステム x86 プラットフォーム版のバージョン
    8、9、10 Beta で利用できます。 

    注 - この文書では、Pentium、Pentium Pro、Pentium II、
    Pentium II Xeon、Celeron、Pentium III、Pentium III Xeon プロセッサ
    および、これらと互換性のある AMD および Cyrix 製のマイクロプロセッ
    サチップを含む、Intel 32 ビットプロセッサアーキテクチャを総称して 
    Intel アーキテクチャ (IA) と呼んでいます。 


    ------------------------------------------------------------------

    C. 新規および変更された機能

    ここでは、このリリースの ILD で新たに追加された機能と変更された機
    能を説明しています。 

    ここで紹介するマニュアルは、http://docs.sun.com から入手可能です。

      * ILD は、リンカースコープをサポートします。このサポートは、『C 
        ユーザーズガイド』と『C++ ユーザーズガイド』で説明しているよう
        に特殊な宣言指定子を使用するか、あるいは -xldscope コンパイラ
        オプションで有効にします。 

      * ILD は、ソースブラウザ情報を DWARF 形式でサポートします。この
        サポートは、.stab.sbfocus セクションと .stab.sbfocusstr セク
        ションを出力実行可能ファイルにリンクすることによって有効にしま
        す。 
        DWARF 形式の詳細は、『C ユーザーズガイド』または cc(1) の 
        -xdebugformat を参照してください。 

      * ILD は、SPARC プラットフォーム用に改良された ILD 変数を通して
        スレッドローカルストレージをサポートします。 
        スレッドローカルストレージの詳細は、『C ユーザーズガイド』およ
        び『C++ ユーザーズガイド』の宣言指定子に関する説明や、
        -xthreadvar コンパイラオプションの説明などを参照してください。


    ------------------------------------------------------------------

    D. ソフトウェアの修正事項

    ここでは、次のソフトウェアの修正事項について説明します。

      * 4783169 
        ILD は、入力ファイルの更新、リンク、および 2 度目の更新がすべ
        て同時に起きるという状況を避けるように更新されました。 このよ
        うな状況が起きると、st_mtime が変更されないままとなり、ILD は
        入力ファイルの 2 度目の更新の検出に失敗します。 

      * 4754134 
        ILD は、.stab.index%* セクションの N_OBJ スタブの数について不
        正な前提 (不正な comdat スタブを引き起こす) を下さないように更
        新されました。 

      * 4695562 
        ILD は、割り当て不可能なセクションシンボルの再配置を確実に行え
        るように更新されました。 


    ------------------------------------------------------------------

    E. 問題点と回避策

    ここでは、これまでに判明しているソフトウェアの問題点と、それらの
    回避策について説明します。最新情報およびパッチについては、
    開発者向けポータルの http://developers.sun.com/prodtech/cc を
    参照してください。

      * ILD は現在、レジスタシンボル定義に対して追加のみのポリシーをサ
        ポートしています。 このポリシーは、入力ファイルにレジスタシン
        ボルが使用されていて、そのファイルが変更された場合は、ILD がフ
        ルリンクを実行することを意味します。 

      * -g 以外の最適化レベルでコンパイルすると、レジスタシンボルが使
        用されることがあります。 このため、-g でコンパイルしなかったプ
        ログラムでリンカーが使用された場合、 ILD のメリットをすべて得
        られるよう注意が必要です。 

      * ILD は、アーカイブライブラリの入力ファイルのタイムスタンプに基
        づいて、更新されたファイルを特定します。 同じシンボルについて
        複数の定義がライブラリに存在しない場合、ILD は正しく動作します
        ただし、1 つまたは複数のライブラリに同一シンボルの複数の定義が
        存在する場合、ILD に混乱が生じることがあります。 このような場
        合、ILD は、何もメッセージを出さずに、不正なプログラムを生成す
        ることがあります。 

        -m オプションは標準出力にメモリーマップを生成しますが、致命的
        エラーにはならない重複回定義されているシンボルのリストが生成さ
        れません。 

        アーカイブファイルから入力ファイルを抽出して、インクリメンタル
        実行可能ファイルにリンクすると、その入力ファイルへの参照がすべ
        て削除されても、次に初期リンクを実行するまで、入力ファイルが実
        行可能ファイル内に残ったままになります。 次の例では、1 度目の
        リンクでは myfunc1 と myfunc2 を参照しています。 one.o と 
        two.o はアーカイブから正しく抽出されます。 このセクション末の
        コード例を参照してください。 

        % cc -c main1.c main2.c one.c two.c 
        % ar cr libfoo.a one.o two.o 
        % rm -f a.out
        % cp main2.o main.o # myfunc1 と myfunc2 のリンク
        % cc -xildon main.o libfoo.a # 最初のリンク (初期リンク)
        % ./a.out
        Calling myfunc1!
        myfunc1 called!
        Calling myfunc2!
        myfunc2 called!
        % nm a.out | grep myfunc
        [59]    |    68912|      32|FUNC |GLOB|0    |8     |myfunc1
        [60]    |    68960|      32|FUNC |GLOB|0    |8     |myfunc2
          

        2 回目のリンクでは、myfunc2 は参照されず、実行可能ファイル内 (
        および two.o で定義されているその他のすべてのシンボル) に残っ
        ています。 ここでa.out を削除すると、強制的に初期リンクが実行
        され、3 回目のリンクに示されているように、myfunc2 がなくなりま
        す。 

        % cp main1.o main.o          # myfunc2 は参照されていない
        % cc -xildon main.o libfoo.a # 2 番目のリンク (増分リンク)
        % ./a.out
        Calling myfunc1
        myfunc1 called!
        % nm a.out | grep myfunc 
        [59]    |    68912|      32|FUNC |GLOB|0    |8     |myfunc1
        [60]    |    68960|      32|FUNC |GLOB|0    |8     |myfunc2


               # a.out を削除すると問題が解決する

        % rm a.out                     # 新しい初期リンクを強行設定
        % cc -xildon main.o libfoo.a   # 3 番目のリンク (初期リンク)
        % nm a.out | grep myfunc
        [58]    |    68832|      32|FUNC |GLOB|0    |8     |myfunc1
          

        このような問題が発生する可能性があるケースを説明します。 

        two.o で定義しているいくつかのシンボルが、プログラム内の別の場
        所でも定義されている状態で two.o を取り込むと、不正な定義また
        は重複定義シンボルエラーになります。 

        a.out を検査する dbx などのツールは、two.o が含まれていること
        を検出します。 たとえば、2 回目のリンクで生成されたファイルに
        対して dbx を実行すると、 myfunc2 内での停止を要求することがで
        きます。 これは重大な問題ではありませんが、混乱を招く可能性が
        あります。 

        階層式のエラーが発生することもあります。 すなわち、アーカイブ
        ライブラリのその他の入力ファイル内にあるシンボルへの唯一の参照
        が、two.o に含まれていることがあります。 この場合は、不必要に
        多くの入力ファイルが抽出されることになります。 こうした新しい
        アーカイブライブラリでも、上記のいずれかの問題が発生する可能性
        があります。 

        プログラムコード例: 
        % cat main1.c
        #include <stdio.h>
        extern void myfunc1(void);

        int main(void)
        {
               (void)printf("Calling myfunc1\n"); myfunc1();
               return 0;
        }

        % cat main2.c
        #include <stdio.h>

        extern void myfunc1(void), myfunc2(void);

        int main(void)
        {

               (void)printf("Calling myfunc1!\n"); myfunc1();
               (void)printf("Calling myfunc2!\n"); myfunc2();
               return 0;
        }

        % cat one.c
        #include <stdio.h>

        void myfunc1(void)
        {
               (void)printf("myfunc1 called!\n");
        }

        % cat two.c
        #include <stdio.h>

        void myfunc2(void)
        {
               (void)printf("myfunc2 called!\n");
        }
     



    ------------------------------------------------------------------

    F. 制限事項と互換性の問題

    ここでは、制限事項およびシステムまたはその他のソフトウェアとの互換
    性の問題について説明します。最新情報については、http://docs.sun.com 
    から入手可能なリリースノートを参照してください。リリースノートの情報は、
    各製品の Readme ファイルの情報に優先します。 



    ------------------------------------------------------------------

    G. 記述の誤りの訂正

    現時点では新しい情報はありません。



    ------------------------------------------------------------------

    Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use
    is subject to license terms.

