                                               更新日付: 2003 年 3 月 28 日

 Sun[tm] ONE Studio 8: C コンパイラ Readme

     目次

       A. はじめに
       B. Sun ONE Studio 8、C コンパイラについて
       C. 新規および変更された機能
       D. ソフトウェアの修正事項
       E. 問題点と回避策
       F. 制限事項と互換性の問題
       G. 記述の誤りの訂正



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

     A. はじめに

     この文書では、Sun Open Net Environment (Sun ONE) Studio 8、
     Compiler Collection に関する情報を提供します。 また、この文書では
     今回のリリースで提供される新機能やソフトウェアの修正事項について解
     説するとともに、既知の問題や制限事項、および互換性の問題について説
     明しています。この文書の記載内容はこのリリースのマニュアルの記載内
     容に優先します。

     製品マニュアル

        * リリースノート: http://docs.sun.com/ で入手できます。。 この
          リリースノートの情報は、各製品の Readme ファイルの情報よりも
          優先します。
        * Compiler Collection のマニュアル: 製品のマニュアルページ、
          HTML 版の Readme、およびマニュアルは、
          /opt/SUNWspro/docs/ja/index.html で入手できます。
        * Compiler Collection 開発者向けリソースポータル: 技術解説、
          Compiler Collection 関連のドキュメント、知識ベースなどについ
          ては、 Compiler Collection Developer Resources Portal (英語)
          を参照してください。

     注 - Compiler Collection ソフトウェアがデフォルトの /opt 以外のデ
     ィレクトリにインストールされている場合は、システム上の対応するパス
     をシステム管理者に確認してください。 このマニュアル索引からアクセ
     スできる C マニュアルは以下のとおりです。

        * C コンパイラ Readme
        * C ユーザーズガイド
        * 数学ライブラリ Readme
        * 数値計算ガイド
        * インクリメンタルリンカー Readme
        * Sun Performance Library Readme
        * Sun Performance Library Reference Manual
        * Sun Performance Library User's Guide

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

        cc -xhelp=readme

     この文書の HTML 版を表示するには、次のファイルにアクセスします。

          file:/opt/SUNWspro/docs/ja/index.html

     注 - Sun ONE Studio 8 ソフトウェアが /opt 以外のディレクトリにイン
     ストールされている場合は、システム管理者に実際のパスをお尋ねくださ
     い。



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

     B. C コンパイラについて

     このリリースの Sun ONE Studio 8, Compiler Collection C Compiler
     は、Solaris[tm] オペレーティング環境 (SPARC (R); プラットフォーム
     版) バージョン 7、8、および 9 と Solaris オペレーティング環境 (x86
     プラットフォーム版) バージョン 7、8、および 9 で利用できます。

     このコンパイラは、次の各規格に準拠しています。

        * ISO/IEC 9899:1990, Programming Languages - C 規格
        * FIPS 160 規格

     このコンパイラはまた、次の規格の言語機能も一部サポートしています。

        * ISO/IEC 9899:1999, Programming Languages - C

     今回の開発リリースの 64 ビット SPARC アーキテクチャ機能は、C の国
     際規格 と -xarch=v9 に対応しています。



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

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

     ここでは、このリリースで C コンパイラの新しく追加された機能と変更
     された機能について説明します。Sun ONE Studio 8 のその他のコンポー
     ネントについては、『Sun ONE Studio 8 の新機能』を参照してくださ
     い。ローカルシステムまたはネットワーク上でこのマニュアルにアクセス
     するには、file:/opt/SUNWspro/docs/ja/index.html を開いてください。
     http://docs.sun.com にも同じマニュアルが掲載されています。

     全般的な機能拡張
     リンカーマップファイルを必要としない変数スコープ: -xldscope
     C99 の追加機能の実装
     -xvis による VIS[tm] Developers Kit のサポート (SPARC)
     スレーブスレッドの大きなデフォルトスタック
     改良された -xprofile (SPARC)
     UTF-16 文字列リテラルのコンパイラサポートと lint サポート :-xustr
     、-Xustr

     より高速なコンパイル
     -xprofile_ircache による高速なプロファイリング (SPARC)
     プリコンパイル済みヘッダー、-xpch
     -xjobs=n による複数プロセッサの使用 (SPARC)

     パフォーマンスの向上
     リンカーによってサポートされる、データのスレッドローカルな記憶領域
     を使用した実行時性能の向上:-xthreadvar (SPARC)
     ページフォルトを減らすことにより実行時パフォーマンスを向上: -xF
     -xlinkopt によるランタイムの向上 (SPARC)
     -xpagesize=n によるランタイムの向上 (SPARC)
     -xhwcprof によるハードウェアカウンタによるプロファイリング (SPARC)

     容易なデバッグ
     -xdebugformat による Dwarf フォーマットのデバッガ情報
     OpenMP プログラムのデバッグのサポート:-xopenmp=noopt

     ------------------------------------------------------------------
     リンカーマップファイルを必要としない変数スコープ: -xldscope

     今回のリリースでは、動的ライブラリ内のシンボルのエクスポートを制御
     するのに 2 種類の方法を利用できるようになりました。この機能はリン
     カースコープと呼ばれ、最近になってリンカーマップファイルによってサ
     ポートされるようになったものです。まず、このリリースからはコード内
     に新しい宣言指定子を埋め込むことができるようになりました。__global
     、__symbolic、および __hidden をコード内に直接埋め込めばよく、マッ
     プファイルを使用する必要がありません。もう 1 つの方法は、コマンド
     行で -xldscope を指定することによって変数スコープのデフォルト設定
     を上書きするものです。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -xldscope を参照してください。宣言指定子について
     は、『C ユーザーズガイド』の第 2 章「Sun の実装に固有の C コンパイ
     ラ情報」に詳しく述べられています。

     C99 の追加機能の実装

     Sun ONE Studio 8 C コンパイラ実装は、以下の ISO/IEC 9899:1999 (こ
     の文書では C99 と呼んでいる) 機能をサポートします。ここでは、項目
     ごとに C99 規格の条項番号を示します。

        * 6.2.5 条: _Bool
        * 6.2.5 条: _Complex type
          このリリースでは _Complex を部分的に実装しています。Solaris
          7、8、および 9 で -lcplxsupp とリンクする必要があります。
          _Complex データの静的な初期化はまだ機能しません。
        * 6.3.2.1 条: 左辺値に限定されない、配列のポインタへの変換
        * 6.4.4.2 条: 16 進浮動小数点リテラル
        * 6.5.2.5 条: 複合リテラル
        * 6.7.2 節: _Imaginary 型
        * 6.10.6 節: STDC プラグマ
        * 6.10.8 節: __STDC_IEC_559 マクロと __STDC_IEC_559_COMPLEX マ
          クロ

     詳細は、Sun ONE Studio 8 Compiler Collection『C ユーザーズガイド』
     の付録 E「Supported Features of C99」と付録 B「ABI Extensions for
     1999 ISO/IEC C」を参照してください。

     -xvis による VIS[tm] Developers Kit のサポート (SPARC)

     VIS 命令セット Software Developers Kit (VSDK) で定義されているアセ
     ンブリ言語テンプレートを使用している場合は、-xvis=[yes|no] オプシ
     ョンを使用してください。デフォルトは -xvis=no です。

     VIS 命令セットは、SPARC v9 命令セットの拡張機能です。 UltraSPARC
     プロセッサは 64 ビットですが、さまざまなケースがあり、特にマルチメ
     ディアアプリケーションではデータサイズが 8 ビットまたは 16 ビット
     に限定されることがあります。VIS 命令は 1 つの命令で 4 つの 16 ビッ
     トデータを処理できるため、イメージング、線形代数、シグナル処理、オ
     ーディオ、ビデオ、ネットワーキングなどのようなニューメディアを処理
     するアプリケーションのパフォーマンスを大幅に向上させます。

     VSDK についての情報は、http://www.sun.com/processors/vis を参照し
     てください。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -xvis を参照してください。

     スレーブスレッドの大きなデフォルトスタック

     スレーブスレッドのデフォルトのスタックサイズは、このリリースで拡大
     されました。すべてのスレーブスレッドは同じスタックサイズを持ちます
     (32 ビットアプリケーションは 4MB、64 ビットアプリケーションは 8MB
     がデフォルト)。このサイズは、STACKSIZE 環境変数で設定されます。

     詳細は、Sun ONE Studio 8 Compiler Collection『C ユーザーズガイド』
     の第 3 章「Sun C コードの並列化」を参照してください。

     改良された -xprofile (SPARC)

     -xprofile オプションは次のように改良されました。

        * 共有ライブラリのプロファイリングのサポート
        * -xprofile=collect -mt による、スレッドに対して安全なプロファ
          イル収集
        * 1 つのプロファイルディレクトリ内の複数のプログラムまたは共有
          ライブラリをプロファイリングするようにサポートを向上

     -xprofile=use を使用することで、コンパイラは一意ではないベース名を
     持つ複数のオブジェクトファイルのデータが保存されたプロファイルディ
     レクトリでプロファイルデータを見つけることができるようになりまし
     た。コンパイラがオブジェクトファイルのプロファイルデータを検出でき
     ない場合は、コンパイラは新しいオプション
     -xprofile_pathmap=collect-prefix: use-prefix を提供します。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -xprofile と -xprofile_pathmap を参照してくださ
     い。

     UTF-16 文字列リテラルのコンパイラサポートと lint サポート :-xustr
     、-Xustr

     オブジェクトファイル内で UTF-16 文字列に変換させたい文字列リテラル
     がコードに含まれる場合は、-xustr=ascii_utf16_ushort を指定してくだ
     さい。このオプションを指定すると、U"ASCII_string" 文字列リテラルは
     符号なし short 整数として認識されます。

     詳細は、cc(1) の -xustr または lint(1) の -Xustr を参照してくださ
     い。また、Sun ONE Studio 8 Compiler Collection『C ユーザーズガイ
     ド』の第 5 章「lint ソースコード検査プログラム」または付録 A も参
     照してください。

     -xprofile_ircache による高速なプロファイリング (SPARC)

     収集フェーズで保存されたコンパイルデータを再使用することによって使
     用フェーズのコンパイル時間を短縮させたい場合は、
     -xprofile_ircache[=path] と -xprofile=collect|use を併用してくださ
     い。

     大きなプログラムの場合は、中間データが保存されるため、使用フェーズ
     のコンパイル時間が大幅に短縮されます。データを保存することでディス
     ク容量の要件が相当拡大する可能性があることに注意してください。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -xprofile_ircache を参照してください。

     プリコンパイル済みヘッダー、-xpch

     このコンパイラリリースでは、プリコンパイル済みヘッダーという新機能
     を提供しています。プリコンパイル済みヘッダーファイルは、大容量のソ
     ースコードを持つ共通のインクルードファイルセットをソースファイルが
     共有している場合にアプリケーションのコンパイル時間を短縮するために
     使用されます。これは、1 つのソースファイルから一連のヘッダーファイ
     ルに関する情報を収集し、そのソースファイルを再コンパイルする場合
     や、同じヘッダー群を持つほかのソースファイルをコンパイルする場合に
     その情報を使用するという方法で行われます。この機能は、-xpch オプシ
     ョンと -xpchstop オプションを #pragma hdrstop 指令と併用することで
     利用できます。

     詳細は、cc(1) の -xpch オプションと -xpchstop オプションを参照して
     ください。Sun ONE Studio 8 Compiler Collection『C ユーザーズガイ
     ド』でも、これらのオプションと #pragma hdrstop の詳細が示されてい
     ます。

     -xjobs=n による複数プロセッサの使用 (SPARC)

     -xjobs=n オプションは、作業を行うためにコンパイラが作成するプロセ
     スの数を設定するために指定します。このオプションは、マルチ CPU マ
     シンにおけるビルド時間を短縮する効果があります。現在、-xjobs は
     -xipo オプションとの併用でしか機能しません。-xjobs=n を指定する
     と、相互手続きオプティマイザはさまざまなファイルをコンパイルするた
     めに呼び出すことができるコードジェネレータインスタンスの最大数とし
     て n を使用します。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -xjobs を参照してください。

     リンカーによってサポートされる、データのスレッドローカルな記憶領域
     を使用した実行時性能の向上:-xthreadvar (SPARC)

     新しいスレッドローカルな記憶領域機能にはリンカーによってサポートさ
     れます。次の作業に使用してください。

        * スレッド固有のデータを割り当てるため POSIX インタフェースの高
          速実装を利用する
        * マルチプロセスプログラムをマルチスレッドプログラムに変換する
        * スレッドローカルストレージを使用している Windows アプリケーシ
          ョンを Solaris に移植する
        * OpenMP で thread private 変数の高速実装を利用する

     このリリースのコンパイラでは、スレッドローカル変数の宣言を通してス
     レッドローカルストレージを使用できます。この宣言には、変数指定子
     __thread の追加による通常の変数宣言と、コマンド行オプション
     -xthreadvar による宣言があります。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -xthreadvar を参照してください。宣言指定子につい
     ては、『C ユーザーズガイド』の第 2 章「Sun の実装に固有の C コンパ
     イラ情報」で詳しく説明しています。

     ページフォルトを減らすことにより実行時パフォーマンスを向上: -xF

     この新機能 -xF は、リンカーによる変数と関数の並べ替えを最適にする
     ために使用します。この機能を使用すると、実行時のパフォーマンスに悪
     影響を与える次のような問題を解決しやすくなります。

        * メモリー内で隣接している関連性のない複数の変数によって起きる
          キャッシュ競合とページ競合
        * メモリー内で隣接していない関連性のない変数によって起きる不必
          要に大きな作業セット
        * 有効なデータの密度を下げる weak 変数の未使用コピーによって起
          きる不必要に大きな作業セット

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -xF を参照してください。

     -xlinkopt によるランタイムの向上 (SPARC)

     -xlinkopt オプションを指定することで、C コンパイラは再配置可能なオ
     ブジェクトファイルに対してリンク時の最適化を実施できるようになりま
     した。cc(1) を参照してください。

     -xlinkopt を指定すると、リンク時にコンパイラはリンクされている .o
     ファイルを変更することなく付加的な最適化を実施します。 この最適化
     が出現するのは、実行可能プログラム内だけです。-xlinkopt オプション
     は、プログラム全体のコンパイルに使用する場合と、プロファイルフィー
     ドバックを伴う場合にもっとも効果的です。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -xlinkopt を参照してください。

     -xpagesize=n によるランタイムの向上 (SPARC)

     -xpagesize=n オプションは、スタックとヒープのページサイズを設定す
     る場合に使用します。n には、8K、64K、512K、4M、32M、256M、2G、16G
     、または default を指定できます。対象プラットフォームの Solaris オ
     ペレーティング環境に有効なページサイズ (getpagesize(3C) で表示され
     るサイズ) を指定してください。有効なページサイズを指定しないと要求
     は実行時に無視され、それを知らせるメッセージは表示されません。対象
     プラットフォームのページサイズは、pmap(1) または meminfo(2) で確認
     できます。

     このオプションは、-xpagesize_stack と -xpagesize_heap のマクロで
     す。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -xpagesize、-xpagesize_heap、および
     -xpagesize_stack を参照してください。

     -xhwcprof によるハードウェアカウンタによるプロファイリング (SPARC)

     -xhwcprof=[enable|disable] オプションは、ハードウェアカウンタによ
     るプロファイリングのコンパイラサポートを有効にする場合に使用しま
     す。

     -xhwcprof を有効にすると、コンパイラは、ハードウェアカウンタのデー
     タの参照と、失敗イベントおよびそれに関連する命令とを、ツールが照合
     するのに役立つ情報を生成します。シンボリック情報 と共に、対応する
     データ型や構造体メンバーも特定する場合があります (-g で生成)。コー
     ドアドレス、ソースステートメント、ルーチンなどにもとづくプロファイ
     ルからはこの情報を簡単に特定できないため、この情報はパフォーマンス
     分析に便利です。

     ハードウェアカウンタベースのプロファイリングについての詳細は、『
     Program Performance Analysis Tools』を参照してください。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーガイド』の -xhwcprof を参照してください。

     -xdebugformat による Dwarf フォーマットのデバッガ情報

     DWARF Debugging Information Format に示されているように、C コンパ
     イラはデバッガ情報のフォーマットを stabs フォーマットから dwarf フ
     ォーマットに移行しています。デバッグ情報を読み取るソフトウェアを保
     持している場合は、ツールを stabs フォーマットから dwarf フォーマッ
     トに移行させることができます。このリリースのデフォルト設定は、
     -xdebugformat=stabs です。

     -xdebugformat=dwarf オプションは、ツールを移植するために新しいフォ
     ーマットにアクセスする手段として使用してください。 このオプション
     は、デバッガ情報を読み取るソフトウェアを保持していない場合や、使用
     しているツールでこれらのフォーマットにデバッガ情報を必要としない場
     合には、使用する必要はありません。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -debugformat を参照してください。

     OpenMP デバッグのサポート:-xopenmp=noopt

     dbx を使用して OpenMP プログラムをデバッグする場合は、並列領域でブ
     レークポイントを設定して変数のコンテンツを表示できるように、-g と
     -xopenmp=noopt でコンパイルしてください。

     詳細は、cc(1) または Sun ONE Studio 8 Compiler Collection『C ユー
     ザーズガイド』の -xopenmp を参照してください。



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

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

     -xdepend の新しい引数

     (SPARC)

     このリリースでは、-xdepend オプションは新しい 2 つの引数、
     -xdepend=[yes|no] のいずれか 1 つをとるようになりました。

     -xdepend=yes はデフォルトであり、データの依存性を確認するためにコ
     ンパイラがループを分析することを意味します。-xdepend=no は、データ
     の依存性を確認するためのループ解析をコンパイラが行わないことを意味
     します。



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

     E. 問題点と回避策

     ここでは、これまでにわかっているソフトウェアの問題点とその回避策に
     ついて説明します。更新情報については、Updated Technical
     Information のページ
     http://sun.co.jp/software/sundev/suncc/hotnews.html を参照してくだ
     さい。



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

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

     ここでは、各種制限事項やシステムおよび他のソフトウェアとの互換性の
     問題について説明しています。この Sun ONE Studio 8 リリースの最新情
     報については、『Sun ONE Studio 8 リリースノート』を参照してくださ
     い。 リリースノートは、Sun ONE Studio 8 CD の
     /cdrom/ml_devpro_v10n1_sparc/docs/ja/release_notes.html に HTML フ
     ァイル形式で含まれています。 リリースノートは、Sun ONE Studio 8
     Web サイトのマニュアル索引ページ
     http://sun.co.jp/software/sundev/suncc/documentation から入手できます。

        * No. 4832526: -xhwcprof
          {-xparallel,-xautopar,-xexplicitpar,-xopenmp} による不正な IR
          ヘッダー

          example%cc xloopinfo_1.c -V -xO3 -xparallel -xhwcprof -xdebugformat=
          dwarf -Wc,-xyz -lm
          cc: Sun C 5.5 2003/03/09
          acomp: Sun C 5.5 2003/03/09
          iropt: Sun Compiler Common 7.1 2003/03/09
          compiler(iropt) error: IR version = 4.0.0, expected 6.0.1
          cc: iropt failed for xloopinfo_1.c
          example%

        * No. 4829700: 最適化でリンカースコープテスト ldscope_pos1 が失
          敗する
          x86 で -xldscope=hidden または -xldscope=symbolic を指定する
          と、最適化 -O または -xO[1|2| 3|4|5] で -xldscope オプション
          が機能しません。

        * No. 4829392: tls + データのフラグメント化 + 最適化は、Sun ONE
          Studio 8 の C コンパイルでまだサポートされていない

        * No. 4826993: SunONE 8 コンパイラでC プログラムの単純なセグメ
          ント例外が発生する

          CC=/opt/SunONE8/SUNWspro/bin/cc
          CFLAGS= -xarch=v8plusa -xO0
          bug: bug.c
                 $(CC) $(CFLAGS) -o $@ $^

          struct data {
                  int pad;
                  struct data *next;
          };

          static void
          bug(struct data conf)
          {
                  struct data ov = *conf.next;
          }

          int
          main(int argc, char **argv)
          {
                  struct data ret;

                  ret.next = &ret;
                  bug(ret);
                  return 0;
          }

        * No. 4775273 - OPENMP:並列ループの反復ごとに実行しないと
          ORDERED が失敗する

          並列 for またはワークシェアリング for コンストラクトの動的範
          囲内に順序付けられた指令は、for ループのすべての反復で実行さ
          れる必要があります。for ループの実行に複数のスレッドが使用さ
          れると、プログラムはハングアップします。

          次の例で考えてみます。この例では、順序付けられた指令により並
          列 for コンストラクトをインクルードします。順序付けられたこの
          命令は、for ループの繰り返し回数 30 でのみ実行されます。for
          ループの実行に複数のスレッドが使用されると、プログラムはハン
          グアップします。

          #include <omp.h>
          #include <stdio.h>

          int main(void)
          {
            #pragma omp parallel for ordered
            for (int i = 1; i <= 30; i++) {
              if (i == 30) {
                #pragma omp ordered
                printf("i: %i\n", i);
              }
            }
            return 0;
          }

        * No. 4774706: コンパイル済みヘッダーに定義された静的変数は dbx
          に表示できない

        * No. 1253033: C コンパイラの -c -o オプションは、拡張子 .o 以
          外を許可しない



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

     G. 記述の誤りの訂正

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



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

     Copyright &copy 2003 Sun Microsystems, Inc., All rights reserved.
     Use is subject to license terms.
