Description: Sun[tm] ONE Studio 8: C Compiler Readme
Keywords: readme, documentation, publication,

更新日付: 2003 年 3 月 28 日

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

> #### 目次

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

> #### 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.