Oracle Solaris Studio 12.4 Man Pages

印刷ビューの終了

更新: January 2015
 
 

cc(1)

名前

cc - C コンパイラ

形式

cc   [-#] [-###] [-Aname[(tokens)]] [-ansi]
     [-B[static|dy- namic]] [-C] [-c] [-D] [-d[y|n]] [-dalign]
     [-E] [-errfmt[=[no%]error]] [-errhdr[=h]]
     [-erroff[=t[,t...]]] [-errshort[=i]] [-errtags=a]
     [-errwarn[=t[,t...]]] [-fast] [-fd] [-features=[a]]
     [-flags] [-flteval[={any|2}]] [-fma[={none|fused}]]
     [-fnonstd] [-fns=[no|yes]] [-fopenmp] [-fprecision=p]
     [-fround=r] [-fsimple[=n]] [-fsingle] [-fstore]
     [-ftrap[=t[,t...]]] [-G] [-g] [-g[n]] [-H] [-hname]
     [-I[-|dir]] [-i] [-include] [-KPIC] [-Kpic] [-keeptmp]
     [-Ldir] [-lname] [-library=sunperf] [-m32|-m64] [-mc]
     [-misalign] [-misalign2] [-mr[,string]] [-mt] [-native]
     [-nofstore] [-O] [-On] [-ofilename] [-P] [-p]
     [-pedantic{=[yes|no]}] [-preserve_argvalues[=int|none]]
     [-Qoption phase [,option...]] [-Q[y|n]] [-qp]
     [-Rdir[:dir...]] [-S] [-s] [-staticlib=[no%]sunperf]
     [-std=value] [-temp=path] [-traceback[=list]] [-Uname]
     [-V] [-v] [-Wc,arg] [-w] [-X[c|a|t|s]] [-Xlinker arg]
     [-xaddr32[={yes|no}]] [-xalias_level[=a]]
     [-xanalyze={code|no}] [-xannotate] [-xarch=a]
     [-xautopar] [-xbinopt={a}] [-xbuiltin[=a]] [-xCC]
     [-xc99[=o]] [-xcache=c] [-xchar[=o]]
     [-xchar_byte_order[=o]] [-xcheck=n] [-xchip=c]
     [-xcode=v] [-xcsi] [-xdebugfor- mat=[stabs|dwarf]]
     [-xdebuginfo=a[,a...]] [-xdepend[={yes|no}]]
     [-xdryrun] [-xdumpmacros[=v[,v...]]] [-xe] [-xF[=v]]
     [-xglobalize[={yes|no}]] [-xhelp=f]
     [-xhwcprof[={enable|disable}]] [-xinline=[v[,v...]]]
     [-xinline_param=a[,a[,a]...]] [-xinline_report[=n]]
     [-xinstrument=[no%]datarace] [-xipo[=n]]
     [-xipo_archive[=a]] [-xipo_build=[yes|no]]
     [-xivdep[=p]] [-xjobs={n|auto}]
     [-xkeep_unref[={[no%]funcs,[no%]vars}]]
     [-xkeepframe[=p]] [-xlang=language] [-xldscope=[v]]
     [-xlibmieee] [-xlibmil] [-xlibmopt] [-xlicinfo]
     [-xlinkopt[=level]] [-xloopinfo] [-xM] [-xM1] [-xMD]
     [-xMF] [-xMMD] [-xMerge] [-xmaxopt[=v]] [-xmemalign=ab]
     [-xmodel=[a]] [-xnolib] [-xnolibmil] [-xnolibmopt]
     [-xnorunpath] [-xOn] [-xopenmp[=i]] [-xP]
     [-xpagesize=n] [-xpagesize_heap=n] [-xpagesize_stack=n]
     [-xpatchpadding[={fix|patch|size}]] [-xpec] [-xpch=v]
     [-xpchstop] [-xpentium] [-xpg] [-xprefetch[=val[,val]]]
     [-xprefetch_auto_type=[a] [-xprefetch_level=l]
     [-xprevise={yes|no}] [-xprofile=p] [-xprofile_ircache[=path]]
     [-xprofile_pathmap=collect_prefix:use_prefix]
     [-xreduction] [-xregs=r[,r...]] [-xrestrict[=f]]
     [-xs[={yes|no}]] [-xsafe=mem] [-xsegment_align=n] [-xsfpconst] 
     [-xspace] [-xstrconst] [-xtarget=t] [-xtemp=path]
     [-xthreadvar[=o] [-xthroughput[={yes|no}]] [-xtime]
     [-xtransition] [-xtrigraphs[=[yes|no]]
     [-xunboundsym={yes|no}] [-xunroll=n]
     [-xustr={ascii_utf16_ushort|no}] [-xvector[=a]] [-xvis]
     [-xvpara] [-Yc,dir] [-YA,dir] [-YI,dir] [-YP,dir]
     [-YS,dir] [-Zll]

説明

Oracle Solaris Studio 12.4 C コンパイラバージョン 5.13。

このマニュアルページでは、Oracle Solaris Studio 12.4 リリースの C コンパイラで使用可能なオプションまたはフラグについて説明します。

このリリースの完全なドキュメントは、Oracle Technical Network (OTN) Solaris Studio の Web サイトで入手できます。

http://oracle.com/technetwork/server-storage/solarisstudio

OTN Web サイトには Oracle Solaris Studio の完全なリソースがあり、ベストプラクティス、さまざまなプログラミングテクノロジの詳細、およびその他のトピックからなる多数の技術的な記事が含まれています。

Oracle Solaris Studio スイートのすべての新機能の完全な説明については、『このリリースの新機能ガイド』を参照してください。

このマニュアルページは、定義上はクイックリファレンスです。C コンパイラとそのオプションの詳細は、『C ユーザーガイド』を参照してください。

64 ビットプラットフォーム用のコンパイル

ターゲットコンパイルのメモリーモデル (ILP32 または LP64) を指定するには、それぞれ -m32 および -m64 オプションを使用します。

-xarch オプションには、暗黙的なメモリーモデル定義が含まれなくなったため、ターゲットプロセッサの命令セットを指定するためのみに使用してください。

ILP32 モデルは、C 言語の int、long、およびポインタデータ型がすべて 32 ビット拡張であることを指定します。long およびポインタデータ型を指定する LP64 モデルは、すべて 64 ビット拡張です。Oracle Solaris および Linux OS は、LP64 メモリーモデルの大きなファイルや大きな配列もサポートします。

-m64 を使用してコンパイルを行う場合、結果の実行可能ファイルは、64 ビットカーネルを実行する Oracle Solaris OS または Linux OS の 64 ビット SPARC または x86 プロセッサでのみ動作します。64 ビットオブジェクトのコンパイル、リンク、および実行は、64 ビット実行をサポートする Oracle Solaris または Linux OS でのみ行うことができます。

x86 の特記事項

x86 の Oracle Solaris プラットフォーム用にコンパイルする場合は、注意する必要がある重要な問題がいくつかあります。

-xarchssesse2、sse2a、または sse3 以上に設定してコンパイルされたプログラムは、それらの拡張機能が備わったプラットフォームでのみ実行する必要があります。

このリリースでは、デフォルトの命令セットおよび -xarch=generic の意味が sse2 に変更されました。ターゲットプラットフォームオプションを指定せずにコンパイルすると、古い Pentium III または以前のシステムと互換性がない sse2 バイナリが生成されます。

コンパイルとリンクを別々に行う場合は、必ずコンパイラを使ってリンクし、同じ -xarch 設定で正しい起動ルーチンがリンクされるようにしてください。

-xarch=pentium_pro または -xarch=sse での数値の結果は、x86 の 80 ビットの浮動小数点レジスタの影響で、SPARC での結果と異なる場合があります。この差を最小にするには、-fstore オプションを使用するか、デフォルトの -xarch=sse2 を指定してコンパイルします。

組み込み数学ライブラリ (sin(x) など) が異なるため、Oracle Solaris と Linux の間でも数値結果が異なることがあります。

バイナリの互換性の妥当性検査

Oracle Solaris 10 リリース以降では、リンカーは実行時のハードウェアプラットフォームに対するバイナリオブジェクトの互換性を自動的に確認しています。

特殊化された -xarch ハードウェアフラグを使用してコンパイルおよび作成されたプログラムバイナリは、適切なプラットフォームで実行されているかどうかが OS によって検証されます。特殊化された -xarch オプションでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外や明示的な警告メッセージなしの不正な結果が発生することがあります。

ただし、Linux ではそのような検証は行われません。古いハードウェアプラットフォームの Oracle Solaris Studio のコンパイラでコンパイルされたバイナリオブジェクトを実行すると、ランタイムエラーになることがあります。Linux では、それらのバイナリを適切なハードウェアプラットフォームにデプロイすることはユーザーの責任です。

この警告は、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、SSE3 (およびそれ以降の) 命令と拡張機能を利用している __asm() アセンブラコードにも当てはまります。

C コンパイラの概要

cc (1) のマニュアルページでは、現在の Oracle Solaris オペレーティングシステムでの SVID 準拠の ISO C のコンパイラオプションについて説明しています。C コンパイラは、デフォルトでは 2011 ISO/IEC C 規格の構文の一部を認識します。サポートされる機能の詳細は、『C ユーザーガイド』を参照してください。特定のバージョンの ISO/IEC C 標準にコンパイラを制限するには、-std フラグを使用します。

cc は C コンパイルシステムへのインタフェースです。コンパイル処理には、プリプロセッサ、コンパイラ、コードジェネレータ、オプティマイザ、アセンブラ、およびリンクエディタが組み込まれています。cc は、指定されたオプションを処理してから、さまざまなコンポーネントを適切な引数で実行します。cc は複数のタイプのファイルを引数として受け入れます。

接尾辞が .c であるファイルは C ソースファイルと見なされ、プロファイリング、アセンブル、およびリンク編集のために、前処理、コンパイル、最適化、および計測を行うことができます。プリプロセッサはマクロプロセッサとしても使用できますが、その出力が有効な C コンパイラへの入力として使用できる形式となっているため、マクロプロセッサとしての使用はお勧めできません。適切なオプションを指定した場合は、任意の受け渡しが完了したあとに、コンパイル処理を停止できます。

コンパイル処理でアセンブラが実行されると、.c 接尾辞が .o 接尾辞に置き換えられて、オブジェクトファイルが現在の作業ディレクトリに生成されます。ただし、単一の C ファイルをコンパイルしてすぐにリンク編集する場合、通常、.o ファイルは削除されます。

接尾辞が .s であるファイルはアセンブリのソースファイルと見なされ、アセンブルおよびリンク編集できます。

接尾辞が .S であるファイルはアセンブリのソースファイルと見なされ、アセンブルおよびリンク編集できます。そのようなファイルはプリプロセッサ (Oracle Solaris では /usr/ccs/lib/cpp) に渡され、そのあとアセンブラに渡されます。

接尾辞が .i であるファイルは前処理された C ソースファイルと見なされ、プロファイリング、アセンブル、およびリンク編集のために、コンパイル、最適化、および計測を行うことができます。ファイル名が .c.s.S、または .i で終わっていないファイルは、リンクエディタに渡され、デフォルトの名前が a.out である動的にリンクされた実行可能ファイルが生成されます。

ライブラリを見つけるために使用されるデフォルトのディレクトリを変更する場合は、オプション -Yc, dir を参照してください。dir はコロン区切りのパスのリストです。

デフォルトのライブラリ検索順序は、-### または -xdryrun オプションを使用し、ld 呼び出しの -Y オプションを検査することで、確認できます。

ユーザー指定のデフォルトコンパイラオプション起動ファイル

これらのデフォルトコンパイラオプションファイルは、ユーザーがすべてのコンパイルに適用される (ほかの方法で上書きされる場合を除く)、一連のデフォルトオプションを指定することを許可します。たとえば、ファイルによって、すべてのコンパイルのデフォルトを -xO2 としたり、またはファイル setup.il を自動的に含めたりするように指定できます。

コンパイラは起動時に、すべてのコンパイルに含めるべきデフォルトオプションがリストされているデフォルトオプションファイルを検索します。環境変数 SPRO_DEFAULTS_PATH は、デフォルトファイルを検索するディレクトリのコロン区切りリストを指定します。

環境変数が設定されていない場合、標準のデフォルトセットが使用されます。環境変数が設定されているが空の場合、デフォルトは使用されません。

デフォルトファイルの名前は compiler.defaults の形式である必要があります。compilercc、c89、c99、CC、ftn、または lint のいずれかです。たとえば、C コンパイラ用のデフォルトは cc.defaults です。

コンパイラ用のデフォルトファイルが SPRO_DEFAULTS_PATH に一覧表示されているディレクトリ内で見つかった場合、コンパイラはコマンド行のオプションを処理する前に、このファイルを読み込んでオプションを処理します。最初に見つかったデフォルトファイルが使用され、検索は終了します。

システム管理者は、システム全体のデフォルトファイルを Studio-install-path/prod/etc/config に作成できます。環境変数が設定されている場合、インストールされたデフォルトファイルは読み取られません。

デフォルトファイルの形式はコマンド行と同様です。ファイルの各行には、1 つ以上のコンパイラオプションを空白で区切って含めてもかまいません。ワイルドカードや置換などのシェル展開は、デフォルトファイル内のオプションには適用されません。

—#、—###、および —dryrun の各オプションによって生成される詳細出力では、SPRO_DEFAULTS_PATH の値と、完全展開されたコマンド行が表示されます。

ユーザーによってコマンド行で指定されたオプションは、通常、デフォルトファイルから読み取られたオプションをオーバーライドします。たとえば、—xO4 でのコンパイルがデフォルトファイルで指定されており、ユーザーがコマンド行で —xO2 を指定した場合、—xO2 が使用されます。

デフォルトオプションファイルに記載されているオプションの一部は、コマンド行で指定されたオプションのあとに付加されます。これらは、プリプロセッサオプション —I、リンカーオプション —B、—L、—R —l、および、ソースファイル、オブジェクトファイル、アーカイブ、共有オブジェクトなどのすべてのファイル引数です。

次に示すのは、ユーザー指定のデフォルトコンパイラオプション起動ファイルがどのように使用される可能性があるかの例です。

 
demo% cat /project/defaults/cc.defaults
-fast -I/project/src/hdrs -L/project/libs -llibproj -xvpara
demo% setenv SPRO_DEFAULTS_PATH /project/defaults
demo% cc -c -I/local/hdrs -L/local/libs -lliblocal tst.c

コンパイラコマンドは次と同等になります。

 
cc -fast -xvpara -c -I/local/hdrs -L/local/libs -lliblocal \
       tst.c -I/project/src/hdrs -L/project/libs -llibproj

コンパイラデフォルトファイルはプロジェクト全体のデフォルトを設定するための便利な方法ですが、問題の診断を困難にする原因になる場合もあります。このような問題を回避するには、環境変数SPRO_DEFAULTS_PATHを現在のディレクトリではなく絶対パスに設定します。

デフォルトオプションファイルのインタフェース安定性はコミットされていません。オプション処理の順序は、将来のリリースで変更される可能性があります。

オプション

すべてのプラットフォームに共通のオプションは、すべてのプラットフォームで暗黙的に受け入れられます。この規則の例外は、個別のオプションに記述されています。

SPARC プラットフォームでのみ有効なオプションは (SPARC) と付記しています。x86/x64 プラットフォームでのみ有効なオプションは (x86) と付記しています。

非推奨のオプションは (廃止) とマークされており、今後は使用しないでください。これらは、以前のリリースとの互換性のためにのみ提供されています。代わりに示されているオプションを使用してください。

リンカーのオプションについては、ld(1) を参照してください。

通常、コンパイラオプションの処理は、左から右へと行われ、マクロオプションは、条件に応じて内容が変更されます。この規則はリンカーまたはプロセッサのオプションには適用されません。

コマンド行オプションの構文では、角括弧 ( [] ) の項目はオプションです。選択するリテラル項目をバーで区切ったリストは、{yes | no | maybe } のように、中括弧で囲まれています。値なしでフラグが表示されている場合は、通常、リストの最初の項目がデフォルト値を示しています。

たとえば、-someoption[={no|yes}] は -someoption-someoption=no と同じであることを意味します。

次のオプションが cc によって解釈されます。

-#

冗長モードをオンにして、コマンドオプションが展開された状態を示します。要素が呼び出されるごとにその要素を表示します。

-###

呼び出される各コンポーネントを表示しますが、それらのコンポーネントは実際には実行しません。また、コマンドオプションの展開内容を表示します。

-Aname[(tokens)]

#assert 前処理指令が実行されたかのように、name を述語として、指定された tokens に関連付けます。

 
Preassertions:system(unix)
          machine(sparc) (SPARC)
          machine(i386) (x86)
          cpu(sparc) (SPARC)
          cpu(i386) (x86)

これは -pedantic モードでは事前定義されません。

-A のあとにハイフン (-) だけが続く場合は、事前定義のマクロ (__ から始まるもの以外) および事前定義の表明はすべて無視されます。

-ansi

-std=c89 と同等です。

-B [static|dynamic]

リンクのためのライブラリのバインドを静的または動的のどちらにするかを指定し、ライブラリが非共有または共有のいずれであるかを示します。-lx オプションを指定すると、-B dynamic の場合、リンクエディタは libx.so という名前のファイル、libx.a という名前のファイルの順に探します。-B static の場合、リンクエディタは libx.a という名前のファイルのみを探します。このオプションは、コマンド行中で何度も指定して、切り替えることができます。

注: Oracle Solaris 64 ビットコンパイル環境では、多くのシステムライブラリ (libc など) は、動的ライブラリとしてのみ使用できます。このため、コマンド行の最後に -Bstatic を使用しないでください。

このオプションとその引数は ld に渡されます。

-C

C プリプロセッサが前処理指令の行以外のコメントを削除しないようにします。

-c

各ソースファイルの .o ファイルをリンクせずにコンパイルおよび生成します。-o オプションを使用すると、1 つのオブジェクトファイルを明示的に指定できます。コンパイラが各入力ファイルに対応するオブジェクトコードを生成する場合は、現在の作業ディレクトリにオブジェクトファイルを作成します。リンクを行わないと、オブジェクトファイルの削除も行われません。

-Dname[(arg[,arg])] [=expansion]

マクロが #define 前処理指令によって定義されるのと同様に、オプションの引数を使用してマクロを定義します。=expansion が指定されていない場合は、コンパイラは =1 であると仮定します。

 
Predefinitions:unix
            sparc (SPARC)
            sun

これは -pedantic モードでは事前定義されません。

これらの事前定義は、すべてのモードで有効です。

__BUILTIN_VA_ARG_INCR
__SUNPRO_C=0x5120
__SVR4 (Oracle Solaris)
__SunOS_5_10 (Oracle Solaris)
__SunOS_5_11 (Oracle Solaris)
__amd64 (x86 -m64)
__gnu__linux (linux)
__i386 (x86)
__linux (linux)
__linux__ (linux)
__sparc (SPARC)
__sparcv8 (SPARC)
__sparcv9 (SPARC -m64)
__sun (Oracle Solaris)
__unix
__`uname -s`_`uname -r | tr . _`
__x86_64 (x86 -m64)
linux (x86, linux)

_Restrict キーワードが使用可能であることを示すために -pedantic が指定されていない場合に、いずれかの -std フラグ値を使用して次のものが事前定義されます。

__RESTRICT

コンパイラも、次のオブジェクトのようなマクロを事前定義して、プラグマが認識されることを示します。

 
__PRAGMA_REDEFINE_EXTNAME
-d [y|n]

動的リンクを許可または禁止します。

-dy はリンクエディタに動的リンクを指定します (デフォルト)。-dn はリンクエディタに静的リンクを指定します。

このオプションとその引数は ld に渡されます。

注: このオプションを動的ライブラリと組み合わせて使用すると、致命的なエラーが発生します。ほとんどのシステムライブラリは、動的ライブラリでのみ使用できます。

-dalign

(SPARC) (廃止) このオプションは使用すべきではありません。代わりに -xmemalign=8s を使用してください。廃止されたオプションおよびフラグの完全なリストについては、『C ユーザーガイド』を参照してください。x64/x86 プラットフォームでは無視されます。

-E

ソースファイルに対してプリプロセッサのみを実行し、その出力を stdout に送ります。プリプロセッサはコンパイラ内部に直接組み込まれます。/usr/ccs/lib/cpp が呼び出される -Xs モードの場合は除きます。プリプロセッサの行番号付け情報も含みます。-P オプションも参照してください。

-errfmt[=[no%]error]

このオプションは、エラーメッセージの先頭に文字列「error:」を付けて、警告メッセージと簡単に区別できるようにする場合に使用します。接頭辞は、-errwarn によってエラーに変換された警告にも追加されます。

error

すべてのエラーメッセージに接頭辞「error:」を追加します。

no%error

エラーメッセージに接頭辞「error:」を追加しません。

このオプションを使用しない場合は、-errfmt=no%errorに設定されます。-errfmt を指定したけれども値を指定しない場合、コンパイラはそれを -errfmt=error に指定します。

-errhdr [=h]

このオプションは、ヘッダーファイルからの警告を、次のフラグによって示されるヘッダーファイルのグループに限定するために使用します。

%all

使用されているすべてのヘッダーファイルを検査します。

%none

ヘッダーファイルを検査しません。

%user

デフォルト。すべてのユーザーヘッダーファイルを検査します。/usr/include およびそのサブディレクトリ内のシステムインクルードファイルを検査しません。コンパイラによって提供されたシステムヘッダーファイルを検査しません。

-erroff[=t[,t...] ]

コンパイラの警告メッセージを抑止しますが、エラーメッセージは抑止しません。このオプションは、-errwarn でゼロ以外の終了ステータスを発生させるように指定されているかどうかにかかわらず、すべての警告メッセージに適用されます。

-erroff の値は、次の 1 つ以上の値で構成されるコンマ区切りのリストのメンバーです。

tag

tag のリストに指定されているメッセージを抑制します。-errtags=yes オプションで、メッセージのタグを表示できます。

no%tag

tag 以外のすべての警告メッセージの抑制を解除します。

%all

すべての警告メッセージを抑制します。

%none

すべてのメッセージの抑制を解除します。これはデフォルト値です。

指定順序によって実行内容が異なります。たとえば、「%all,no%tag」と指定すると、tag 以外のすべての警告メッセージを抑制します。

デフォルトは -erroff=%none で、-erroff を指定すると -erroff=%all と指定した場合と同様の結果が得られます。

-erroff オプションで無効にできるのは、C コンパイラのフロントエンドで -errtags オプションを指定したときにタグを表示する警告メッセージだけです。#pragma error_messages を使用すると、エラーメッセージの抑止を詳細に制御できます。

-errshort[=i]

このオプションは、型の不一致が見つかった際にコンパイラによって生成されるエラーメッセージに含める情報の詳細度を制御するために使用します。大きな集合体が関係する型の不一致がコンパイラで検出される場合にこのオプションを使用すると特に便利です。

i には次のいずれかを指定できます。

short

エラーメッセージは、型の展開なしの簡易形式で出力されます。集合体のメンバー、関数の引数、戻り値の型は展開されません。

full

エラーメッセージは、完全な冗長形式で出力されます。不一致の型が完全に展開されます。

tags

エラーメッセージは、タグ名がある型の場合はそのタグ名付きで出力されます。タグ名がない場合は、型は展開された形式で出力されます。

-errshort を使用しない場合は、コンパイラでは -errshort=full が指定されます。-errshort を指定したけれども値を指定しない場合、コンパイラはこのオプションを -errshort=tags に設定します。

このオプションは累積されず、コマンド行で指定された最後の値を受け入れます。

-errtags=a

C コンパイラのフロントエンドで出力される警告メッセージのうち、-erroff オプションで無効にできる、または -errwarn オプションで致命的なエラーに変換できるメッセージのメッセージタグを表示します。C コンパイラのドライバおよび C のコンパイルシステムのほかのコンポーネントから出力されるメッセージにはエラータグが含まれないため、-erroff で無効にしたり、-errwarn で致命的なエラーに変換したりすることはできません。

a には yes または no を指定できます。デフォルトは -errtags=no です。-errtags を指定することは -errtags=yes を指定することと同等です。

-errwarn[=t[,t...] ]

指定した警告メッセージが生成された場合に、致命的ステータスで C コンパイラを終了する場合は、-errwarn オプションを使用します。

t には、次の 1 つまたは複数の項目をコンマで区切って指定します。tagno%tag%all%none。このとき、順序が重要になります。たとえば、%all,no%tag と指定すると、tag 以外のすべての警告メッセージが生成された場合に、致命的ステータスを出力して C コンパイラを終了します。

C コンパイラで生成される警告メッセージは、コンパイラのエラーチェックの改善や機能追加に応じて、リリースごとに変更されます。-errwarn=%all を指定してエラーなしでコンパイルされるコードでも、コンパイラの次期リリースではエラーを出力してコンパイルされる可能性があります。

-errwarn オプションを使用して、障害ステータスで C コンパイラを終了するように指定できるのは、C コンパイラのフロントエンドで -errtags オプションを指定したときにタグを表示する警告メッセージだけです。

デフォルトは -errwarn=%none です。-errwarn のみを指定した場合は、-errwarn=%all と同等です。

-errwarn の値を次の表に示します。

tag

tag で指定されたメッセージが警告メッセージとして発行された場合に、cc を致命的ステータスで終了させます。tag で指定されたメッセージが発行されない場合は無効です。

no%tag

tag で指定されたメッセージが警告メッセージとしてのみ発行された場合に、cc が致命的ステータスを返して終了しないようにします。tag で指定されたメッセージが発行されない場合は無効です。このオプションは、以前にこのオプションと tag または %all で指定した警告メッセージを、警告メッセージとして発行された場合に cc を致命的ステータスで終了させないよう元に戻すために使用します。

%all

どの警告メッセージが発行された場合でも cc を致命的ステータスで終了させます。特定の警告メッセージをこの動作の対象から除外するには、%all のあとに no%tag を指定できます。

%none

どの警告メッセージでも、警告タグが発行された場合に cc が致命的ステータスで終了しないようにします。これはデフォルト値です。

-fast

このオプションはマクロであり、実行可能ファイルが実行時に最適なパフォーマンスになるようにチューニングするための出発点として効果的に使用できます。-fast の展開は、あるリリースのコンパイラと次のリリースで違いがある場合やターゲットプラットフォーム固有のオプションが含められている場合があります。-# オプションまたは -xdryrun を使用して -fast の展開を調べ、-fast の該当するオプションを使用して実行可能ファイルのチューニングを行なってください。

-fast の展開には、コンパイラが最適化された数学ルーチンのライブラリを使用できるようにする -xlibmopt オプションが含まれます。詳細は、このマニュアルページの -xlibmopt の説明を参照してください。

-fast オプションは errno の値に影響します。詳細は、このマニュアルページの最後の「注意事項」のセクションを参照してください。

-fast を指定してコンパイルしたモジュールは、-fast を指定してリンクする必要があります。『C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの完全な一覧が記載されています。

-fast オプションは、特にコンパイルするマシンとは異なるターゲットで実行するプログラムでは使用できません。そのような場合は、-fast のあとに適切な -xtarget オプションを指定します。例:

% cc -fast -xtarget=generic

SUID によって規定された例外処理に依存する C モジュールに対しては、-fast のあとに -xnolibmil -xbuiltin=%default を指定します。

% cc -fast -xnolibmil -xbuiltin=%default

-fast オプションは、コマンド行でのマクロ展開のように動作します。このため、-fast のあとに対象のオプションを指定することによって、展開されたオプションをオーバーライドできます。

-fast とほかのオプションを組み合わせた場合は、最後に指定したオプションが適用されます。

-fast では、次のオプションがオンになります。

-fma=fused (SPARC, x86)
-fns (SPARC, x86)
-fsimple=2 (SPARC, x86)
-fsingle (SPARC, x86)
-nofstore (x86)
-xalias_level=basic (SPARC, x86)
-xbuiltin=%all (SPARC, x86)
-xdepend (SPARC, x86)
-xlibmil (SPARC, x86)
-xlibmopt (SPARC, x86)
-xmemalign=8s (SPARC)
-xO5 (SPARC, x86)
-xregs=frameptr (x86)
-xtarget=native (SPARC, x86)

コンポーネントオプションフラグのこの選択内容は、各リリースのコンパイラで変更される可能性があります。-fast によって設定されるオプションの詳細は、『C ユーザーガイド』を参照してください。

実行中のシステムで -fast の展開を調べるには、次のコマンドを実行します。

cc -fast -xdryrun |& grep ###

注: 一部の最適化では、プログラムの動作が特定の動作になることを想定しています。プログラムがこれらの想定に適合していない場合は、アプリケーションがクラッシュしたり、誤った結果を生成したりすることがあります。プログラムが -fast 付きのコンパイルに適しているかどうかを判断するには、各オプションの説明を参照してください。

このオプションは、IEEE 規格例外処理に依存するプログラムには使用しないでください。数値結果が異なったり、プログラムが途中で終了したり、予想外のSIGFPEシグナルが発生する可能性があります。

x86 では、-fast オプションに -xregs=frameptr が含まれます。特に C、Fortran、および C++ の混合ソースコードをコンパイルする場合は、その詳細について、-xregs=frameptr の説明を参照してください。

-fd

K&R 形式の関数の宣言や定義について報告します。

-features=[a]

コンパイラの extern インライン関数の扱いは、ISO/IEC 9899:1999 C 標準に指定されている動作にデフォルトで準拠しています。-features=no%extinl 付きで新しいコードをコンパイルすると、extern インライン関数は、C および C++ コンパイラのバージョン 5.5 以降で提供されていたのと同じ扱いを受けます。

古い C および C++ オブジェクト (C/C++ 5.6 より前) は、そのオブジェクトの動作変更なしに、新しい C および C++ オブジェクトとリンクできます。規格に適合した動作を実現するには、最新のコンパイラを使って古いコードをコンパイルする必要があります。

次の表に、a に指定可能な値を示します。接頭辞 no% はサブオプションを無効にします。

[no%]conststrings

読み取り専用メモリー内で文字列リテラルの配置を有効または無効にします。デフォルトは -features=conststrings であり、非推奨の -xstrconst オプションを置き換えます。デフォルトのコンパイルモードでは、コマンド行に -xstrconst を指定した場合のように、プログラムは文字列リテラルの書き込みに失敗します。

[no%]extensions

サイズがゼロの構造体または共用体の宣言、および有効な値を返す return 文を持つ void 関数を許可または禁止します。

extinl

extern インライン関数をグローバル関数として生成します。これがデフォルトで、1999 C 規格に準拠しています。

[no%]extinl

extern インライン関数を静的関数として生成します。

[no%]typeof

typeof 演算子の認識を有効または無効にします。typeof 演算子はその引数 (式または型のどちらか) の型を返します。構文上は sizeof 演算子と同様に指定されますが、意味上は typedef で定義される型と同様に動作します。したがって、typedefが使用できる箇所であればどこでも使用できます。たとえば、宣言、キャスト、または sizeof や typeof の内側で使用できます。デフォルトは -features=typeof です。

%none

オプション -features=%none は非推奨であり、-features=no% (サブオプションを指定します) に置き換えてください。

例:

typeof(int) i;/* declares variable "i" to be type int*/
typeof(i+10) j;/* declares variable "j" to be type int,
          the type of the expression */

i = sizeof(typeof(j)); /* sizeof returns the size of
          the type associated with variable "j" */

int a[10];
typeof(a) b;/* declares variable "b" to be array of
size 10 */

typeof 演算子は、任意の型の引数を使用できるマクロ定義で特に役立つ可能性があります。例:

#define SWAP(a,b)
         { typeof(a) temp; temp = a; a = b; b = temp; }
-flags

-xhelp=flags と同じです。使用可能なオプションを 1 行に要約した内容を出力します。

-flteval[={any|2}]

(x86) このオプションは、浮動小数点式の評価方法を制御するために使用します。

2

浮動小数点式は long double として評価されます。

any

式を構成している変数および定数の型の組み合わせに基づいて浮動小数点式が評価されます。

-flteval が指定されない場合は、-flteval=any に設定されます。-flteval を指定したけれども値を指定しない場合、コンパイラはそれを -flteval=2 に設定します。

-flteval=2 は、-xarch=ssepentium_prossea、または pentium_proa と一緒にのみ使用できます。

また、-flteval=2 は、-fprecision または -nofstore オプションと組み合わせた場合、互換性がありません。

詳細は、『C ユーザーガイド』の付録 E の「浮動小数点評価における精度」を参照してください。

-fma[={none|fused}]

浮動小数点の積和演算 (FMA) 命令の自動生成を有効にします。-fma=none を指定すると、これらの命令の生成を無効にします。-fma=fused を指定すると、コンパイラは浮動小数点の積和演算 (FMA) 命令を使用して、コードのパフォーマンスを改善する機会を検出しようとします。

デフォルトは -fma=none です。

積和演算命令を生成するための最低限のアーキテクチャーの要件は、SPARC では -xarch=sparcfmaf、x86 では -xarch=avx2 です。積和演算 (FMA) 命令をサポートしていないプラットフォームでプログラムが実行されないようにするため、コンパイラは積和演算 (FMA) 命令を生成する場合、バイナリプログラムにマーク付けをします。最低限のアーキテクチャーが使用されていない場合、-fma=fused は無効になります。

積和演算 (FMA) 命令により、積と和の間で中間の丸め手順が排除されます。その結果、-fma=fused を指定してコンパイルしたプログラムは、精度は減少ではなく増加する傾向にありますが、異なる結果になることがあります。

-fnonstd

-fns および -ftrap=common 用のマクロ。

-fns[=[no|yes]]

SPARC の場合は、SPARC 非標準浮動小数点モードを選択します。

x86 では、SSE flush-to-zero モードを選択します。利用可能な場合には、denormals-are-zero モードが選択されます。このオプションは、x86 では非正規数の結果をゼロにフラッシュします。また利用可能な場合には、非正規数オペランドもゼロとして扱われます。このオプションは、SSE や SSE2 命令セットを利用しない従来の x86 浮動小数点演算には影響しません。

デフォルト (-fns=no) は標準の浮動小数点モードです。

オプションの =yes または =no を使用すると、-fast のように、-fns を含むほかのマクロフラグに続く -fns フラグを切り替えることができます。

-fns-fns=yes と同じです。-fns=yes では非標準の浮動小数点が選択され、-fns=no では標準の浮動小数点が選択されます。

一部の SPARC システムでは、非標準の浮動小数点モードは「段階的アンダーフロー」を無効にします。つまり、小さな結果は、非正規数にはならず、ゼロに切り捨てられます。さらに、このモードでは、非正規のオペランドが報告なしにゼロに置き換えられます。このような SPARC システムでは、ハードウェアの段階的アンダーフローや非正規数がサポートされておらず、このオプションを使用するとプログラムのパフォーマンスを著しく改善できます。

非標準モードを有効にすると、浮動小数点演算は IEEE 754 規格に準拠しない結果を生成する場合があります。詳細は、『数値計算ガイド』を参照してください。

SPARC システムでは、このオプションはメインプログラムのコンパイル時に使用される場合にのみ有効です。

-fopenmp

-xopenmp=parallel と同じです。

-fprecision=p

(x86) 浮動小数点制御ワードの丸め精度モードのビットを p (単精度 (24 ビット)、倍精度 (53 ビット) または拡張精度 (64 ビット) のいずれか) に初期化します。デフォルトの浮動小数点丸め精度モードは拡張モードです。

x86 では、浮動小数点丸め精度モードの設定は精度に対してのみ影響します。指数の有効範囲に対しては影響しません。

このオプションは、x86 システムでメインプログラムのコンパイル時に使用する場合にのみ有効で、64 ビットプラットフォーム (-m64) または SSE2 対応プロセッサ (-xarch=sse2) でコンパイルする場合は無視されます。SPARC プラットフォームでは -fprecision は無視されます。

-fround=r

プログラム初期化中に実行時に確立される IEEE 754 丸めモードを設定します。

r は、nearest tozeronegativepositive のいずれかです。

デフォルトは、-fround=nearest です。

ieee_flags サブルーチンと同等です。

rtozeronegativepositive のいずれかにすると、プログラムが実行を開始するときに、丸め方向モードがそれぞれ、ゼロの方向に丸める、負の無限の方向に丸める、正の無限の方向に丸めるに設定されます。rnearest のとき、あるいは -fround フラグを使用しないとき、丸め方向モードは初期値から変更されません (デフォルトは nearest)。

このオプションは、メインプログラムをコンパイルするときにだけ有効です。

-xvector または -xlibmopt でのコンパイルには、デフォルトの丸めが必要です。-xvector または -xlibmopt のどちらか、あるいはその両方を使用してコンパイルされたライブラリにリンクするプログラムは、デフォルトの丸めが有効になっていることを確認する必要があります。

-fsimple[=n]

オプティマイザが浮動小数点演算に関する単純化した仮定を行うことを許可します。

デフォルトは -fsimple=0 です。-fsimple-fsimple=1 と同等です。

n を指定する場合、0、1、2 のいずれかにしなければいけません。

-fsimple=0

前提事項の単純化を行えないようにします。IEEE 754 に厳密に準拠します。

-fsimple=1

保守的な単純化を許可します。生成されるコードは、厳密には IEEE 754 に準拠していません。

-fsimple=1 では、オプティマイザは、次の点を前提にすることができます。

  • IEEE 754 のデフォルトの丸めとトラップモードが、プロセスの初期化以後も変わらない。

  • 浮動小数点例外以外には、目に見える結果が生じない演算は削除できる。

  • オペランドとして無限大または非数を持つ計算は、結果に非数を反映する必要はありません。たとえば、x*0 は 0 に置き換えることができます。

  • 演算はゼロの符号を区別しない。

    -fsimple=1 の場合、四捨五入や例外を考慮せずに完全な最適化を行うことは許可されていません。特に、浮動小数点演算を、実行時に一定に保たれる丸めモードにおいて異なる結果を生成する浮動小数点演算と置き換えることはできません。

-fsimple=2

-fsimple=1 のすべての機能が含まれ、-xvector=simd が有効な場合に、SIMD 命令を使用して縮約を計算できるようにします。

また、積極的な浮動小数点演算の最適化を許可し、この結果、丸めの変化によって、多くのプログラムが異なる数値結果を生じる可能性があります。たとえば、-fsimple=2 を指定し、あるループ内に x/y の演算があった場合、x/y がループ内で少なくとも 1 回は必ず評価され、z=1/y で、ループの実行中に y と z が一定の値をとることが明らかである場合、オプティマイザは x/y の演算をすべて x*z で置き換えようとします。

ただし、-fsimple=2 を指定していても、-fsimple=2 を指定しなければ発生しない浮動小数点例外をプログラムに発生させるような最適化はできません。

最適化が精度に与える影響の詳細は、『Techniques for Optimizing Applications: High Performance Computing』(Rajat Garg と Ilya Sharapov 著) をお読みください。OTN Oracle Solaris Studio の Web サイト (oracle.com/technetwork/server-storage/solarisstudio/) のパフォーマンスおよび精度に関する記事も参照してください

-fsingle

(-Xt および -Xs モードのみ) デフォルトでは、-Xs および -Xt は、浮動小数点式の K&R C の規則に従い、double に拡張して倍精度で評価します。-fsingle フラグは、-Xs または -Xt を指定して、コンパイラに浮動小数点式を単精度として評価させる場合に使用します。

-fstore

(x86) 浮動小数点式または関数が変数に代入されるか、式がより短い浮動小数点型にキャストされるときに、コンパイラがその値をレジスタに残さないで、その式または関数の値を代入の左辺の型に変換します。丸めや切り捨てによって、結果がレジスタの値から生成される値と異なることがあります。これは、デフォルトのモードです。このオプションを解除するには、オプション -nofstore を使用してください。

-ftrap[=t[,t...] ]

Sets the IEEE 745 trapping mode in effect at startup but does not install a SIGFPE handler. You can use ieee_handler(3M) or fex_set_handling(3M) to simultaneously enable traps and install a SIGFPE handler. If you specify more than one value, the list is processed sequentially from left to right.

接頭辞 no% は、%all または common からサブオプションを削除するために使用します。

[no%]division

ゼロによる除算をトラップします。

[no%]inexact

正確でない結果をトラップします。

[no%]invalid

無効な演算をトラップします。

[no%]overflow

オーバーフローをトラップします。

[no%]underflow

アンダーフローをトラップします。

%all

前述のすべてをトラップします。

%none

前述のどれもトラップしません。

common

無効、ゼロ除算、オーバーフローをトラップします。

デフォルトは -ftrap=%none です。

[no%] 形式のオプションは、次の例に示すように、%allcommon 値の意味を変更するためにのみ使用され、これらの値のいずれかと一緒に使用される必要があります。[no%] 形式のオプション自体は、特定のトラップを明示的に無効にするものではありません。

例: -ftrap=%all,no%inexact は、inexact を除くすべての例外に対して、トラップを設定するという意味です。

1 つのルーチンを -ftrap=t を使用してコンパイルする場合は、そのプログラムのすべてのルーチンを同じ -ftrap=t オプションを使用してコンパイルしてください。そうしないと、予期しない結果となることがあります。

-ftrap=inexact トラップでは、浮動小数点の値が正確に表現できないとトラップが発生するため、使用には注意してください。たとえば、次の文ではこの条件が発生する場合があります。

x = 1.0 / 3.0;
-G

動的にリンクされた実行可能ファイルではなく共有オブジェクトを生成します。このオプションは、-dn オプションとともに使用することはできず、ld に渡されます。

-G オプションを使用すると、コンパイラはデフォルトの -l オプションを ld に渡しません。共有ライブラリを別の共有ライブラリに依存させる場合は、必要な -l オプションをコマンド行に渡す必要があります。

コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションと -G オプションを組み合わせて共有ライブラリを作成した場合は、生成された共有オブジェクトとのリンクでも、必ず同じオプションを指定してください。

-xcode の説明に記述されているように、共有オブジェクトを作成するときは、64 ビット SPARC アーキテクチャー用にコンパイルされるすべてのオブジェクトファイルもまた、明示的な -xcode 値を使用してコンパイルする必要があります。

-g

-g[n] を参照してください。

-g[n]

dbx(1) およびパフォーマンスアナライザ (analyzer(1)) 用の追加のシンボルテーブル情報を生成します。

-xO3 以下の最適化レベルで -g を指定すると、ほとんど完全な最適化と可能なかぎりのシンボル情報を取得できます。末尾呼び出しの最適化とバックエンドのインライン化は無効です。

-xO4 以下の最適化レベルで -g を指定すると、完全な最適化と可能なかぎりのシンボル情報が得られます。

-g オプションでコンパイルすると、パフォーマンスアナライザの機能をフルに利用できます。 一部のパフォーマンス分析機能は -g を必要としませんが、注釈付きのソースコード、一部の関数レベルの情報、およびコンパイラ解説メッセージを確認するには、-g でコンパイルする必要があります。詳細は、analyzer(1) のマニュアルページおよび『パフォーマンスアナライザ』のマニュアルを参照してください。

-g オプションで生成される解説メッセージは、プログラムのコンパイル時にコンパイラが実行した最適化と変換について説明します。メッセージを表示するには、er_src(1) コマンドを使用します。これらのメッセージはソースコードでインタリーブされます。

プログラムを個別の手順でコンパイルしてリンクする場合、—g オプションを一方の手順に含め、もう一方の手順から除外してもプログラムの正確さには影響しませんが、プログラムのデバッグ機能に影響します。-g を付けてコンパイルしないけれども、-g を付けてリンクされるモジュールは、デバッグのために適切に準備されません。関数 main を含むモジュールを -g オプション付きでコンパイルすることは通常、デバッグのために必要です。

-g は、さまざまなよりプリミティブなオプションに展開されるマクロとして実装されます。展開の詳細については、-xdebuginfo を参照してください。

値:

-g

標準のデバッグ情報を生成します。

-gnone

デバッグ情報は生成されません。これはデフォルト値です。

-g1

事後デバッグの際に重要と思われるファイル、行番号、および簡単なパラメータ情報を生成します。

-g2

-g と同じです。

-g3

追加のデバッグ情報 (現在はマクロの定義情報のみで構成されます) を生成します。この追加情報により、-g のみを使用したコンパイルと比較して、結果の .o および実行可能ファイルのデバッグ情報のサイズが増える可能性があります。

-H

現在のコンパイル中にインクルードされた各ファイルのパス名を、標準エラーに 1 行に 1 つずつ出力します。

-h name

共有動的ライブラリに異なるバージョンのライブラリを保持できる名前を割り当てます。

通常、-h のあとの name は、-o オプションに指定したファイル名と同じでなければなりません。-hname の間の空白はオプションです。

リンカーは指定された name をライブラリに割り当て、この名前をライブラリの組み込み名としてライブラリファイルに記録します。-hname; オプションがない場合、組み込み名はライブラリファイルに記録されません。

実行時リンカーはライブラリを実行可能ファイルにロードするとき、組み込み名をライブラリファイルから実行可能ファイルが必要とする共有ライブラリファイルのリストにコピーします。実行可能ファイルはこのリストを持っています。共有ライブラリに組み込み名がないと、リンカーは代わりにその共有ライブラリファイルのパス名を使用します。

-I[-|dir]

-Idir#include ファイルを検索するディレクトリのリストに dir を追加します。-I の値は左から右に適用されます。

  • #include <foo.h> という形式の include 文の場合、プリプロセッサはヘッダーファイルを次の順序で検索します。

    1. -I オプションで命名されたディレクトリ (ある場合)。

    2. コンパイラおよびシステムの標準のディレクトリ (通常は /usr/include)。

  • #include "foo.h" 形式のインクルード文の場合、次の順序でディレクトリを検索します。

    1. 現在のディレクトリ (つまり、include 文自体が含まれているファイルがあるディレクトリ)。

    2. -I オプションで命名されたディレクトリ (ある場合)。

    3. コンパイラおよびシステムの標準のディレクトリ (通常は /usr/include)。

-I- は、インクルードファイルの検索規則を次のように変更します。

  • 現在のディレクトリが -I 指令で明示的に指定されていないかぎり、コンパイラは現在のディレクトリを検索しません。この影響は #include "foo.h" 形式のインクルード文にも及びます。

  • #include "foo.h" という形式のインクルードファイルの場合は、ディレクトリを次の順序で検索します。

    1. -I オプションで指定されたディレクトリ内 (-I- の前後)。

    2. コンパイラおよびシステムの標準のディレクトリ (通常は /usr/include)。

  • #include <foo.h> 形式のインクルードファイルの場合、次の順序でディレクトリを検索します。

    1. -I オプションの -I- のあとに指定されたディレクトリ (つまり、コンパイラは -I- の前にある -I のディレクトリを検索しません)。

    2. コンパイラおよびシステムの標準のディレクトリ (通常は /usr/include)。

前述のように、コマンド行の最初の -I- だけが機能します。

-Idir は、usr/include の前に dir で、名前がスラッシュ (/) で始まっていないインクルードファイルを探します。複数の -I オプションが指定された場合は、指定された順序でディレクトリが調べられます。

警告:

コンパイラがインストールされている位置の /usr/include/lib/usr/lib を検索ディレクトリに指定しないでください。

-i

LD_LIBRARY_PATH および LD_LIBRARY_PATH_64 の設定を無視します。

-include filename

このオプションを指定すると、コンパイラは filename を、主要なソースファイルの 1 行目に記述されているかのように #include プリプロセッサ指令として処理します。

コンパイラが filename を検索する最初のディレクトリは現在の作業ディレクトリであり、ファイルが明示的にインクルードされている場合のようにメインのソースファイルが存在するディレクトリになるわけではありません。コンパイラが現在の作業ディレクトリで filename を見つけられない場合は、通常のディレクトリパスが検索されます。複数の -include オプションを指定する場合は、コマンド行で表示された順にファイルがインクルードされます。

-KPIC

(SPARC) (廃止) このオプションは使用すべきではありません。代わりに -xcode=pic32 を使用してください。廃止されたオプションおよびフラグの完全なリストについては、『C ユーザーガイド』を参照してください。

(x86) -KPIC は x86 アーキテクチャーの -Kpic と同じです。

-Kpic

(SPARC) (廃止) このオプションは使用すべきではありません。代わりに -xcode=pic13 を使用してください。廃止されたオプションおよびフラグの完全なリストについては、『C ユーザーガイド』を参照してください。

(x86) 位置独立コードを生成します。このオプションは、共有ライブラリを構築するためにソースファイルをコンパイルするときに使用します。グローバルデータへの各参照は、グローバルオフセットテーブルにおけるポインタの間接参照として生成されます。各関数呼び出しは、手続きリンケージテーブルを通して PC 相対アドレス指定モードで生成されます。

-keeptmp

コンパイル中に作成された一時ファイルを、自動的に削除する代わりに保持します。

-Ldir

dir に指定したディレクトリを、ld によるライブラリの検索に使用するディレクトリとして追加します。このオプションとその引数は ld に渡されます。

警告:

コンパイラがインストールされている位置の /usr/include/lib/usr/lib を検索ディレクトリに指定しないでください。

-lname

オブジェクトライブラリ libname.so または libname.a とリンクします (ld(1) に渡すため)。シンボルは左から右へ解決されるため、コマンド行でのライブラリの順序は重要です。このオプションはソースファイルのあとに続ける必要があります。

-library=sunperf

Oracle Solaris Studio 提供のパフォーマンスライブラリにリンクします。

-m32|-m64

コンパイルされたバイナリオブジェクトのメモリーモデルを指定します。

32 ビット実行可能ファイルおよび共有ライブラリを作成するには、-m32 を使用します。64 ビット実行可能ファイルおよび共有ライブラリを作成するには、-m64 を使用します。

ILP32 メモリーモデル (32 ビット int、long、ポインタデータ型) は、64 ビット対応ではないすべての Oracle Solaris プラットフォームおよび Linux プラットフォームでのデフォルトです。LP64 メモリーモデル (64 ビット long、ポインタデータ型) は 64 ビット対応の Linux プラットフォームのデフォルトです。-m64 は LP64 モデル対応のプラットフォームでのみ使用できます。

-m32 でコンパイルされたオブジェクトファイルまたはライブラリは、-m64 でコンパイルされたオブジェクトファイルまたはライブラリとリンクできません。

大量の静的データを持つアプリケーションを -m64 を使用してコンパイルするときは、-xmodel=medium も必要になることがあります。一部の Linux プラットフォームは、ミディアムモデルをサポートしていません。

-m32|-m64 を指定してコンパイルしたモジュールは、-m32|-m64 を指定してリンクする必要があります。『C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの完全な一覧が記載されています。

旧バージョンのコンパイラでは、-xarch で命令セットを選択することで、メモリーモデルの ILP32 または LP64 が暗黙に指定されていました。Sun Studio 12 以降のコンパイラでは、このようなことはありません。ほとんどのプラットフォームでは、64 ビットオブジェクトを作成するのに、コマンド行に -m64 を追加するだけです。

Oracle Solaris では、-m32 がデフォルトです。64 ビットプログラムをサポートしている Linux システムでは、-m64 -xarch=sse2 がデフォルト値です。

関連項目: -xarch

-mc

オブジェクトファイルの .comment セクションから、重複する文字列を削除します。-mc フラグを使用すると、mcs -c が起動されます。

-misalign

(SPARC) (廃止) このオプションは使用すべきではありません。代わりに -xmemalign=1i オプションを使ってください。廃止されたオプションおよびフラグの完全なリストについては、『C ユーザーガイド』を参照してください。

-misalign2

(SPARC) (廃止) このオプションは使用すべきではありません。代わりに -xmemalign=2i オプションを使ってください。廃止されたオプションおよびフラグの完全なリストについては、『C ユーザーガイド』を参照してください。

-mr[,string]

-mr を使用すると、オブジェクトファイルの .comment セクションからすべての文字列が削除されます。-mr フラグを使用すると、mcs -d が起動されます。

-mr, string はオブジェクトファイルの .comment セクションからすべての文字列を削除して、.comment セクションに string を挿入します。string に空白が含まれている場合は二重引用符で囲みます。string が NULL の場合、.comment セクションは空になります。このフラグを使用すると、mcs -d -a が呼び出されます。

-mt[={yes|no}]

このオプションを使用して、Oracle Solaris スレッドまたは POSIX スレッド API を使用しているマルチスレッド化コードをコンパイルおよびリンクします。-mt=yes オプションにより、ライブラリが適切な順序でリンクされることが保証されます。

このオプションは -D_REENTRANT をプリプロセッサに渡します。

Oracle Solaris スレッドを使用するには、thread.h ヘッダーファイルをインクルードし、-mt=yes オプション付きでコンパイルします。Oracle Solaris プラットフォームで POSIX スレッドを使用するには、pthread.h ヘッダーファイルをインクルードし、-mt=yes オプション付きでコンパイルします。

Linux プラットフォーム上では、POSIX スレッドの API のみが使用できます (Linux プラットフォームには libthread はありません)。したがって、Linux プラットフォームで -mt=yes を使用すると、—lthread の代わりに —lpthread が追加されます。Linux プラットフォームで POSIX スレッドを使用するには、—mt を使用してコンパイルします。

-G を使用してコンパイルする場合は、-mt=yes を指定しても、-lthread-lpthread のどちらも自動的には含められません。共有ライブラリを構築する場合は、これらのライブラリを明示的にリストする必要があります。

(OpenMP 共有メモリー並列化 API を使用するための) —xopenmp オプションには、-mt=yes が自動的に含まれます。

-mt=yes を指定してコンパイルを実行し、リンクを個別の手順でリンクする場合は、コンパイル手順と同様にリンク手順でも -mt=yes オプションを使用する必要があります。-mt=yes を使用して 1 つの変換ユニットをコンパイルおよびリンクする場合は、-mt=yes を指定してプログラムのすべてのユニットをコンパイルおよびリンクする必要があります。

-mt=yes は、コンパイラのデフォルトの動作です。この動作が望ましくない場合は、オプション -mt=no を使用してください。

オプション -mt は、-mt=yes と同じです。

関連項目: -xnolib

-native

このオプションは -xtarget=native と同等です。

-nofstore

(x86) コマンド行の -fstore を取り消します。-fstore によって呼び出されたときの式が強制的に結果の変数の精度になる動作を無効にします。

-nofstore-fast によって呼び出されます。通常のデフォルトは -fstore です。

-O

デフォルトの最適化レベルの -xO3 を使ってください。ただし、あらゆる変数を自動的に volatile と見なすことを前提にするプログラムの場合、 -xO3 は不適切なことがあります。この前提を持つ典型的なプログラムは、独自の同期処理プリミティブを実装するデバイスドライバや古いマルチスレッドアプリケーションです。回避方法は -O の代わりに -xO2 を指定してコンパイルすることです。

-On

-xOn と同じです。

-o filename

デフォルトの a.out ではなく、出力ファイル filename を指定します。cc はソースファイルを上書きしないため、filenameソースファイルと同じにできません。

filename は適切な接尾辞を持つ必要があります。-c とともに使用されると、filename はターゲットの .o オブジェクトファイルを指定します。-G とともに使用されると、ターゲットの .so ライブラリファイルを指定します。このオプションとその引数は ld に渡されます。

-P

指定された C ファイルのみを前処理し、接尾辞が .i である対応するファイルに結果を残します。-E と異なり、出力には前処理行の指令は含まれません。

-p

(廃止) -xpg を参照してください。

-pedantic{=[yes|no]}

ANSI 以外の構文に対するエラー/警告に厳密に準拠します。有効な ANSI 標準を指定するために -std フラグを使用できます。-Xc-Xa-Xt-Xs、および -xc99 フラグは、-pedantic フラグとともに指定できません。一緒に指定するとコンパイラによってエラーが発行されます。

-pedantic を指定しない場合の最初のデフォルトは -pedantic=no です。

2 番目のデフォルトは pedantic=yes と同等です。

-preserve_argvalues[=simple|none|complete]

(x86) レジスタベースの関数の引数のコピーをスタックに保存します。

コマンド行に none を指定した場合、または -preserve_argvalues オプションを指定しない場合、コンパイラは通常どおりに動作します。

simple を指定した場合、最大で 6 つの整数引数が保存されます。

complete を指定した場合、スタックトレース内のすべての関数引数の値は、適切な順序でユーザーに表示されます。

仮引数に割り当てられている関数の有効期間中、値は更新されません。

-Qoption phase option[,option...]

option をコンパイルの phase に渡します。

複数のオプションを渡すには、コンマで区切って指定します。-Qoption でコンポーネントに渡されるオプションは、順序が変更されることがあります。ドライバが認識するオプションは、正しい順序に保持されます。ドライバがすでに認識しているオプションに、-Qoption は使わないでください。

次の表に、phase に指定できる値、および-Wc,arg の対応する引数を示します。

 
Qoption
phase   W<c>
=====   ====
fbe     a    Assembler: (fbe), (gas)
cg      c    C code generator: (cg)(SPARC)
driver  d    cc driver (1)
ld      l    Link editor (ld)
mcs     m    mcs
ipo     O    (Capital letter 'O') Interprocedural optimizer
postopt o    Postoptimizer
cpp     p    Preprocessor (cpp)
ube     u    C code generator (ube), (x86)
acomp   0    (The number zero) Compiler acomp
iropt   2    Optimizer: (iropt)

関連項目: -Wc,arg

-Q[y|n]

出力ファイルに識別情報を出力します (または出力しません)。y を指定すると、起動した各コンパイラツールの識別情報が出力ファイルに追加されます (デフォルトの動作)。これはソフトウェアの管理に役立ちます。-Qn はこの情報を抑制します。

-qp

-p と同じです。

-Rdir[:dir...]

複数のディレクトリをコロンで区切って指定します。このリストは、実行時リンカーにライブラリ検索ディレクトリを指定する際に使用されます。NULL 以外の文字列は、出力オブジェクトファイルに記録され、実行時リンカーに渡されます。

LD_RUN_PATH-R オプションの両方が指定されたときは、この -R オプションが優先されます。

-S

指定された C ファイルをコンパイルしますが、アセンブルまたはリンク編集しません。アセンブラ言語出力は、接尾辞が .s の対応するファイルに残されます。

-s

出力オブジェクトファイルからすべてのシンボリックデバッグ情報を削除します。このオプションは、ld(1) に渡されます。このオプションは、-g とともに指定することはできません。

-staticlib=[no%]sunperf

-library=sunperf とともに使用すると、-staticlib=sunperf は Sun パフォーマンスライブラリと静的にリンクします。デフォルトの場合、および -library=no%sunperf を指定すると、-library=sunperf は Sun パフォーマンスライブラリと動的にリンクします。

CC との互換性のため、%all および %none も -staticlib で受け入れられる値です。ここで、%allsunperf と同等であり、%noneno%sunperf と同等です。

-std=value

C 言語標準の選択フラグ。

value は次のいずれかとして定義します。

c89

受け入れられる C ソース言語は、ISO C90 標準で定義されたものです。

c99

受け入れられる C ソース言語は、ISO C99 標準で定義されたものです。

c11

受け入れられる C ソース言語は、ISO C11 標準で定義されたものです。

最初のデフォルトは c11 であり、ANSI C11 で定義されている C ソース言語を拡張したものを受け入れることを意味します。2 番目のデフォルトはありません。代わりに、値なしで -std を指定すると、エラーが生成されます。

フラグ -Xc-Xa-Xt、または -xtransition のいずれかを指定すると、-std の最初のデフォルトは無効になり、コンパイラではデフォルトで -xc99=all,no_lib が指定されます。-Xs を指定すると、最初のデフォルトは無効になり、コンパイラではデフォルトで -xc99=none が指定されます。-xc99 を指定すると、-std の最初のデフォルトは無効になり、コンパイラは -xc99 の指定を受け入れます。

-std フラグを指定した場合、-Xc-Xa-Xt-Xs、および -xc99 フラグは使用できません。一緒に指定するとコンパイラによってエラーが発行されます。

コンパイルとリンクを別々に行う場合は、両方の手順で同じ -std フラグの値を使用する必要があります。

-temp=path

一時ファイルのディレクトリを定義します。

このオプションは、コンパイル中に生成される一時ファイルを格納するディレクトリの path を指定します。コンパイラは -temp によって設定された値を、TMPDIR の値より優先します。

関連項目: -keeptmp

-traceback[={%none|common|signals_list}]

実行時に重大エラーが発生した場合にスタックトレースを発行します。

-traceback オプションを指定すると、プログラムによって特定のシグナルが生成された場合に、実行可能ファイルで標準エラー出力へのスタックトレースが発行されて、コアダンプが実行され、終了します。複数のスレッドが 1 つのシグナルを生成すると、スタックトレースは最初のスレッドに対してのみ生成されます。

追跡表示を使用するには、リンク時に -traceback オプションをコンパイラコマンド行に追加します。このオプションはコンパイル時にも使用できますが、実行可能バイナリが生成されない場合無視されます。-traceback -G とともに使用して共有ライブラリを作成すると、エラーが発生します。

%none または none

トレースバックを無効にします。

common

一連の共通シグナル sigillsigfpesigbussigsegv、および sigabrt のいずれかが生成された場合に、スタックトレースを発行することを指定します。

signals_list

スタックトレースを生成するべきシグナルの名前のコンマ区切りのリスト (小文字) を指定します。sigquitsigillsigtrapsigabrtsigemtsigfpesigbussigsegvsigsyssigxcpusigxfsz のシグナル (コアファイルが生成されるシグナル) をキャッチできます。

これらのシグナルの前に no% を付けると、シグナルのキャッチは無効になります。

たとえば、-traceback=sigsegv,sigfpe と指定すると、sigsegv または sigfpe が生成された場合にスタックトレースとコアダンプが生成されます。

このオプションを指定しない場合、デフォルトは -traceback=%none になります。

= 記号なしで、-traceback だけを指定すると、-traceback=common の意味になります。

コアダンプが不要な場合は、次を使用して coredumpsize 制限を 0 に設定できます。

% limit coredumpsize 0

-traceback オプションは、実行時のパフォーマンスに影響しません。

-Uname

name の定義が未定義になります。このオプションは、同じコマンド行で -D で作成されたプリプロセッサシンボル name の初期定義を削除します。コマンド行ドライバで配置されたものも含みます。

-U は、ソースファイルのプリプロセッサ指令に影響しません。コマンド行には複数の -U オプションを指定できます。

コマンド行で -D-U の両方に同じ name が指定された場合、オプションの配置順に関係なく、name は定義されません。

-V

呼び出された各ツールが標準エラー出力にバージョン情報を出力します。

-v

より厳格な意味検査を実行し、指定された C ファイルに対して lint に似た特定の検査も有効にするよう、コンパイラに指示します。

-Wc,arg

引数 argc に渡します。各引数は前の引数からコンマでのみ区切る必要があります。(コンマを引数の一部にするには、バックスラッシュ (\) 文字を直前に付けてエスケープします。バックスラッシュは生成される引数から削除されます。)すべての -W arg は、通常のコマンド行引数のあとに渡されます。

c には次のいずれかを指定できます。

a

アセンブラ : (fbe)、(gas)

c

C コードジェネレータ: (cg)(SPARC)

d

cc ドライバ (1)

l

リンクエディタ (ld)

m

mcs

O

(大文字「O」) 内部手続きオプティマイザ

o

ポストオプティマイザ

p

プリプロセッサ (cpp)

u

C コードジェネレータ (ube)、(x86)

0

(数字のゼロ) コンパイラ (acomp)

2

オプティマイザ: (iropt)

(1) 注: このマニュアルページにリストされている cc オプションを -Wd を使用して C コンパイラに渡すことはできません。

たとえば、-Wa,-o,objfile-o および objfile をこの順序でアセンブラに渡します。また、-Wl,-I,name は、リンクフェーズで動的リンカー /usr/lib/ld.so.1 のデフォルト名をオーバーライドします。

引数がツールに渡される順序は、ほかに指定されるコマンド行オプションとの関係で、変更される可能性があります。

-w

コンパイラの警告メッセージを抑止します。

このオプションは error_messages プラグマをオーバーライドします。

-X[c|a|t|s]

(廃止) -Xs オプションは、将来のリリースで削除される予定です。適切なビルドおよびコンパイルに -Xs が必要になる C コードは、少なくとも ISO C 標準の C99 ダイアレクトに準拠するように、つまり -std=c99 でコンパイルできるように移行することをお勧めします。

-std または -xlang フラグを指定した場合、-Xc-Xa-Xt、および -Xs フラグは使用できません。

-std フラグを使用しない場合、-X オプションは 1990 および 1999 ISO C 規格に準拠する度合いを指定します。-xc99 の値により、-X オプションが適用される ISO C 規格のバージョンが異なります。

c (準拠)

ISO C に完全準拠。K&R C 互換性拡張機能はありません。ISO C にない構文を使用しているプログラムに対して、エラーと警告を発行します。-Xc オプションを指定すると事前定義されたマクロ __STDC__ の値は 1 になります。

a

ISO C に K&R C 互換性拡張機能を加え、ISO C により求められる意味の変更を含めたものです。K&R C と ISO C が同じ構造体に異なる意味を指定している場合、コンパイラは ISO C の解釈を使用します。-Xa オプションを -xtransition オプションとともに使用すると、異なる意味論に関する警告が出力されます。-Xa オプションを指定すると事前定義されたマクロ __STDC__ の値は 0 になります。

t (移行)

このオプションは、ISO C + K&R C 互換性拡張 (ISO C が要求するセマンティック変更なし) を使用します。K&R C と ISO C が同じ構造体に異なる意味を指定している場合、コンパイラは K&R C の解釈を使用します。-Xt オプションを -xtransition オプションとともに使用すると、異なる意味論に関する警告が出力されます。-Xt オプションを指定すると事前定義されたマクロ __STDC__ の値は 0 になります。

s (K&R C)

コンパイラは、Oracle Solaris Studio ISO C と K&R C とで動作が異なるすべての言語構文について、警告しようとします。処理のために cpp を呼び出します。__STDC__ はこのモードでは定義されません。

事前定義されたマクロ __STDC__ の値は、-Xt および -Xa を指定すると 0 になり、-Xc を指定すると 1 になります。(-Xs の場合は定義されません。)異なる動作に関するすべての警告メッセージは、適切なコーディングによって排除できます。たとえば、キャストを使用すると、整数拡張による変更の警告を排除できます。

-Xlinker arg

arg をリンカー ld(1) に渡します。

-Wl,arg と同等です。

-xaddr32[={yes|no}]

(x86/x64) -xaddr32=yes コンパイルフラグは、生成される実行可能ファイルまたは共有オブジェクトを 32 ビットアドレス空間に制限します。

この方法でコンパイルする実行可能ファイルは、32 ビットアドレス空間に制限されるプロセスを作成する結果になります。

-xaddr32=no を指定する場合は、通常の 64 ビットバイナリが作成されます。

-xaddr32 オプションを指定しないと、-xaddr32=no が想定されます。

-xaddr32 だけを指定すると、-xaddr32=yes が想定されます。

このオプションは、-m64 コンパイルのみ、および SF1_SUNW_ADDR32 ソフトウェア機能をサポートしている Oracle Solaris プラットフォームのみに適用できます。

Linux カーネルはアドレス空間制限をサポートしないため、このオプションは Linux では使用できません。-xaddr32 オプションは Linux では無視されます。

単一のオブジェクトファイルが -xaddr32=yes を指定してコンパイルされた場合は、出力ファイル全体が -xaddr32=yes を指定してコンパイルされたものと、リンク時に想定されます。

32 ビットアドレス空間に制限される共有オブジェクトは、制限された 32 ビットモードのアドレス空間内で実行されるプロセスから読み込む必要があります。

詳細は、『リンカーとライブラリ』で説明されている SF1_SUNW_ADDR32 ソフトウェア機能の定義を参照してください。

-xalias_level[=a]

aanybasicweaklayoutstrictstdstrong のいずれかである必要があります。このフラグは、変換ユニット全体で、指定した別名レベルを有効にするために使用します。言い換えると、選択した別名レベルが変換ユニットのすべてのメモリー参照に適用されます。-xalias_level を使用しない場合、コンパイラは -xalias_level=any が想定されます。値を設定しないで -xalias_level を使用する場合、-xalias_level=layout が想定されます。

any

コンパイラはすべてのメモリー参照をこのレベルで別名設定できると仮定します。型ベースの別名分析はありません。

basic

-xalias_level=basic オプションを使用する場合、コンパイラは、さまざまな C 言語基本型に関連するメモリー参照が相互に別名設定しないと想定します。また、コンパイラは、ほかのすべての型への参照が C 言語基本型と同様に相互に別名設定できると仮定します。コンパイラは、char * を使用する参照がそのほかの型を別名設定できると仮定します。

weak

-xalias_level=weak オプションを使用する場合、コンパイラは、任意の構造体ポインタが構造体の型にポイントできると想定します。コンパイルされるソースの式で参照されるか、コンパイルされるソースの外側から参照される型への参照を含む構造体または共用体は、コンパイルされるソースの式より先に宣言する必要があります。

この制限事項を遵守するには、コンパイルされるソースの式で参照されるオブジェクトの型を参照する型を含むプログラムの全ヘッダーファイルを取り込みます。

-xalias_level=weak レベルで、コンパイラは、さまざまな C 言語基本型に関連するメモリー参照が相互に別名設定しないと仮定します。コンパイラは、char *を使用する参照がそのほかの型に関連するメモリー参照を別名設定すると仮定します。

layout

コンパイラは、メモリー内の型の順序が同じである型に関連するメモリー参照は、相互に別名設定できると想定します。コンパイラは、メモリーで同一に見えない型を保持する 2 つの参照が相互に別名設定しないと仮定します。コンパイラは、構造体の初期メンバーがメモリーで同じに見える場合、さまざまな構造体の型の別名を介して 2 つのメモリーがアクセスを実行すると仮定します。ただし、このレベルで、構造体へのポインタを使用して、2 つの構造体の間にあるメモリーで同じに見えるメンバーの一般的な初期シーケンスの外側にある類似しない構造体オブジェクトのフィールドにアクセスすべきではありません。これは、コンパイラがそのような参照は相互に別名設定しないと想定するためです。

-xalias_level=layout オプションを使用すると、コンパイラは、メモリー内に同一の型のシーケンスを保持する型に関連するメモリー参照が相互に別名設定できると仮定できます。コンパイラは、char *を使用する参照がそのほかの型に関連するメモリー参照を別名設定できると仮定します。

strict

コンパイラは、タグを削除しても同一である型 (構造体、共用体など) に関連するメモリー参照は相互に別名設定できると想定します。逆に言えば、コンパイラは、タグを削除したあとも同一にならない型に関連するメモリー参照は相互に別名設定しないと仮定します。ただし、コンパイルされるソースの式で参照されるか、コンパイルされるソースの外側から参照されるオブジェクトの一部となる型への参照を含む構造体または共用体の型は、コンパイルされるソースの式より先に宣言しなければいけません。

この制限事項を遵守するには、コンパイルされるソースの式で参照されるオブジェクトの型を参照する型を含むプログラムの全ヘッダーファイルを取り込みます。

-xalias_level=strict レベルで、コンパイラは、さまざまな C 言語基本型に関連するメモリー参照が相互に別名設定しないと仮定します。コンパイラは、char * を使用する参照がそのほかの型を別名設定できると仮定します。

std

コンパイラは、型およびタグは別名と同じである必要があるが、char * を使用する参照でそのほかの型を別名設定できると想定します。この規則は、1999 ISO C 規格に記載されているポインタの参照解除についての制限事項と同じです。この規則を正しく使用するプログラムは移植性が非常に高く、最適化によって良好なパフォーマンスが得られるはずです。

strong

std レベルと同じ制限が適用されますが、コンパイラは、char * 型のポインタは char 型のオブジェクトにアクセスするためにのみ使用されると想定します。また、コンパイラは、内部ポインタが存在しないと仮定します。内部ポインタは、struct のメンバーをポイントするポインタとして定義されます。

関連項目: -xprefetch_auto_type

-xanalyze={code|%none}

(廃止) このオプションは、将来のリリースで削除される予定です。代わりに -xprevise を使用してください。

コードアナライザを使用して表示できるソースコードの静的分析を生成する場合は、このオプションを指定してコンパイルします。

-xanalyze=code を指定してコンパイルし、別の手順でリンクするときは、リンク手順でも -xanalyze=code を含めてください。

デフォルトは -xanalyze=%none です。

Linux では、-xanalyze=code-xannotate とともに指定する必要があります。

詳細は、Oracle Solaris Studio コードアナライザのドキュメントを参照してください。

-xannotate[={yes|no}]

最適化および監視ツール binopt(1)code-analyzer(1)discover(1)collect(1)、および uncover(1) で使用可能なバイナリを作成するよう、コンパイラに指示します。

Oracle Solaris でのデフォルトは -xannotate=yes です。Linux でのデフォルトは -xannotate=no です。値なしで -xannotate を指定することは、-xannotate=yes と同等です。

最適化および監視ツールを最適に使用するためには、コンパイル時とリンク時の両方で -xannotate=yes が有効である必要があります。

最適化および監視ツールを使用しないときは、-xannotate=no を指定してコンパイルおよびリンクすると、バイナリとライブラリが若干小さくなります。

-xarch=isa

ターゲットのアーキテクチャー命令セット (ISA) を指定します。

このオプションは、指定の命令セットだけを許すことによって、コンパイラが指定の命令セットアーキテクチャーの命令に対応するコードしか生成できないようにします。このオプションは、ターゲット固有の命令の使用は保証しません。ただし、このオプションを使用するとバイナリプログラムの移植性に影響を与える可能性があります。このエントリの最後の「注意事項」および「警告」のセクションを参照してください。

注: 意図するメモリーモデルとして LP64 (64 ビット) または ILP32 (32 ビット) を指定するには、それぞれ -m64 または -m32 オプションを使用してください。次に示すように以前のリリースとの互換性を保つ場合を除いて、-xarch オプションでメモリーモデルを指定できなくなりました。

注: コンパイラおよびリンカーは、特定の命令セットアーキテクチャー (ISA) を必要とする .o ファイルおよび実行可能ファイルをマークし、実行しているシステムで特定の ISA がサポートされない場合に、実行可能ファイルが実行時にロードされないようにします。

アーキテクチャー固有の命令を使用する _asm 文またはインラインテンプレート (.il ファイル) を使用したコードには、コンパイルエラーを回避するために、適切な -xarch 値でのコンパイルが必要になることがあります。

別々の手順でコンパイルしてリンクする場合は、両方の手順に同じ -xarch の値を指定してください。

すべてのプラットフォームで指定できる値:

generic

このオプションでは、ほとんどのプロセッサに共通の命令セットが使用されます。これはデフォルトであり、-xarch=sse2 と同等です。

generic64

ほとんどの 64 ビットプラットフォームで良好なパフォーマンスになるようにコンパイルします。(Oracle Solaris のみ)

このオプションは、次と同等です。

-m64 -xarch=generic

以前のリリースとの互換性のために提供されています。-m64 は、-xarch=generic64 の代わりに 64 ビットコンパイルを指定するために使用します。

native

このシステムで良好なパフォーマンスを得られるようにコンパイルします。

現在コンパイルしているシステムプロセッサにもっとも適した設定を選択します。

native64

このシステムで良好なパフォーマンスを得られるようにコンパイルします (Oracle Solaris のみ)。

このオプションは、-m64 -xarch=native に相当し、以前のリリースとの互換性のために用意されています。

SPARC プラットフォームに固有の値:

sparc

SPARC-V9 ISA 用のコンパイルを行います。

V9 ISA 用のコンパイルですが、Visual Instruction Set (VIS) や、その他の実装固有の ISA 拡張機能は含まれません。このオプションを使用して、コンパイラは、V9 ISA で良好なパフォーマンスが得られるようにコードを生成できます。

sparcvis

SPARC-V9 ISA plus VIS 用のコンパイルを行います。

SPARC-V9 + VIS (Visual Instruction Set) version 1.0 + UltraSPARC 拡張機能用のコンパイルを実行します。このオプションを使用すると、コンパイラは、UltraSPARC アーキテクチャー上で良好なパフォーマンスが得られるようにコードを生成することができます。

sparcvis2

UltraSPARC III 拡張機能付きの SPARC-V9 ISA 用のコンパイルを行います。

UltraSPARC アーキテクチャー + VIS (Visual Instruction Set) version 2.0 + UltraSPARC-III 拡張機能用のオブジェクトコードを生成します。

sparcvis3

UltraSPARC III および VIS 3 拡張機能付きの SPARC-V9 ISA 用のコンパイルを行います。

SPARC-V9 命令セット、VIS (Visual Instruction Set) version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) version 2.0、積和演算 (FMA) 命令、および VIS (Visual Instruction Set) version 3.0 を含む UltraSPARC-III 拡張機能の命令をコンパイラが使用できるようになります。

sparcfmaf

SPARC-V9 ISA の sparcfmaf バージョン用のコンパイルを行います。

SPARC-V9 命令セット、VIS (Visual Instruction Set) version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) version 2.0 を含む UltraSPARC-III 拡張機能、および浮動小数点積和演算用の SPARC64 VI 拡張機能の命令をコンパイラが使用できるようになります。

コンパイラが自動的に積和演算命令を使用する機会を見つけられるようにするには、-xarch=sparcfmaf および -fma=fused と最適化レベルを組み合わせて使用する必要があります。

sparc4

SPARC4 バージョンの SPARC-V9 ISA 用にコンパイルします。

SPARC-V9 命令セット、VIS 1.0 を含む UltraSPARC 拡張機能、VIS2.0、浮動小数点積和演算命令、VIS 3.0、および SPARC4 命令を含む UltraSPARC-III 拡張機能の命令をコンパイラが使用できるようになります。

sparc4b

SPARC4B バージョンの SPARC-V9 ISA 用にコンパイルします。

コンパイラが、SPARC-V9 命令セットからの命令に加えて、VIS 1.0 を含む UltraSPARC 拡張機能、VIS 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能からの命令、および SPARC T4 拡張機能からの PAUSE および CBCOND 命令を使用できるようにします。

sparc4c

SPARC4C バージョンの SPARC-V9 ISA 用にコンパイルします。

コンパイラが、SPARC-V9 命令セットからの命令に加えて、VIS 1.0 を含む UltraSPARC 拡張機能、VIS 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能、VIS 3.0 命令の VIS3 サブセット、VIS 3.0 の VIS3B サブセットと呼ばれる SPARC T3 拡張機能のサブセット、および SPARC T4 拡張機能からの PAUSE および CBCOND 命令を使用できるようにします。

sparcace

sparcace バージョンの SPARC-V9 ISA 用にコンパイルします。

コンパイラが、SPARC-V9 命令セットに加えて、VIS (Visual Instruction Set) Version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) Version 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能、および SPARCACE 浮動小数点用の SPARC64 X 拡張機能からの命令を使用できるようにします。

sparcaceplus

sparcaceplus バージョンの SPARC-V9 ISA 用にコンパイルします。

コンパイラが、SPARC-V9 命令セットに加えて、VIS (Visual Instruction Set) Version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) Version 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能、SPARCACE 浮動小数点用の SPARC64 X 拡張機能、および SPARCACE 浮動小数点用の SPARC64 X+ 拡張機能からの命令を使用できるようにします。

sparcima

sparcima 版の SPARC-V9 ISA 用にコンパイルします。

コンパイラが、SPARC-V9 命令セットに加えて、VIS (Visual Instruction Set) Version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) Version 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能からの命令を使用できるようにします。

v9

-m64 -xarch=sparc と同等です。64 ビットのメモリーモデルを取得するために -xarch=v9 を使用している従来の Makefile およびスクリプトでは、-m64 のみを使用する必要があります。

v9a

-m64 -xarch=sparcvis に相当し、以前のリリースとの互換性のために用意されています。

v9b

-m64 -xarch=sparcvis2 に相当し、以前のリリースとの互換性のために用意されています。

注:

genericsparcsparcvis2sparcvis3sparcfmaf、および sparcima でコンパイルされたオブジェクトライブラリファイル (.o) をリンクして、一度に実行できます。ただし、リンクされているすべての命令セットをサポートしているプロセッサでのみ実行できます。

特定の設定では、生成された実行可能ファイルが、以前のアーキテクチャーでの実行速度が非常に遅くなる場合があります。また、4 倍精度浮動小数点命令は、これらの命令セットアーキテクチャーの多くで使用できますが、コンパイラは、そのコンパイラが生成したコードではそれらの命令を使用しません。

x86 プラットフォームに固有の値:

avx2

386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES、PCLMULQDQ、AVX、FSGSBASE、RDRND、F16C、AVX2、BMI1、BMI2、LZCNT、INVPCID、および FMA の命令を使用できます。

avx_i

386、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES、PCLMULQDQ AVX、FSGSBASE、RDRND、および F16C の命令を使用できます。

avx

386、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES、PCLMULQDQ、smf、AVX の命令を使用できます。

aes

386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES、および PCLMULQDQ の命令を使用できます。

sse4_2

386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、SSE4.1、および SSE4.2 の命令を使用できます。

sse4_1

386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、および SSE4.1 の命令を使用できます。

ssse3

386、MMX、Pentium_pro、SSE、SSE2、SSE3、および SSSE3 の命令を使用できます。

sse3

386、MMX、Pentium_pro、SSE、SSE2、および SSE3 の命令を使用できます。

amdsse4a

AMD SSE4a 命令セットを使用します。

sse2

386、MMX、Pentium_pro、SSE、および SSE2 の命令を使用できます。

sse2a

386、MMX、Pentium_pro、SSE、SSE2、および AMD 拡張 (AMD プロセッサ用の 3DNow! と 3DNow! 拡張命令) を使用できます。

amd64

-m64 フラグを利用できるようになる以前に、64 ビットメモリーモデルのコードを取得するために使用された -m64 -xarch=sse2 と同等の旧バージョンのフラグ。

amd64a

AMD プロセッサで -m64 フラグを利用できるようになる以前に、64 ビットメモリーモデルのコードを取得するために使用された -m64 -xarch=sse2a と同等の旧バージョンのフラグ。

sse

386、MMX、Pentium_pro、および SSE の命令を使用できます。

ssea

386、MMX、Pentium_pro、SSE、および AMD 拡張 (AMD プロセッサ用の 3DNow! と 3DNow! 拡張命令) を使用できます。

pentium_pro

386、MMX、および Pentium_pro の命令を使用できます。

pentium_proa

386、MMX、Pentium_pro、および AMD 拡張 (AMD プロセッサ用の 3DNow! と 3DNow! 拡張命令) を使用できます。

generic

ほとんどのプロセッサに共通の命令セットを使用します。

generic64

-m64 フラグを利用できるようになる以前に、64 ビットメモリーモデルのコードを取得するために使用された -m64 -xarch=generic と同等の旧バージョンのフラグ。

native

コンパイラが実行されている現在のシステムプロセッサで使用可能な命令を使用します。

native64

-m64 フラグを利用できるようになる以前に、64 ビットメモリーモデルのコードを取得するために使用された -m64 -xarch=native と同等の旧バージョンのフラグ。

注:

プログラムのいずれかの部分が x86 プラットフォーム上で -m64 でコンパイルまたはリンクされる場合、プログラムのすべての部分もこれらのいずれかのオプションでコンパイルされる必要があります。

各種 Intel 命令セットアーキテクチャー (SSE、SSE2、SSE3、SSSE3 など) の詳細は、Intel-64 および IA-32 の『Intel Architecture Software Developer's Manual』を参照してください。

デフォルト:

-xarch=isa が指定されていない場合のデフォルトは、SPARC プラットフォームでは -xarch=generic、x86/x64 プラットフォームでは -xarch=generic です。

相互の関連性:

このオプションは単体でも使用できますが、-xtarget オプションの展開の一部でもあります。したがって、特定の -xtarget オプションで設定される -xarch のオーバーライドにも使用できます。

たとえば、-xtarget=ultra4 は次のように展開します

-xarch=sparcvis2 -xcache=64/32/4:8192/128/2 -xchip=ultra4

警告:

このオプションを最適化で使用する場合は、適切なアーキテクチャーを選択すると、そのアーキテクチャー上での実行パフォーマンスを向上させることができます。ただし、適切な選択をしなかった場合、パフォーマンスが著しく低下するか、あるいは、作成されたバイナリプログラムが目的のすべてのターゲットプラットフォーム上で実行できない可能性があります。

-xautopar

複数プロセッサ用の自動並列化を有効にします。依存関係の解析 (ループの繰り返し内部でのデータ依存関係の解析) およびループ再構成を実行します。最適化が -xO3 以上でない場合、最適化は -xO3 に引き上げられ、警告が出されます。

-xautopar は OpenMP の並列化指令を受け入れません。

独自のスレッド管理を行なっている場合には、-xautopar を使用しないでください。

実行速度を上げるには、マルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたバイナリの実行速度は低下します。

-xautopar コンパイラオプションによって自動的に並列化されるプログラムを実行する場合に、使用するスレッド数を指定するには、OMP_NUM_THREADS 環境変数を使用します。OMP_NUM_THREADS が設定されない場合、使用されるデフォルトのスレッド数は 2 です。より多くのスレッドを使用するには、OMP_NUM_THREADS をより高い値に設定します。1 つのスレッドだけで実行する場合は、OMP_NUM_THREADS を 1 に設定します。一般的に、OMP_NUM_THREADS は、実行中のシステム上で使用可能な仮想プロセッサ数に設定します。これは、Oracle Solaris の psrinfo(1M) コマンドを使用して判別できます。詳細は、『OpenMP API ユーザーズガイド』を参照してください。

-xautopar を使用してコンパイルとリンクを一度に実行する場合、リンクには自動的にマイクロタスキングライブラリおよびスレッドに対して安全な C 実行時ライブラリが含まれます。-xautopar を使用し、コンパイルとリンクを別の手順で行う場合は、リンクでも cc -xautopar を使用する必要があります。『C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

-xbinopt={prepare|off}

(SPARC) (廃止) -xannotate を参照してください。

あとで最適化、変換、および分析を行えるようにバイナリの準備を整えるよう、コンパイラに指示します (binopt(1) を参照)。このオプションは、実行可能ファイルまたは共有オブジェクトの構築に使用できます。このオプションを有効にするには、最適化レベル -xO1 以上で使用する必要があります。このオプションを使用すると、構築したバイナリのサイズが少し増えます。

コンパイルとリンクを別々に行う場合は、両方の手順に -xbinopt を指定する必要があります。

example% cc -c -xO1 -xbinopt=prepare a.c b.c
example% cc -o myprog -xbinopt=prepare a.o

一部のソースコードがコンパイルに使用できない場合も、このオプションを使用してそのほかのコードがコンパイルされます。このとき、最終的なバイナリを作成するリンク手順で、このオプションを使用する必要があります。この場合、このオプションでコンパイルされたコードだけが最適化、変換、分析できます。

-xbinopt=prepare-g を指定してコンパイルすると、デバッグ情報が取り込まれるので、実行可能ファイルのサイズが増えます。デフォルトは -xbinopt=off です。

-xbuiltin[={%all|%default|%none}]

-xbuiltin オプションは、標準ライブラリ関数を呼び出すコードをさらに最適化するために使用します。このオプションを使用すると、コンパイラは、パフォーマンスに有益な場所で組み込み関数またはインラインシステム関数を置き換えることができます。コンパイラの解説出力を読み取って、どの関数がコンパイラによって置き換えられたかを判定する方法については、er_src(1) のマニュアルページを参照してください。

-xbuiltin=%all を使用した場合、置き換えによって errno の設定が信頼できなくなることがあります。プログラムが errno の値に依存している場合、このオプションの使用は避けてください。

-xbuiltin=%default は、errno を設定しない関数のみをインライン化します。errno の値はどの最適化レベルでも常に正確であり、高い信頼度でチェックできます。-xbuiltin=%default-xO3 以下の場合、コンパイラはどの呼び出しをインライン化すると役立つかを判断し、ほかのものはインライン化しません。

-xbuiltin=%none オプションは、ライブラリ関数のすべての置換を無効にします。

-xbuiltin を指定しない場合、デフォルトは、最適化レベル -xO1 以上でコンパイルするときは -xbuiltin=%default -xO0 のときは -xbuiltin=%none です。引数なしで -xbuiltin を指定する場合、デフォルトは -xbuiltin=%all で、コンパイラはより積極的に組み込み関数を置き換えたり、標準ライブラリ関数をインライン化したりします。

-fast を指定してコンパイルすると、-xbuiltin=%all が追加されます。

注: -xbuiltin オプションでは、システムのヘッダーファイルで定義されているグローバル関数だけがインライン化され、ユーザーが定義した静的関数はインライン化されません。グローバル関数に割り込もうとするユーザーコードによって、定義されていない動作になることがあります。

-xCC

-std=c89 および -xCC を指定すると、コンパイラは C++ スタイルのコンポーネントを受け入れます。このオプションを使用すると、「//」を使用してコメントの始まりを示すことができます。

-xc99[=o]

-xc99 フラグは、C99 標準 (ISO/IEC 9899:1999 Programming Language - C) から実装された機能に対するコンパイラの認識を制御します。

o は、次の値で構成されるコンマ区切りのリストです。

[no_]lib

1990 および 1999 C 標準の両方に存在するルーチンで、1999 C 標準ライブラリの意味を有効にします。オプションの no_ はこの機能を無効にします。

all

サポートされている C99 言語機能に認識可能にして、1990 C 規格と 1999 C 規格の両方にあるルーチンの 1999 C 標準ライブラリ意味処理を有効にします。

none

サポートされている C99 言語機能に認識不可にして、1990 C 規格と 1999 C 規格の両方にあるルーチンの 1999 C 標準ライブラリ意味処理を無効にします。

-xc99 を指定しない場合は、コンパイラではデフォルトで -xc99=all,no_lib が設定されます。

値を指定しないで -xc99 を指定すると、オプションは -xc99=all に設定されます。

-std または -xlang フラグが指定されている場合、-xc99 フラグは使用できません。

-xcache=c

オプティマイザによって使用されるキャッシュプロパティーを定義します。

c には次のいずれかを指定します。

  • generic

  • native

  • s1/l1/a1[/t1]

  • s1/l1/a1[/t1]:s2/l2/a2[/t2]

  • s1/l1/a1[/t1]:s2/l2/a2[/t2]:s3/l3/a3[/t3]

siliai、および ti は次のように定義されます。

si

レベル i のデータキャッシュのサイズ (キロバイト単位)

li

レベル i のデータキャッシュのラインサイズ (バイト単位)

ai

レベル i のデータキャッシュの結合特性

ti

レベル i でキャッシュを共有するハードウェアスレッドの数。ti パラメータはオプションです。指定しない場合は、値 1 が使用されます。

このオプションは、オプティマイザが使用できるキャッシュ特性を指定します。特別なキャッシュ特性が必ず使用されるわけではありません。

このオプションは単独で指定できますが、-xtarget オプションのマクロ展開の一部です。-xtarget オプションによって指定された値をオーバーライドするのが主な目的です。

-xcache の値を次に示します。

generic

ほとんどのプラットフォームで良好なパフォーマンスを得るためのキャッシュ特性を定義します。これはデフォルト値です。

native

ホストプラットフォームで良好なパフォーマンスを得るためのキャッシュ特性を定義します。

s1/l1/a1[/t1]

レベル 1 のキャッシュ特性を定義します。

s1/l1/a1[/t1]:s2/l2/a2[/t2]

レベル 1 と 2 のキャッシュ特性を定義します。

s1/l1/a1[/t1]:s2/l2/a2[/t2]:s3/l3/a3[/t3]

レベル 1、2、3 のキャッシュ特性を定義します。

-xchar=o

このオプションは、文字型が符号なしと定義されているシステムからのコードの移行を容易に行えるようにする目的のみで提供されています。そのようなシステムからの移植以外では、このオプションは使用しないでください。符号付きまたは符号なしであると明示的に示すように書き直す必要があるのは、符号に依存するコードだけです。o は次のいずれかの値に置き換えることができます。

signed

char 型で定義された文字定数および変数を符号付きとして処理します。これは、コンパイル済みコードの動作に影響しますが、ライブラリルーチンの動作には影響しません。

s

signed と同義です。

unsigned

char 型で定義された文字定数および変数を符号なしとして処理します。これは、コンパイル済みコードの動作に影響しますが、ライブラリルーチンの動作には影響しません。

u

unsigned と同義です。

-xchar を指定しない場合は、コンパイラでは -xchar=s が指定されます。-xchar を値なしで指定した場合は、コンパイラでは -xchar=s が指定されます。

-xchar オプションは、-xchar でコンパイルしたコードでのみ、char 型の値の範囲を変更します。このオプションは、システムルーチンまたはヘッダーファイル内のchar型の値の範囲は変更されません。特に、CHAR_MAX および CHAR_MIN の値 (limits.h で定義される) は、このオプションを指定しても変更されません。したがって、CHAR_MAX および CHAR_MIN は、通常の char でエンコード可能な値の範囲は表示されなくなります。

-xchar を使用するときは、マクロ内の値が符号付きの場合があるため、char を定義済みシステムマクロと比較する際には特に注意してください。これは、マクロを通してアクセスされる、エラーコードを返すすべてのルーチンでもっとも一般的です。エラーコードは、一般的には負の値になっています。したがって、charをそのようなマクロによる値と比較するときは、結果は常に false になります。負の数値が符号なしの型の値と等しくなることはありません。

ライブラリを使用してエクスポートしているインタフェース用のルーチンは、-xchar を使用してコンパイルしないように強くお勧めします。Oracle Solaris ABI はchar型を符号付きとして指定し、それに応じてシステムライブラリが動作します。char を符号なしにする影響は、システムライブラリで十分にテストされていません。このオプションを使用する代わりに、char 型の符号の有無に依存しないようにコードを変更してください。型charの符号は、コンパイラやオペレーティングシステムによって異なります。

-xchar_byte_order=o

複数文字からなる文字定数の文字を指定されたバイト順序で配置することにより、整数定数を生成します。o は次のいずれかの値に置き換えることができます。

low

複数文字定数の文字を低いバイトから順に配置します。

high

複数文字定数の文字を高いバイトから順に配置します。

default

複数文字定数の文字を、コンパイルモード (-X[a|c|s|t]) で決定された順に配置します。

-xcheck[=n]

シングルスレッドプログラム内のメインスレッドのスタックオーバーフローおよびマルチスレッドプログラム内のスレーブスレッドスタックに対する実行時検査を実行します。スタックオーバーフローが検出された場合は、SIGSEGVが生成されます。アプリケーションで、スタックオーバーフローで生成される SIGSEGV をほかのアドレス空間違反と異なる方法で処理する必要がある場合は、sigaltstack(2) を参照してください。

n は次のいずれかの値である必要があります。

%all

-xcheck のすべての検査を実行します。

%none

-xcheck の検査を実行しません。

stkovf[action]

実行時にスタックオーバーフローエラーを検出するためのコードを生成します。オプションで、スタックオーバーフローエラーが検出されたときに行うアクションを指定します。

スタックオーバーフローエラーは、スレッドのスタックポインタがスレッドに割り当てられているスタック境界を越えた位置に設定されると発生します。新しいスタックアドレスの先頭が書き込み可能である場合は、エラーが検出されないことがあります。

エラーの直接の結果としてメモリーアクセス違反が発生した場合、スタックオーバーフローエラーが検出され、関連付けられているシグナル (通常は SIGSEGV) が発行されます。このように発生したシグナルは、そのエラーに関連付けられていると言います。

検出されないスタックオーバーフローエラーによって、認識されずにデータが破損している場合があります。検出されないスタックオーバーフローエラーを防ぐには、コンパイルと実行時のサポートが必要となります。

-xcheck=stkovf[action] を指定すると、コンパイラはシステムのページサイズより大きいスタックフレームが使用される場合にスタックオーバーフローエラーを検出するためのコードを生成します。このコードには、無効であるがマップされている可能性があるアドレスにスタックポインタを設定する代わりに、メモリーアクセス違反を強制的に発生させるためのライブラリ呼び出しが含まれています (_stack_grow(3C) を参照)。

オプションの action を指定する場合は、次のいずれかである必要があります。

:detect

action:detect の場合は、そのエラーに通常関連付けられているシグナルハンドラを実行することによって、検出されたスタックオーバーフローエラーが処理されます。

:diagnose

action:diagnose の場合は、関連付けられているシグナルを捕捉し、stack_violation(3C) を呼び出してエラーを診断することによって、検出されたスタックオーバーフローエラーが処理されます。これは action を指定しない場合のデフォルト動作です。

メモリーアクセス違反がスタックオーバーフローエラーと診断されると、次のメッセージが標準エラー出力に出力されます。

ERROR: stack overflow detected: pc=<inst_addr>, sp=<sp_addr>

ここで、<inst_addr> はエラーが検出された命令のアドレスであり、<sp_addr> はエラーが検出されたときのスタックポインタの値です。スタックオーバーフローを検査して前述のメッセージを出力した (該当する場合) あとに、そのエラーに通常関連付けられているシグナルハンドラに制御が渡されます。

-xcheck=stkovf:detect は、システムのページサイズより大きいスタックフレームを持つルーチンに入るときのスタック境界の検査を追加します (_stack_grow(3C) を参照)。追加の境界の検査に関連するコストは、ほとんどのアプリケーションで無視できる程度です。

-xcheck=stkovf:diagnose はスレッドを作成するためのシステムコールを追加します (sigaltstack(2) を参照)。追加のシステムコールに関連するコストは、アプリケーションが新しいスレッドを作成および破棄する頻度によって異なります。

-xcheck=stkovf は Oracle Solaris でのみサポートされます。Linux の C ランタイムライブラリは、スタックオーバーフローの検出をサポートしていません。

no%stkovf

スタックオーバーフローのチェックをオフにします。

init_local

ローカル変数を初期化します。コンパイラが変数を初期化するために使用する事前定義された値のリストについては、『C ユーザーガイド』のこのオプションの説明を参照してください。

no%init_local

ローカル変数を初期化しません。

-xcheck を指定しない場合は、コンパイラではデフォルトで -xcheck=%none が指定されます。引数を指定せずに xcheck を使用した場合は、コンパイラではデフォルトで -xcheck=%all が指定されます。

-xcheck オプションは、コマンド行で累積されません。コンパイラは、コマンドで最後に指定したものに従ってフラグを設定します。

-xchip=c

オプティマイザによって使用されるターゲットプロセッサを指定します。

c は次に示す値のいずれかである必要があります。

このオプションは単独で指定できますが、-xtarget オプションのマクロ展開の一部です。-xtarget オプションによって指定された値をオーバーライドするのが主な目的です。

このオプションは、処理対象となるプロセッサを指定することによって、タイミング特性を指定します。

いくつかの影響があります。

  • 命令の順序 (スケジューリング)

  • コンパイラが分岐を使用する方法

  • 意味が同じもので代用できる場合に使用する命令

SPARC プラットフォームでの -xchip の値を次に示します。

generic

ほとんどの SPARC プラットフォームのアーキテクチャーで最適なパフォーマンスになるようにパラメータを設定します。これはデフォルト値です。

native

ホスト環境に対して最適化されたパラメータを設定します。

old

SuperSPARC プロセッサより前のタイミング特性を使用します。

sparc64vi

SPARC64 VI プロセッサ用に最適化します。

sparc64vii

SPARC64 VII プロセッサ用に最適化します。

sparc64x

SPARC64 X プロセッサ用に最適化します。

sparc64xplus

SPARC64 X+ プロセッサ用に最適化します。

ultra

UltraSPARC(TM) プロセッサ用に最適化します。

ultra2

UltraSPARC II プロセッサ用に最適化します。

ultra2e

UltraSPARC IIe プロセッサ用に最適化します。

ultra2i

UltraSPARC IIi プロセッサ用に最適化します。

ultra3

UltraSPARC III プロセッサ用に最適化します。

ultra3cu

UltraSPARC IIIcu プロセッサ用に最適化します。

ultra3i

UltraSPARC IIIi プロセッサ用に最適化します。

ultra4

UltraSPARC IV プロセッサ用に最適化します。

ultra4plus

UltraSPARC IVplus プロセッサ用に最適化します。

ultraT1

UltraSPARC T1 プロセッサ用に最適化します。

ultraT2

UltraSPARC T2 プロセッサ用に最適化します。

ultraT2plus

UltraSPARC T2+ プロセッサ用に最適化します。

T3

SPARC T3 プロセッサ用に最適化します。

T4

SPARC T4 プロセッサ用に最適化します。

T5

SPARC T5 プロセッサ用に最適化します。

M5

SPARC M5 プロセッサ用に最適化します。

sparc64viiplus

SPARC64 VII plus プロセッサ用に最適化します。

注: 次の SPARC の -xchip の値は廃止されており、将来のリリースで削除される可能性があります: ultraultra2ultra2eultra2iultra3ultra3cuultra3iultra4、および ultra4plus

x86 プラットフォームでの -xchip の値を次に示します。

generic

ほとんどの x86 プラットフォーム用に最適化します。

native

このホストプロセッサ用に最適化します。

core2

Intel Core2 プロセッサ用に最適化します。

nehalem

Intel Nehalem プロセッサ用に最適化します。

opteron

AMD Opteron プロセッサ用に最適化します。

penryn

Intel Penryn プロセッサ用に最適化します。

pentium

Intel Pentium アーキテクチャー用に最適化します。

pentium_pro

Intel Pentium Pro アーキテクチャー用に最適化します。

pentium3

Intel Pentium 3 スタイルプロセッサ用に最適化します

pentium4

Intel Pentium 4 スタイルプロセッサ用に最適化します

sandybridge

Intel Sandy Bridge プロセッサ用に最適化します。

ivybridge

Intel Ivy Bridge プロセッサ用に最適化します。

haswell

Intel Haswell プロセッサ用に最適化します。

westmere

Intel Westmere プロセッサ用に最適化します。

amdfam10

AMD FAM10 プロセッサ用に最適化します。

-xcode=v

(SPARC) コードアドレス空間を指定します。

注: -xcode=pic13 または -xcode=pic32 を指定することによって、共有オブジェクトを作成することを強くお勧めします。-m64 -xcode=abs64 でも作業可能な共有オブジェクトを構築できますが、それらは効率的ではありません。-m64 xarch=v9 -xcode=abs32 または -m64 -xcode=abs44 で作成された共有オブジェクトは動作しません。

-xcode の値を次に示します。

abs32

これは 32 ビットシステムのデフォルトです。32 ビットの絶対アドレスを生成します。コード、データ、および bss を合計したサイズは 2**32 バイトに制限されます。

abs44

これは 64 ビットシステムのデフォルトです。44 ビットの絶対アドレスを生成します。コード、データ、および bss を合計したサイズは 2**44 バイトに制限されます。64 ビットのアーキテクチャーでのみ利用できます。

abs64

64 ビットの絶対アドレスを生成します。64 ビットのアーキテクチャーでのみ利用できます。

pic13

共有ライブラリで使用する位置独立コードを生成します。-Kpic と同等です。32 ビットアーキテクチャーでは最大 2**11 個の固有の外部シンボルを、64 ビットでは 2**10 個の固有の外部シンボルをそれぞれ参照できます。

pic32

共有ライブラリで使用する位置独立コード (大規模モデル) を生成します。-KPIC と同等です。32 ビットアーキテクチャーでは最大 2**30 個の固有の外部シンボルを、64 ビットでは 2**29 個の固有の外部シンボルをそれぞれ参照できます。

32 ビットアーキテクチャーの場合は -xcode=abs32 です。64 ビットアーキテクチャーの場合は -xcode=abs44 です。

共有動的ライブラリを作成する場合、64 ビットアーキテクチャーでは -xcode のデフォルト値である abs44 (abs32 ではなく) を使用できません。-xcode=pic13 または -xcode=pic32 を指定してください。

-xcode=pic13 または -xcode=pic32 のどちらを使用するか決定するときは、elfdump -c (詳細は、elfdump(1) のマニュアルページを参照) を使用することによって、セクションヘッダー (sh_name: .got) を探して、グローバルオフセットテーブル (GOT) のサイズを調べてください。sh_size 値が GOT のサイズです。GOT のサイズが 8,192 バイトに満たない場合は -xcode=pic13、そうでない場合は -xcode=pic32 を指定します。

一般に、-xcode の使用方法の決定に際しては、次のガイドラインに従ってください。

  • 実行可能ファイルを構築する場合は、-xcode=pic13-xcode=pic32 のどちらも使わない。

  • 実行可能ファイルへのリンク専用のアーカイブライブラリを構築する場合は、-xcode=pic13-xcode=pic32 のどちらも使わない。

  • 共有ライブラリを構築する場合は、-xcode=pic13 から開始し、GOT のサイズが 8,192 バイトを超えたら、-xcode=pic32 を使用する。

  • 共有ライブラリへのリンク用のアーカイブライブラリを構築する場合は、-xcode=pic32 のみ使用する。

-xcsi

このオプションは、C コンパイラが、ISO C ソース文字コード要件に準拠していないロケールで記述されたソースコードを受け入れることを許可します。これらのロケールには ja_JP.PCK が含まれます。

: コンパイラの翻訳段階でこのようなロケールの処理が必要になると、コンパイルの時間が非常に長くなることがあります。そのため、このオプションを使用するのは、前述のロケールのソース文字を含むソースファイルをコンパイルする場合に限定すべきです。

コンパイラは、-xcsi が発行されないかぎり、ISO C ソース文字コードの要件に準拠しないロケールで記述されたソースコードを認識しません。

-xdebugformat=[stabs|dwarf]

dwarf 形式でデバッグ情報を読み取るソフトウェアを管理する場合は、-xdebugformat=dwarf を指定します。このオプションにより、コンパイラは dwarf 標準形式を使用してデバッグ情報を生成します。これがデフォルトです。

-xdebugformat=stabs は、stab 標準形式を使用してデバッグ情報を生成します。

-xdebugformat を指定しない場合は、コンパイラでは -xdebugformat=dwarf が指定されます。このオプションには引数が必要です。

このオプションは、-g オプションによって記録されるデータの形式に影響します。-g を指定しなくても、一部のデバッグ情報が記録されますが、その情報の形式もこのオプションによって制御されます。したがって、-g を使用しなくても、-xdebugformat は有効です。

dbx とパフォーマンスアナライザソフトウェアは、stab 形式と dwarf 形式を両方とも認識するので、このオプションを使用しても、ツールの機能にはまったく影響を与えません。

詳細は、dumpstabs(1) および dwarfdump(1) のマニュアルページも参照してください。

-xdebuginfo=a[,a...]

デバッグおよび可観測性情報の出力量を制御します。

用語「タグタイプ」は、タグ付きの型 (構造体、共用体、列挙、およびクラス) を意味します。

次のリストには、サブオプション a に指定できる値が含まれています。サブオプションに接頭辞 no% を適用すると、そのサブオプションが無効になります。デフォルトは -xdebuginfo=%none です。サブオプションなしで -xdebuginfo を指定することは禁止されています。

%none

デバッグ情報は生成されません。これはデフォルト値です。

[no%]line

行番号およびファイル情報を出力します。

[no%]param

パラメータの場所の一覧情報を出力します。スカラー値 (たとえば、intchar *) の完全指定の型情報および型名を出力しますが、タグタイプの完全な定義は出力されません。

[no%]variable

構文的にグローバル変数およびローカル変数である変数の場所の一覧情報を出力します。これには、ファイルおよび関数の static は含まれますが、クラスの static および extern は含まれません。スカラー値 (intchar * など) の完全指定の型情報および型名を出力しますが、タグタイプの完全な定義は出力されません。

[no%]decl

関数と変数の宣言、メンバー関数、およびクラス宣言の静的なデータメンバーを出力します。

[no%]tagtype

param および variable データセットから参照されるタグタイプの完全指定の型情報、およびテンプレートの定義を出力します。

[no%]macro

マクロ情報を出力します。

[no%]codetag

DWARF コードタグ (Stabs N_PATCH とも呼ばれます) を出力します。これは、RTC および discover によって使用されるビットフィールド、構造体のコピー、およびスピルに関する情報です。

[no%]hwcprof

ハードウェアカウンタプロファイルに関する重要な情報を生成します。この情報には、ldst_map、ld/st 命令と参照されているシンボルテーブルのエントリのマッピング、およびバックトラックが分岐先を超えていないことを確認するため使用される分岐先アドレスの branch_target テーブルが含まれています。詳細は、-xhwcprof を参照してください。

注: ldst_map の情報を出力するには、タグタイプ情報が存在している必要があります。この要件が満たされていない場合は、ドライバがエラーを発行します。

次のマクロは、-xdebuginfo およびほかのオプションの組み合わせに次のように展開されます。

 
-g = -g2

-gnone =
        -xdebuginfo=%none
        -xglobalize=no
        -xpatchpadding=fix
        -xkeep_unref=no%funcs,no%vars

-g1 =
        -xdebuginfo=line,param,codetag
        -xglobalize=no
        -xpatchpadding=fix
        -xkeep_unref=no%funcs,no%vars

-g2 =
        -xdebuginfo=line,param,decl,variable,tagtype,codetag
        -xglobalize=yes
        -xpatchpadding=fix
        -xkeep_unref=funcs,vars

-g3 =

        -xdebuginfo=line,param,decl,variable,tagtype,codetag,macro
        -xglobalize=yes
        -xpatchpadding=fix
        -xkeep_unref=funcs,vars
-xdepend[=[yes|no]]

ループの繰り返し内部でのデータ依存関係の解析およびループ再構成を実行します。ループの再構築には、ループ交換、ループ融合、スカラー置換、および「不要な」配列の割り当ての削除が含まれます。

SPARC では、-xdepend-xO3 以上のすべての最適化レベルでオンになり、それより低い最適化レベルではオフになります。また、-xdepend の明示的な設定を指定すると、暗黙的な設定はオーバーライドされます。

x86 では、最適化が -xO3 以上でない場合は、コンパイラは最適化を -xO3 に上げ、警告を発行します。

-xdepend を指定しない場合、デフォルトは -xdepend=no であり、コンパイラがループのデータ依存関係を分析しないことを意味します。-xdepend を指定したが引数を指定しない場合、コンパイラはこのオプションに -xdepend=yes を設定します。これは、ループのデータ依存関係を分析することを意味します。

依存関係の解析は -xautopar に含まれています。依存関係の解析はコンパイル時に実行されます。

依存関係の解析はシングルプロセッサシステムで役立つことがあります。ただし、シングルプロセッサシステムで -xdepend を試す場合は、-xautopar も指定するべきではありません。そうしないと、-xdepend 最適化は、マルチプロセッサシステムのために行われます。

関連項目: -xprefetch_auto_type

-xdryrun

このオプションは -### のマクロです。

-xdumpmacros[=value[,value...]]

マクロがプログラム内でどのように動作しているかを調べたいときに、このオプションを使用します。このオプションは、定義済みマクロ、解除済みマクロ、実際の使用状況といった情報を提供します。マクロの処理順序に従って、標準エラー (stderr) に出力します。-xdumpmacros オプションは、ファイルの終わりまで、または dumpmacros プラグマまたは end_dumpmacros プラグマによって上書きされるまで有効です。

値:

サブオプションに接頭辞 no% を適用すると、そのサブオプションが無効になります。

[no%]defs

すべての定義済みマクロを出力します。

[no%]undefs

すべての解除済みマクロを出力します。

[no%]use

使用されているマクロの情報を出力します

[no%]loc

defs、undefs、および use の位置 (パス名と行番号) も出力します。

[no%]conds

条件付き指令で使用されたマクロの使用情報を出力します。

[no%]sys

システムヘッダーファイル内のマクロについて、すべての定義済みマクロ、解除済みマクロ、使用状況を出力します。

%all

オプションを-xdumpmacros=defs,undefs,use,loc,conds,sys に設定します。この引数は、[no%]形式の引数と併用すると効果的です。たとえば -xdumpmacros=%all,no%sys は、出力からシステムヘッダーマクロを除外しますが、そのほかのマクロに関する情報は依然として出力します。

%none

あらゆるマクロ情報を出力しません。

オプションの値は累積されるので、-xdumpmacros=sys -xdumpmacros=undefs を指定することは、-xdumpmacros=undefs,sys と同じ効果があります。

注: サブオプション locconds、および sys は、オプション defsundefs、および use の修飾子です。locconds、および sys は、単独では効果はありません。たとえば -xdumpmacros=loc,conds,sys は、まったく効果を持ちません。

デフォルト:

引数なしで -xdumpmacros を指定した場合は、-xdumpmacros=defs,undefs,sys を意味します。-xdumpmacros を指定しない場合は、デフォルトで -xdumpmacros=%none が指定されます。

-xe

ソースファイルの構文と意味のチェックだけを行い、オブジェクトや実行可能ファイルの出力はしません。

-xF[=v]

-xF オプションは、リンカーによる関数および変数の最適な並べ替えを有効にします。

このオプションは、コンパイラに対して、関数またはデータ変数、あるいはその両方を別々のセクションフラグメントに配置するように指示します。それによってリンカーは、リンカーの -M オプションで指定されたマップファイル内の指示を使用して、これらのセクションの順序を並べ替えてプログラムのパフォーマンスを最適化できます。通常は、この最適化によって効果が上がるのは、プログラムの実行時間の多くがページフォルト時間に費やされている場合だけです。

最適なパフォーマンスを得るために関数と変数の順序を並べ替えるには、次の処理が必要です。

  1. -xF によるコンパイルとリンク

  2. パフォーマンスアナライザ』のマニュアルにある関数のマップファイルを生成する方法に関する指示に従うか、または『リンカーとライブラリ』にあるデータのマップファイルを生成する方法に関する指示に従います。

  3. リンカーの -M オプションを使用して新しいマップファイルを再リンクします。

  4. アナライザで再実行して、パフォーマンスが向上したかどうかを検証します。

v には次のいずれかの値を指定できます。接頭辞 no% はサブオプションを無効にします。

[no%]func

関数を個別のセクションにフラグメント化します。

[no%]gbldata

グローバルデータ (外部リンケージを持つ変数) を個別のセクションにフラグメント化します。

%all

関数およびグローバルデータを細分化します。

%none

何も細分化しません。

-xF を指定しない場合のデフォルトは、-xF=%none です。引数を指定しないで -xF を指定した場合のデフォルトは、-xF=%none,func です。

関連項目: analyzer(1)、ld(1)

-xglobalize[={yes|no}]

ファイルの静的変数のグローバル化を制御します (関数は制御しません)。

グローバル化は修正継続機能および内部手続きの最適化で必要となる手法であり、それによってファイルの静的シンボルがグローバルに拡張されます。同じ名前のシンボルを区別するために、名前に接頭辞が追加されます。

デフォルトは -xglobalize=no です。-xglobalize と指定することは -xglobalize=yes と指定することと同等です。

相互の関連性:

-xpatchpadding を参照してください。

-xipo もグローバル化を要求し、-xglobalize をオーバーライドします。

-xhelp=flags

コンパイラオプションのサマリーを表示します。

-xhwcprof[={enable|disable}]

(SPARC) -xhwcprof オプションは、データ領域プロファイリングに対するコンパイラのサポートを有効にするために使用します。

-xhwcprof を有効にすると、コンパイラは、プロファイル対象のロード命令およびストア命令と、それらが参照するデータ型および構造体メンバーをツールが関連付けるのに役立つ情報を、-g で生成されたシンボル情報と組み合わせて生成します。プロファイルデータは、ターゲットの命令空間ではなく、データ空間と関連付けられ、命令のプロファイリングだけでは入手の容易でない、動作に関する詳細情報が提供されます。

指定した一連のオブジェクトファイルは、-xhwcprof を使用してコンパイルできます。ただし、-xhwcprof がもっとも役立つのは、アプリケーション内のすべてのオブジェクトファイルに適用したときです。このオプションによって、アプリケーションのオブジェクトファイルに分散しているすべてのメモリー参照を識別したり、関連付けたりするカバレージが提供されます。

コンパイルとリンクを別々に行う場合は、-xhwcprof をリンク時にも使用してくだ さい。将来 -xhwcprof に拡張する場合は、リンク時に -xhwcprof を使用する必要があります。『C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの完全な一覧が記載されています。

-xhwcprof=enable または -xhwcprof=disable のインスタンスは、同じコマンド行にある以前の -xhwcprof のインスタンスをすべてオーバーライドします。

-xhwcprof はデフォルトでは無効です。引数を指定せずに -xhwcprof と指定することは、-xhwcprof=enable と指定することと同等です。

-xhwcprof を使用する場合は最適化を有効にし、デバッグのデータ形式を dwarf (-xdebugformat=dwarf) に設定しておく必要があります。これは、現在の Oracle Solaris Studio コンパイラのデフォルトです。同じコマンド行に -xhwcprof-xdebugformat=stabs を指定することはできません。

-xhwcprof-xdebuginfo を使用して必要最低限のデバッグ情報を自動的に有効にするため、-g は必要ありません。

-xhwcprof-g を組み合わせて使用すると、コンパイラに必要な一時ファイル記憶領域は、-xhwcprof-g を単独で指定することによって増える量の合計を超えて大きくなります。

-xhwcprof は、次のようにさまざまなよりプリミティブなオプションに展開されるマクロとして実装されます。

 
-xhwcprof
        -xdebuginfo=hwcprof,tagtype,line
-xhwcprof=enable
        -xdebuginfo=hwcprof,tagtype,line
-xhwcprof=disable
        -xdebuginfo=no%hwcprof,no%tagtype,no%line

次のコマンドは example.c をコンパイルし、ハードウェアカウンタによるプロファイリングのサポートを指定し、DWARF シンボルを使用してデータ型と構造体メンバーのシンボリック解析を指定します。

example% cc -c -O -xhwcprof -g -xdebugformat=dwarf example.c

ハードウェアカウンタによるプロファイリングについての詳細は、『パフォーマンスアナライザ』のマニュアルを参照してください。

-xinline[=v[,v]...]

v の値は [{%auto,func_name,no%func_name}] です。

-xinline は、リストで指定した関数だけのインライン化を試行します。このリストは、コンマ区切りの関数名のリスト、コンマ区切りの no%func_name 値のリスト、または値 %auto で構成されます。%nofunc_name を指定した場合、コンパイラは指定した関数をインライン化しません。%auto を指定すると、コンパイラはソースファイル内のすべての関数を自動的にインライン化しようとします。

値のリストは、左から右に累積されます。-xinline=%auto,no%foo と指定した場合、コンパイラは foo 以外のすべての関数をインライン化しようとします。-xinline=%bar,%myfunc,no%bar と指定した場合は、myfunc だけのインライン化が試行されます。

最適化レベルを -xO4 以上に設定してコンパイルすると、通常はソースファイルで定義されたすべての関数参照のインライン化が試行されます。-xinline オプションを使用することで、特定の関数をインライン化しないように制限できます。関数または auto を指定せずに -xinline= のみを指定した場合、ソースファイル内のどのルーチンもインライン化されないことを示します。%auto を指定せずに func_name および no%func_name を指定した場合、コンパイラはリストで指定されたそれらの関数のみをインライン化しようとします。最適化レベルが -xO4 以上に設定された状態で、-xinline オプションの値リストで %auto が指定されている場合、コンパイラは no%func_name で明示的に除外されていないすべての関数をインライン化しようとします。

次のいずれかに該当する場合、関数はインライン化されます。

  • 最適化が -xO3 以上に設定されている。

  • 関数のインライン化に効果があって安全。

  • 関数のソースがコンパイル中のファイル内にあるか、または関数が -xipo[=1|2] でコンパイルされたファイル内にある。

コマンド行で -xinline を複数指定した場合は、それらは累積されません。コマンド行の最後の -xinline が、コンパイラがインライン化しようとする関数を指定します。

関連項目: -xldscope

-xinline_param=a[,a[,a]...]

このオプションは、コンパイラが関数呼び出しをインライン化するタイミングを判断するために使用するヒューリスティックを手動で変更するために使用します。

このオプションは -O3 以上でのみ有効となります。次のサブオプションは、自動インライン化がオンである場合に、-O4 以上でのみ有効となります。

次のサブオプションでは、n は正の整数である必要があります。a には次のいずれかを指定できます。

default

すべてのサブオプションの値にそのデフォルト値を設定します。

max_inst_hard[:n]

自動インライン化は、n 疑似命令 (コンパイラの内部表現でカウントされます) より小さい関数のみをインライン化候補と見なします。

これより大きい関数は、インライン化の候補から常に除外されます。

max_inst_soft[:n]

インライン関数のサイズ制限に n 擬似命令 (コンパイラの内部表現でカウントされます) を設定します。

これより大きいサイズの関数はインライン化されることがあります。

max_inst_hard を指定する場合、max_inst_soft の値は max_inst_hard の値以下になるようにします (つまり、max_inst_soft <= max_inst_hard)。

通常、コンパイラの自動インライン化では、呼び出される関数のサイズが max_inst_soft の値より小さい呼び出しのみがインライン化されます。関数のサイズが max_inst_soft の値より大きいが max_inst_hard の値より小さい場合は、関数がインライン化されることがあります。この場合の例は、関数に渡されたパラメータが定数である場合です。

関数の特定の 1 つの呼び出しサイトをインライン化するために max_inst_hard または max_inst_soft の値を変更するかどうかを判断する場合は、-xinline_report=2 を使用して詳細なインライン化メッセージを出力し、そのインライン化メッセージの推奨に従います。

max_function_inst[:n]

自動インライン化によって、関数が最大 n 疑似命令 (コンパイラの内部表現でカウントされます) まで増えることを許可します。

max_growth[:n]

自動インライン化は、プログラムのサイズを最大 n% (サイズは疑似命令で計測されます) 増やすことを許可されます。

min_counter[:n]

関数を自動インライン化するかどうかを判断するために、プロファイリングフィードバック (-xprofile) によって計測される、呼び出しサイトの最小頻度カウンタ。

このオプションは、アプリケーションがプロファイリングフィードバック (-xprofile=use) を指定してコンパイルされている場合にのみ有効です。

level[:n]

このサブオプションは、自動インライン化を適用する度合いを制御するために使用します。-xinline_param=level の設定を高くすると、より多くの関数がインライン化されます。

n は 1、2、または 3 のいずれかである必要があります。

このオプションを指定しない場合、または :n を使用せずに指定した場合、n のデフォルト値は 2 です。

自動インライン化のレベルを指定します

 
level:1    basic inlining
level:2    medium inlining (default)
level:3    aggressive inlining

このレベルによって、次のインライン化パラメータの組み合わせに指定される値が決定されます。

 
max_growth
+ max_function_inst
+ max_inst
+ max_inst_call

level = 1 の場合、すべてのパラメータはデフォルト値の半分になります。level = 2 の場合、すべてのパラメータはデフォルト値になります。level = 3 の場合、すべてのパラメータはデフォルト値の 2 倍になります。

max_recursive_depth[:n]

関数がそれ自体を直接または間接に呼び出している場合は、再帰呼び出しが発生していると言います。

このサブオプションは、再帰呼び出しを最大 n レベルまで自動的にインライン化することを許可します。

max_recursive_inst[:n]

自動再帰インライン化を実行することによって、再帰呼び出しの呼び出し元で増やすことができる疑似命令 (コンパイラの内部表現でカウントされます) の最大数を指定します。

max_recursive_inst および max_recursive_depth の間で相互作用が発生した場合、再帰関数呼び出しは、再帰呼び出しの max_recursive_depth の数まで、またはインライン化される関数のサイズが max_recursive_inst を超えるまでインライン化されます。これらの 2 つのパラメータの設定は、小さい再帰関数のインライン化の度合いを制御します。

-xinline_param=default を指定すると、コンパイラはサブオプションのすべての値にデフォルト値を設定します。

このオプションを指定しない場合、デフォルトは -xinline_param=default です。

値およびオプションのリストは、左から右に適用されます。このため、-xinline_param=max_inst_hard:30,..,max_inst_hard:50 と指定した場合は、値 max_inst_hard:50 がコンパイラに渡されます。

コマンド行に複数の -xinline_param オプションを指定した場合、サブオプションのリストは同様に左から右に適用されます。たとえば、次のように指定した場合は

 
-xinline_param=max_inst_hard:50,min_counter:70 ...
   -xinline_param=max_growth:100,max_inst_hard:100

次の指定と同じになります。

-xinline_param=max_inst_hard:100,min_counter:70,max_growth:100

-xinline_report[=n]

このオプションは、コンパイラによる関数のインライン化に関する報告を生成し、標準出力に書き込みます。報告のタイプは n の値 (0、1、または 2) によって異なります。

0

レポートは生成されません。

1

インライン化パラメータのデフォルト値のサマリー報告が生成されます。

2

インライン化メッセージの詳細な報告が生成され、インライン化された呼び出しサイトとインライン化されなかった呼び出しサイト、およびインライン化されなかったことの簡潔な理由が示されます。この報告には、インライン化されなかった呼び出しサイトをインライン化するために使用できる -xinline_param の推奨値が含まれている場合があります。

-xinline_report を指定しない場合、n のデフォルト値は 0 です。-xinline_report を指定して =n を指定しない場合、デフォルト値は 1 です。

-xlinkopt が指定されている場合は、インライン化されなかった呼び出しサイトに関するインライン化メッセージが正確でないことがあります。

-xinstrument=[no%]datarace]

スレッドアナライザで分析するためにプログラムをコンパイルして計測するには、このオプションを指定します。スレッドアナライザの詳細は、tha(1) のマニュアルページを参照してください。

そうすることで、パフォーマンスアナライザを使用して計測されたプログラムを collect -r races で実行し、データ競合の検出実験を行うことができます。計測されたコードをスタンドアロンで実行できますが、低速で実行されます。

-xinstrument=no%datarace を指定して、スレッドアナライザ用のソースコードの準備をオフにできます。これはデフォルト値です。

-xinstrument を引数なしで指定することは不正です。

コンパイルとリンクを別々に行う場合は、両方の手順で -xinstrument=datarace を指定してください。

このオプションは、プリプロセッサトークン __THA_NOTIFY を定義します。#ifdef __THA_NOTIFY を指定して、libtha(3) ルーチンへの呼び出しを保護できます。

このオプションでは、-g も設定します。

-xipo[=n]

コンパイラが内部手続き解析パスを呼び出すことでプログラムの一部の最適化を実行します。このオプションを指定すると、リンク段階ですべてのオブジェクトファイルを介して最適化を実行し、最適化の対象をコンパイルコマンドのソースファイルだけに限定しません。ただし、-xipo によるプログラム全体の最適化には、アセンブリ (.s) ソースファイルは含まれません。

-xipo は、コンパイル時とリンク時の両方で指定する必要があります。『C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの完全な一覧が記載されています。

解析と最適化は、-xipo を指定してコンパイルされたオブジェクトファイルに限定され、オブジェクトファイルやライブラリまでは及びません。-xipo はマルチフェーズ化されるため、コンパイルとリンクを別々の手順で行う場合は、各手順に -xipo を指定する必要があります。

-xipo オプションは、ファイルを介して最適化を実行する際に必要な情報を追加するため、非常に大きなオブジェクトファイルを生成します。ただし、この補足情報は最終的な実行可能バイナリファイルの一部にはなりません。実行可能プログラムのサイズが拡大するのは、最適化が追加実行されるためです。このコンパイル段階で作成されたオブジェクトファイルには、内部でコンパイルされた追加の分析情報が含まれているため、リンク段階でファイル相互の最適化を実行できます。

n は 0、1、または 2 です。-xipo を引数なしで指定した場合は、-xipo=1 と同等です。-xipo=0 はデフォルト設定であり、-xipo がオフになります。

-xipo=1 を指定した場合は、すべてのソースファイルでインライン化が実行されます。-xipo=2 を指定した場合は、コンパイラは内部手続きの別名解析と、メモリーの割り当ておよび配置の最適化を実行し、キャッシュ性能を向上させます。

-xipo の重要な検討事項を次に示します。

  • 少なくとも最適化レベル -xO4 を必要とします。

  • -xipo なしでコンパイルされたオブジェクトは、-xipo でコンパイルされたオブジェクトと自由にリンクできます。

次の例では、コンパイルとリンクが単一ステップで実行されます。

cc -xipo -xO4 -o prog  part1.c part2.c part3.c

次の例では、個別のステップでコンパイルとリンクが実行されます。

 
cc -xipo -xO4 -c part1.c part2.c
cc -xipo -xO4 -c part3.c
cc -xipo -xO4 -o prog  part1.o part2.o part3.o

このコンパイル段階で作成されたオブジェクトファイルには、内部でコンパイルされた追加の分析情報が含まれているため、リンク段階でファイル相互の最適化を実行できます。

ここでの制限事項は、-xipo でコンパイルを実行しても、ライブラリがファイル相互の内部手続き解析に含まれない点です。次の例を参照してください。

 
cc -xipo -xO4 one.c two.c three.c
ar -r mylib.a one.o two.o three.o
cc -xipo -xO4 -o myprog main.c four.c mylib.a

ここでは、内部手続きの最適化が one.c、two.c、three.c の間、および main.c と four.c の間で行われていますが、main.c または four.c と mylib.a のルーチンの間では行われていません。(最初のコンパイルでは、未定義のシンボルに関する警告が生成される可能性がありますが、コンパイルとリンクの手順であるため、内部手続きの最適化は行われます。)

-xipo=2 による内部手続き解析を行うべきでないケース:

内部手続き解析では、コンパイラは、リンクステップでオブジェクトファイル群を操作しながら、プログラム全体の解析と最適化を試みます。このとき、コンパイラは、このオブジェクトファイル群に定義されているすべての foo() 関数 (またはサブルーチン) に関して次の 2 つのことを仮定します。

  1. 実行時、このオブジェクトファイル群の外部で定義されている別のルーチンによって foo() が明示的に呼び出されない。

  2. オブジェクトファイル群内のルーチンからの foo() 呼び出しが、そのオブジェクトファイル群の外部に定義されている別のバージョンの foo() によって置き換えられることがない。

特定のアプリケーションについて前提 (1) が当てはまらない場合は、-xipo=2 を使用してコンパイルしないでください。

仮定 (2) が真でない場合は、-xipo=1 または -xipo=2 でコンパイルしないでください。

1 例として、独自のバージョンの malloc() で関数 malloc() を置き換え、-xipo=2 を指定してコンパイルするケースを考えてみましょう。-xipo=2 を使ってコンパイルする場合、その独自のコードとリンクされる malloc() を参照する、あらゆるライブラリのあらゆる関数のコンパイルで -xipo=2 を使用する必要があるとともに、リンクステップでそれらのオブジェクトファイルが必要になります。この方法はシステムライブラリには使用できない可能性があるため、独自のバージョンの malloc() を -xipo=2 を使用してコンパイルしないでください。

もう 1 つの例として、別々のソースファイルにある foo() および bar() という 2 つの外部呼び出しを含む共有ライブラリを構築するケースを考えてみましょう。また、bar() は foo() を呼び出すと仮定します。foo() が実行時に割り込み処理される可能性がある場合、foo() または bar() のソースファイルを -xipo=1 または -xipo=2 でコンパイルしないでください。それ以外の場合、foo() が bar() にインライン化され、それによって正しくない結果になる可能性があります。

関連項目: -xjobs and -xipo_archive

-xipo_archive[=a]

新しい -xipo_archive オプションは、実行可能ファイルを生成する前に、-xipo を付けてコンパイルされ、アーカイブライブラリ (.a) の中に存在しているオブジェクトファイルを使用してリンカーに渡すオブジェクトファイルを最適化します。コンパイル中に最適化されたライブラリに含まれるオブジェクトファイルはすべて、その最適化されたバージョンに置き換えられます。

a には、次のいずれかを指定できます。

writeback

実行可能ファイルを生成する前に、アーカイブライブラリ (.a) に存在する -xipo でコンパイルしたオブジェクトファイルを使ってリンカーに渡すオブジェクトファイルを最適化します。コンパイル中に最適化されたライブラリに含まれるオブジェクトファイルは、すべてその最適化されたバージョンに置き換えられます。

アーカイブライブラリの共通セットを使用する並列リンクでは、最適化されるアーカイブライブラリの独自のコピーを、各リンクでリンク前に作成する必要があります。

readonly

実行可能ファイルを生成する前に、アーカイブライブラリ (.a) に存在する -xipo でコンパイルしたオブジェクトファイルを使ってリンカーに渡すオブジェクトファイルを最適化します。

-xipo_archive=readonly オプションによって、リンク時に指定されたアーカイブライブラリのオブジェクトファイルに対する、モジュール相互のインライン化および内部手続きデータフロー解析が有効になります。ただし、モジュール間のインライン化によってほかのモジュールに挿入されたコード以外のアーカイブライブラリのコードに対する、モジュール間の最適化は有効になりません。

アーカイブライブラリ内のコードにモジュール相互の最適化を適用するには、-xipo_archive=writeback を指定する必要があります。これを行うと、コードが抽出されたアーカイブライブラリの内容が変更されることがあります。

none

デフォルト。アーカイブファイルの処理は行いません。コンパイラは、-xipo を使用してコンパイルされたオブジェクトファイル、およびリンク時にアーカイブライブラリから抽出されたオブジェクトファイルに対して、モジュール相互のインライン化または最適化を適用しません。これを適用するには、-xipo と、-xipo_archive=readonly または -xipo_archive=writeback のいずれかをリンク時に指定する必要があります。

-xipo_archive をフラグなしで指定することは不正です。

-xipo_build=[yes|no]

-xipo_build を指定せずに -xipo を使用すると、コンパイラを通じて 2 回受け渡しが行われることになります (オブジェクトファイルを生成するとき、およびリンク時にファイル間の最適化を実行するとき)。-xipo_build を設定すると、最初の受け渡し時には最適化されず、リンク時にのみ最適化されることによって、コンパイルの時間が短縮されます。-xipo を指定するとリンク時に最適化が実行されるため、オブジェクトファイルを最適化する必要はありません。-xipo_build を指定して作成された最適化されていないオブジェクトファイルを -xipo を指定せずにリンクして最適化すると、アプリケーションのリンクが未解決のシンボルエラーで失敗します。

例:

次の例では、.o ファイルの高速ビルドを実行し、リンク時にファイル間の最適化を行なっています。

 
% cc -O -xipo -xipo_build -o code1.o -c code1.c
% cc -O -xipo -xipo_build -o code2.o -c code2.c
% cc -O -xipo -o a.out code1.o code2.o

-xipo_build は、.o ファイルを作成するときに -O をオフにして、ファイルを迅速に作成します。完全な -O の最適化は、-xipo のファイル間の最適化の一部としてリンク時に実行されます。

次の例は、-xipo を使用せずにリンクしています。

 
% cc -O -o a.out code1.o code2.o

-xipo_build を指定して code1.o または code2.o を生成した場合、リンク時にエラーになり、シンボル __unoptimized_object_file が未解決であることが示されます。

.o ファイルを別々に作成する場合、デフォルトの動作は -xipo_build=no です。ただし、実行可能ファイルまたはライブラリがソースファイルから 1 回の受け渡しで作成された場合は、-xipo_build が暗黙的に有効になります。例:

 
% cc -fast -xipo a.c b.c c.c

この場合、a.ob.o、および c.o が生成される最初の受け渡しで、-xipo_build=yes が暗黙的に有効になります。この動作を無効にするには、オプション -xipo_build=no を含めます。

-xivdep[=p]

ivdep プラグマの解釈を無効または設定します。

ivdep プラグマは、最適化の目的でループ内で検出された、配列参照へのループがもたらす依存関係の一部またはすべてを無視するようにコンパイラに指示します。これによってコンパイラは、マイクロベクトル化、分散、ソフトウェアパイプラインなど、それ以外の場合は不可能なさまざまなループ最適化を実行できます。これは、依存関係が重要ではない、または依存関係が実際に発生しないことをユーザーが把握している場合に使用されます。

#pragma ivdep 指令の解釈は、-xivdep オプションの値に応じて異なります。

p の次の値は、次のように解釈されます。

loop

ループキャリーのベクトル依存関係と想定されるものを無視します。

loop_any

ループキャリーのベクトル依存関係をすべて無視します。

back

逆方向のループキャリーのベクトル依存関係と想定されるものを無視します。

back_any

逆方向のループキャリーのベクトル依存関係をすべて無視します。

none

依存関係を無視しません (ivdep プラグマの無効化)。

これらの解釈は、ほかのベンダーの ivdep プラグマの解釈との互換性のために提供されます。

-xjobs={n|auto}

複数のプロセスでコンパイルします。このフラグを指定しない場合、デフォルトの動作は -xjobs=auto です。

コンパイラが処理を行うために生成するプロセスの数を設定するには、-xjobs オプションを指定します。このオプションを使用すると、マルチ CPU マシン上での構築時間を短縮できます。現時点では、-xjobs とともに使用できるのは -xipo オプションだけです。-xjobs=n を指定すると、内部手続きオプティマイザ は、さまざまなファイルをコンパイルするために呼び出せるコードジェネレータインスタンスの最大数として n を使用します。

一般に、n に指定する確実な値は、使用できるプロセッサ数に 1.5 を掛けた数です。生成されたジョブ間のコンテキスト切り替えにより生じるオーバーヘッドのため、使用できるプロセッサ数の何倍もの値を指定すると、パフォーマンスが低下することがあります。また、あまり大きな数を使用すると、スワップ領域などシステムリソースの限界を超える場合があります。

-xjobs=auto を指定すると、コンパイラは適切な並列ジョブの数を自動的に選択します。

-xjobs には必ず値を指定する必要があります。値を指定しないと、エラー診断が表示され、コンパイルは中止します。

-xjobs を指定しない場合、デフォルトの動作は -xjobs=auto です。これは、コマンド行に -xjobs=n を追加することによってオーバーライドできます。コマンド行で複数の -xjobs の指定がある場合、一番右にあるインスタンスの指定によってオーバーライドされます。

例:

次の例は、-xipo に最大 3 つの並列プロセスを使用しています。

 
% cc -xipo -xO4 -xjobs=3 t1.o t2.o t3.o

次の例は、-xipo に単一のプロセスを順次リンクしています。

 
% cc -xipo -xO4 -xjobs=1 t1.o t2.o t3.o

次の例は、コンパイラが -xipo のジョブ数を選択して、並列でリンクしています。

 
% cc -xipo -xO4  t1.o t2.o t3.o

これは、-xjobs=auto を明示的に指定したときの動作とまったく同じです。

 
% cc -xipo -xO4 -xjobs=auto t1.o t2.o t3.o
-xkeep_unref[={[no%]funcs, [no%]vars}]

参照されない関数および変数の定義を維持します。接頭辞 no%は、その定義を場合によっては削除することをコンパイラに許可します。

デフォルトは no%funcs,no%vars です。-xkeep_unref を指定することは -xkeep_unref=funcs,vars を指定することと同等であり、-keep_unref によってすべてが維持されることを意味します。

-xkeepframe[=[%all,%none,function_name,no%function_name]]

指定した関数のスタック関連の最適化を禁止します。

%all を指定すると、すべてのコードでスタック関連の最適化を禁止します。%none を指定すると、すべてのコードでスタック関連の最適化を許可します。

このオプションがコマンド行で指定されていないと、コンパイラは -xkeepframe=%none を使用します。

このオプションがコマンド行に値なしで指定されると、コンパイラは -xkeepframe=%all を使用します。

このオプションは累積的で、コマンド行で複数回指定できます。例:

-xkeepframe=%all -xkeepframe=no%func1

は、スタックフレームが func1 を除くすべての関数で保持されることを示します。また、-xkeepframe-xregs=frameptr をオーバーライドします。例:

-xkeepframe=%all -xregs=frameptr

は、すべての関数のスタックを保持しますが、-xregs=frameptr の最適化は行われないことを示します。

-xlang=language

-xlang フラグは、-std フラグによって指定されたデフォルトの libc の動作をオーバーライドするために使用できます。language は次のいずれかである必要があります。

c89

libc のランタイムライブラリの動作が C90 標準に準拠するように指定します。

c99

libc のランタイムライブラリの動作が C99 標準に準拠するように指定します。

c11

c99 と同等です。c99 および c11 の libc のランタイムライブラリの動作は同じです。

-xlang を指定しない場合のデフォルト値は、-std=c99 を指定したときは c99、および -std=c11 を指定したときは c11 です。それ以外の場合、デフォルト値は c89 です。

-xlang を指定した場合、-Xc-Xa-Xt-Xs、および -xc99 フラグは使用できません。一緒に指定するとコンパイラによってエラーが発行されます。

別々の手順でコンパイルしてリンクする場合は、両方の手順に同じ -xlang の値を使用する必要があります。

言語が混合したリンクの場合、ドライバは次の順序で言語階層を使用してください。

C++

CC コマンドを使用します。詳細は、 CC (1) を参照してください。

Fortran 95 (または Fortran 90)

f95 コマンドを使用します。詳細は、 f95 (1) を参照してください。

Fortran 77

f95 -xlang=f77 を使用します。詳細は、 f95 (1) を参照してください。

C

cc コマンドを使用します。

-xldscope={v}

外部シンボルの定義に対するデフォルトのリンカースコープを変更します。デフォルトを変更すると、実装がよりうまく隠されるので、より早く、より安全に共有ライブラリを使用できます。

v には、次のいずれかを指定します。

global

グローバルリンカースコープは、もっとも制限の少ないリンカースコープです。シンボルに対する参照はすべて、シンボルを定義する最初の動的モジュール内の定義に結合します。このリンカースコープは、extern シンボルの現在のリンカースコープです。

symbolic

シンボリックリンカースコープは、グローバルリンカースコープよりも制限的です。リンクしている動的モジュール内のシンボルに対する参照はすべて、モジュール内に定義されたシンボルに結合します。モジュールの外側では、シンボルはグローバルと同じです。このリンカースコープはリンカーオプション -Bsymbolic に対応します。

hidden

隠蔽リンカースコープは、シンボリックリンカースコープやグローバルリンカースコープよりも制限されたリンカースコープです。動的モジュール内の参照はすべて、そのモジュール内の定義に結合します。シンボルはモジュールの外側では認識されません。

-xldscope を指定しない場合は、コンパイラでは -xldscope=global が指定されます。-xldscope を引数なしで指定することは不正です。引数を指定しないで -xldscope を指定すると、エラーが表示されます。コマンド行にこのオプションの複数のインスタンスがある場合、一番右にあるインスタンスが実行されるまで相互にオーバーライドします。

クライアントがライブラリ内の関数をオーバーライドできるようにする場合は必ず、ライブラリの構築時に関数がインラインで生成されないようにしてください。-xinline に関数名を指定した場合、#pragma inline を使用した場合、-xO4 以上でコンパイルした場合 (この場合、インライン化は自動で行われます)、インライン指定子を使用した場合、またはファイル間の最適化を使用する場合、コンパイラは関数をインライン化します。

たとえば、ABC というライブラリにデフォルトの allocator 関数があり、ライブラリクライアントがその関数を使用でき、ライブラリの内部でも使用されるものとします。

void* ABC_allocator(size_t size) { return malloc(size); }

-xO4 以上でライブラリを構築すると、コンパイラはライブラリコンポーネント内での ABC_allocator の呼び出しをインライン化します。ライブラリクライアントが ABC_allocator を独自の allocator と置き換える場合、置き換えられた allocator は ABC_allocator を呼び出したライブラリコンポーネント内では実行されません。最終的なプログラムには、この関数の相異なるバージョンが含まれることになります。

__hidden 指定子または __symbolic 指定子で宣言されたライブラリ関数は、ライブラリの構築時にインラインで生成できます。これらがクライアントによって上書きされることは想定されていません。詳細は、『C ユーザーガイド』の第 2 章「C コンパイラ実装に固有の情報」を参照してください。

__global 指定子で宣言されたライブラリ関数はインラインで宣言しないでください。また、-xinline コンパイラオプションを使用することによってインライン化されることがないようにしてください。

関連項目:

-xinline-xOld(1)。

-xlibmieee

例外時の数学ルーチンの戻り値を強制的に IEEE 754 形式にします。そのような場合、例外メッセージは出力されず、errno は信頼できません。

-xlibmil

実行速度を上げるために一部のライブラリルーチンをインライン化します。このオプションは、システムの浮動小数点オプションおよびプラットフォームに対する適切なアセンブリ言語のインラインテンプレートを選択します。-xlibmil は、-xinline フラグの一部として関数が指定されていても、関数をインライン化します。

ただし、こうした置換によって errno の値の信頼性が失われることがあります。プログラムが errno の値に依存している場合、このオプションの使用は避けてください。詳細は、このマニュアルページの最後の「注意事項」のセクションを参照してください。

-xlibmopt

最適化された数学ルーチンライブラリをコンパイラが使用できるようにします。このオプションを使用するときは -fround=nearest を指定することによって、デフォルトの丸めモードを使用する必要があります。

数学ルーチンライブラリは最高のパフォーマンスが得られるように最適化されており、通常、高速なコードを生成します。この結果は、通常の数学ライブラリが生成する結果と少し異なることがあります。その場合、通常、異なるのは最後のビットです。

ただし、こうした置換によって errno の値の信頼性が失われることがあります。プログラムが errno の値に依存している場合、このオプションの使用は避けてください。詳細は、このマニュアルページの最後の「注意事項」のセクションを参照してください。

このライブラリオプションをコマンド行に指定する順序は重要ではありません。

相互の関連性:

このオプションは、-fast オプションで暗黙に指定されます。

関連項目:

-fast-xnolibmopt

-xlic_lib=sunperf

(廃止) Sun Performance Library とリンクするときは、-library=sunperf を使用してください。

-xlicinfo

このオプションは、コンパイル時には暗黙的に無視されます。

-xlinkopt[=level]

再配置可能なオブジェクトファイルのリンク時の最適化を実行するようにコンパイラに指示します。

ポストオプティマイザは、リンク時にバイナリオブジェクトコードに対して高度なパフォーマンス最適化を多数実行します。値 level には、実行する最適化のレベルを 0、1、2 のいずれかで設定します。

最適化レベルは次のとおりです。

0

ポストオプティマイザは無効です。これがデフォルトです。

1

リンク時の命令キャッシュカラーリングと分岐の最適化を含む、制御フロー解析に基づき最適化を実行します。

2

リンク時のデッドコードの除去とアドレス演算の簡素化を含む、追加のデータフロー解析を実行します。

level パラメータなしで -xlinkopt を使用することは、-xlinkopt=1 を指定することと同じです。

このような最適化は、リンク時にオブジェクトのバイナリコードを解析することによって実行されます。オブジェクトファイルは書き換えられませんが、最適化された実行可能コードは元のオブジェクトコードとは異なる場合があります。

このオプションは、プログラム全体のコンパイル時に、プロファイルのフィードバックとともに使用されると、もっとも効果的です。

コンパイル手順とリンク手順を別々にコンパイルする場合は、両方の手順に -xlinkopt を指定する必要があります。

 
example% cc -c -xlinkopt a.c b.c
example% cc -o myprog -xlinkopt=2 a.o

C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの完全な一覧が記載されています。

level パラメータは、コンパイラのリンク時にだけ使用されます。前述の例では、オブジェクトバイナリが暗黙的に指定された 1 のレベルでコンパイルされていても、使用される最適化後のレベルは 2 です。

-xlinkopt でコンパイルする場合は、-zcombreloc リンカーオプションは使用しないでください。

-xlinkopt をリンク時に有効にするには、少なくともコンパイルコマンドで -xlinkopt を使用する必要があります。-xlinkopt を指定しないでコンパイルされたオブジェクトバイナリについても、オプティマイザは限定的な最適化を実行できます。

-xlinkopt は、コンパイラのコマンド行にある静的ライブラリのコードは最適化しますが、コマンド行にある共有 (動的) ライブラリのコードは最適化しません。-xlinkopt は、共有ライブラリを構築する (-G でコンパイルする) 場合にも使用できます。

リンク時のポストオプティマイザは、実行時のプロファイルフィードバックとともに使用するのがもっとも効果的です。プロファイリングによって、コードでもっともよく使用される部分ともっとも使用されない部分が明らかになるので、オプティマイザはそれに基づき処理を集中するよう指示されます。これは、リンク時に実行されるコードの最適な配置が命令のキャッシュミスを低減できるような、大きなアプリケーションにとって特に重要です。このようなコンパイルの例を次に示します。

 
example% cc -o progt -xO5 -xprofile=collect:profdir file.c
example% progt
example% cc -o prog -xO5 -xprofile=use:profdir -xlinkopt file.c

プロファイルのフィードバックの使用についての詳細は、-xprofile を参照してください。

このオプションを指定してコンパイルすると、リンク時間がわずかに増えます。オブジェクトファイルも大きくなりますが、実行可能ファイルのサイズは変わりません。-xlinkopt-g を指定してコンパイルすると、デバッグ情報が取り込まれるので、実行可能ファイルのサイズが増えます。

-xloopinfo

並列化されているループとされていないループを示します。このオプションは、通常、-xautopar オプションとともに使用します。

-xM

指定された C プログラムに対してプリプロセッサのみを実行し、Makefile 依存関係を生成して結果を標準出力に送信することを要求します。(Makefile および依存関係の詳細は、make (1) のマニュアルページを参照)。

-xM1

-xM と同じですが、-Xs モードで -xM1 がサポートされず、-xM1/usr/include のヘッダーファイルの依存関係を報告しません。例:

 
example% more hello.c
#include <stdio.h>
main()
{
    (void) printf ("hello\n");
}
example% cc -xM hello.c
hello.o: hello.c
hello.o: /usr/include/stdio.h

-xM1 オプションを使用してコンパイルすると、ヘッダーファイルの依存関係の出力が抑制されます。

example% cc -xM1 hello.c
hello.o: hello.c
-xMD

-xM と同様に Makefile の依存関係を生成しますが、コンパイルを続行します。-xMD は、-o 出力ファイル名 (指定されている場合) または入力ソースファイル名から派生した Makefile の依存関係情報のための出力ファイルを生成して、ファイル名接尾辞を .d に置き換え (または追加) します。-xMD-xMF を指定する場合、-xMF で指定したファイルに、プリプロセッサはすべての Makefile の依存関係情報を書き込みます。複数のソースファイルを使って -xMD -xMF または -xMD -o filename でコンパイルすることは許可されず、エラーが生成されます。依存関係ファイルがすでに存在する場合は上書きされます。

-xMF filename

Makefile の依存関係の出力先ファイルを指定するには、このオプションを使用します。1 つのコマンド行で、複数の入力ファイルに対して -xMF で個別のファイル名を指定することはできません。複数のソースファイルで -xMD -xMF または -xMMD -xMF を使用してコンパイルすることはできず、エラーが生成されます。依存関係ファイルがすでに存在する場合は上書きされます。

このオプションは -xM または -xM1 とともに使用できません。

-xMMD

システムヘッダーファイルを除き、Makefile の依存関係を生成するには、このオプションを使用します。このオプションは -xM1 と同じ機能ですが、コンパイルは続行されます。-xMMD は、-o 出力ファイル名 (指定されている場合) または入力ソースファイル名から派生した Makefile の依存関係情報のための出力ファイルを生成して、ファイル名接尾辞を .d に置き換え (または追加) します。-xMF を指定する場合、コンパイラは代わりに、ユーザーが指定したファイル名を使用します。複数のソースファイルで -xMMD -xMF または -xMMD -o filename を使用してコンパイルすることはできず、エラーが生成されます。依存関係ファイルがすでに存在する場合は上書きされます。

-xMerge

データセグメントをテキストセグメントとマージするように cc に指示します。このコンパイルで生成するオブジェクトファイルで初期化されるデータは読み取り専用なので、ld -N でリンクしていないかぎり、プロセスどうしで共有できます。

-xMerge-ztext、および -xprofile=collect を一緒に使用しないでください。-xMerge を指定すると、静的に初期化されたデータを読み取り専用記憶領域に強制的に配置します。 -ztext を指定すると、位置に依存するシンボルを読み取り専用記憶領域内で再配置することを禁止します。-xprofile=collect を指定すると、書き込み可能記憶領域内で、静的に初期化された、位置に依存するシンボルの再配置を生成します。

-xmaxopt[=v]

このコマンドは pragma opt のレベルを指定されたレベルに制限します。デフォルト値は -xmaxopt=off であり、pragma opt は無視されます。引数を指定せずに -xmaxopt を指定した場合は、-xmaxopt=5 を指定することと同等です。

-xO-xmaxopt の両方を指定する場合、-xO で設定する最適化レベルが -xmaxopt 値を超えてはいけません。

-xmemalign=ab

(SPARC) データの境界整列についてコンパイラが行う想定を制御するには、-xmemalign オプションを使用します。境界整列が潜在的に正しくないメモリーアクセスにつながる生成コードを制御し、境界整列が正しくないアクセスが発生したときのプログラム動作を制御すれば、より簡単に SPARC にコードを移植できます。

メモリーの予想される最大境界整列と境界整列していないデータアクセスの動作を指定します。a (境界整列) と b (動作) の両方の値を指定する必要があります。a は、最大想定メモリー境界整列を指定します。b は、不正境界整列メモリーアクセスの動作を指定します。

コンパイル時に境界整列が判別できるメモリーへのアクセスの場合、コンパイラはそのデータの境界整列に適したロードおよびストア命令を生成します。

境界整列がコンパイル時に決定できないメモリーアクセスの場合、コンパイラは、境界整列を想定して、必要なロード/ストア命令のシーケンスを生成します。

実行時の実際のデータ境界整列が指定された整列に達しない場合、境界整列に失敗したアクセス (メモリー読み取りまたは書き込み) が行われると、トラップが発生します。このトラップに対して発生する可能性のある応答は次の 2 つです。

  • OS がトラップを SIGBUS シグナルに変換します。プログラムがこのシグナルを捕捉しなかった場合、プログラムは異常終了します。プログラムがシグナルを捕捉しても、境界整列に失敗したアクセスが成功するわけではありません。

  • 境界整列に失敗したアクセスが正常に成功したかのように OS がアクセスを解釈し、プログラムに制御を戻すことによってトラップを処理します。

に使用可能な値は次のとおりです。

1

最大 1 バイトの境界整列

2

最大 2 バイトの境界整列

4

最大 4 バイトの境界整列

8

最大 8 バイトの境界整列

16

最大 16 バイトの境界整列

b に受け入れられる値を次に示します。

i

アクセスを解釈し、実行を継続する

s

シグナル SIGBUS を発生させます。

f

64 ビットの SPARC プログラム (-m64) の場合のみ。4 バイト以下の境界整列にだけ SIGBUS 信号を発生させます。それ以外ではアクセスを解釈して実行を継続します。32 ビットプログラムの場合、f フラグは i と同等です。

bif のいずれかに設定してコンパイルしたオブジェクトファイルにリンクする場合は、必ず、-xmemalign を指定する必要があります。『C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの完全な一覧が記載されています。

デフォルト:

64 ビットの SPARC プログラム (-m64) のデフォルトは -xmemalign=8s です。

32 ビットの SPARC プログラム (-m32) のデフォルトは -xmemalign=8i です。

-xmemalign を使用したが値を指定しない場合、すべてのプラットフォームでデフォルトは -xmemalign=1i です。

-xmodel=[a]

(x86) -xmodel オプションは、Oracle Solaris x64 プラットフォーム上の共有オブジェクトのデータアドレスモデルを決定します。そのようなオブジェクトのコンパイルにのみ指定してください。

このオプションは、64 ビット対応の x64 プロセッサで -m64 も指定した場合にのみ有効です。

a には、次のいずれかを指定できます。

small

このオプションは、実行されるコードの仮想アドレスがリンク時にわかっていて、すべてのシンボルが 0 ~ 2^31 - 2^24 - 1 の範囲の仮想アドレスに配置されることがわかっているスモールモデルのコードを生成します。

kernel

すべてのシンボルが 2^64 - 2^31 ~ 2^64 - 2^24 の範囲で定義されるカーネルモデルのコードを生成します。

medium

データセクションへのシンボリック参照の範囲に関する前提がないミディアムモデルのコードを生成します。テキストセクションのサイズとアドレスは、スモールコードモデルの場合と同じように制限されます。静的データが大量にあるアプリケーションでは、-m64 を指定してコンパイルするときに、-xmodel=medium が必要になることがあります。

このオプションは累積的ではないため、コンパイラは、コマンド行にある -xmodel の右端のインスタンスに従ってモデル値を設定します。

-xmodel を指定しない場合、コンパイラは -xmodel=small と見なします。引数を指定せずに-xmodel を指定すると、エラーになります。

すべての変換単位をこのオプションでコンパイルする必要はありません。アクセスするオブジェクトが範囲内にあれば、選択したファイルをコンパイルできます。

すべての Linux システムが、ミディアムモデルをサポートしているわけではありません。

-xnolib

ライブラリをデフォルトでリンクしないでください。つまり、-l オプションをリンカー ld に渡さないでください。通常は、cc ドライバが -lcld に渡します。

-xnolib を使用する場合、すべての -l オプションをユーザーが明示的に渡さなければいけません。

-xnolibmil

数学ライブラリルーチンをインライン化しません。次に示すように、-xnolibmil-fast オプションのあとに使用します。

cc -fast -xnolibmil ...
-xnolibmopt

前に指定した -xlibmopt オプションをオフにして、最適化された数学ルーチンライブラリとリンクしないでください。

次に示すように、このオプションはコマンド行で -fast オプションを指定した場合は、そのあとに使用してください。

example% cc -fast -xnolibmopt ...
-xnorunpath

実行可能ファイルに共有ライブラリへの実行時検索パスを組み込みません。

通常、cc は -R パスをリンカーに渡しません。-R パスをリンカーに渡すオプションはいくつかあります (-xliclib=sunperf-xopenmp など)。-xnorunpath オプションを使用すると、これを防止できます。

このオプションは、プログラムで使用される共有ライブラリに異なるパスを持つ可能性がある顧客に出荷される実行可能ファイルを構築する場合に推奨されます。

-xOn

最適化レベルを指定します (n)。(大文字 O の後ろに数字 1、2、3、4、または 5 を続けます)

一般に、プログラムのコンパイル時の最適化レベルが高いと、実行時のパフォーマンスも向上します。ただし、最適化レベルを高くすると、コンパイル時間が長くなり、実行可能ファイルのサイズが大きくなります。

-xOn で使用できるレベルは 5 つあります。各レベルでコンパイラによって実行される実際の最適化は、各コンパイラのリリースによって異なる場合があります。ここでは要約のみを示しています。

オプティマイザがメモリーを使い切ると、レベルを下げて最適化をやり直します。以降のルーチンでは元のレベルに戻ってコンパイルを行います。

値:

-xO1

基本的でローカルな最適化のみを行います。

-xO2

基本的なローカルおよびグローバルな最適化を行います。通常、生成されるコードのサイズがもっとも小さくなります。

-xO3

関数レベルでグローバルな最適化を行います。通常、このレベルおよび -xO4 は、-xspace オプションとともに使用すると、最小のコードサイズになります。

-xO4

同じファイル内の関数の自動インライン化を追加します。通常、-xO4-xspace オプションと組み合わせないかぎり、コードが大きくなります。

インライン化されるルーチンの制御については、-inline を参照してください。

-xO5

もっとも高いレベルの最適化を行います。これを使用するのは、コンピュータのもっとも多くの時間を小さなプログラムが使用している場合だけにしてください。この最適化アルゴリズムは、コンパイルの所要時間が長く、また実行時間が確実に短縮される保証がありません。このレベルの最適化によってパフォーマンスが改善される確率を高くするには、プロファイルのフィードバックを使用します。-xprofile=collect|use を参照してください。

デフォルトでは最適化は行われません。ただし、これは最適化レベルを指定しない場合にかぎり有効です。最適化レベルを指定すると、最適化を無効にするオプションはありません。

最適化レベルを設定しないようにする場合は、最適化レベルを示すようなオプションを指定しないようにしてください。たとえば、-fast は最適化を -xO5 に設定するマクロオプションです。最適化レベルを暗黙に示すほかのすべてのオプションでは、最適化レベルが設定されているという警告メッセージが表示されます。最適化を設定せずにコンパイルする唯一の方法は、コマンド行または Makefile から最適化レベルを指定するオプションをすべて削除することです。

-xO3 以下の最適化レベルで -g を指定すると、ほぼ完全な最適化と可能なかぎりのシンボル情報を取得できます。末尾呼び出しの最適化とバックエンドのインライン化は無効です。

-xO4 以上の最適化レベルで -g を指定すると、完全な最適化と可能なかぎりのシンボル情報を取得できます。

-g を指定したデバッグでは、-xOn が抑制されませんが、-xOn はいくつかの方法で -g を制限します。たとえば、最適化オプションは、デバッグのユーティリティーを減らすので dbx からの変数を表示できませんが、それでも dbx where コマンドを使用して、シンボリックトレースバックを取得することはできます。詳細は、『dbx コマンドによるデバッグ』を参照してください。

-xO-xmaxopt の両方を指定する場合、-xO で設定する最適化レベルが -xmaxopt 値を超えてはいけません。

関連項目:

-xldscope、-fast、-xprofile=p、csh(1) のマニュアルページ

パフォーマンスアナライザ』では、アナライザのデータに対する各種レベルの最適化の影響について説明しています。

-xopenmp[={parallel|noopt|none}]

OpenMP 指令による明示的な並列化を有効にします。

-xopenmp の値を次に示します。

parallel

OpenMP プラグマの認識を有効にします。-xopenmp=parallel での最適化レベルは -xO3 です。コンパイラは必要に応じて最適化レベルを -xO3 に引き上げ、警告を発行します。

このフラグは、プリプロセッサマクロ _OPENMP も定義します。_OPENMP マクロは、10 進値 yyyymm が含まれるように定義します。ここで、yyyymm は、この実装がサポートする OpenMP API のバージョンの年と月を示します。特定のリリースの _OPENMP マクロの値については、『Oracle Solaris Studio OpenMP API ユーザーガイド』を参照してください。

noopt

OpenMP プラグマの認識を有効にします。最適化のレベルが -xO3 より低い場合でも、コンパイラは最適化のレベルを上げません。cc -xO2 -xopenmp=noopt のように -xO3 より低い最適化レベルを明示的に設定すると、エラーが表示されます。-xopenmp=noopt で最適化レベルを指定しなかった場合、OpenMP プラグマが認識され、その結果プログラムが並列化されますが、最適化は行われません。このフラグは、プリプロセッサマクロ _OPENMP も定義します。

none

OpenMP プラグマの認識を有効にせず、プログラムの最適化レベルへの変更は行わず、プリプロセッサマクロを定義しません。-xopenmp が指定されない場合は、これがデフォルトになります。

-xopenmp を指定するけれども値を指定しない場合、コンパイラは -xopenmp=parallel であると見なします。-xopenmp を一切指定しない場合、コンパイラは -xopenmp=none であると見なします。

dbx を指定して OpenMP プログラムをデバッグする場合、-g -xopenmp=noopt を指定してコンパイルすれば、並列化部分にブレークポイントを設定して変数の内容を表示できます。

-xopenmp のデフォルトは、将来のリリースで変更される可能性があります。警告メッセージを出力しないようにするには、適切な最適化レベルを明示的に指定します。

OpenMP プログラムを実行するときに使用するスレッドの数を指定するには、OMP_NUM_THREADS 環境変数を使用します。OMP_NUM_THREADS が設定されていない場合、並列領域の実行に使用されるスレッドのデフォルトの数は、マシンで利用できるコアの数になりますが、上限は 32 です。別のスレッド数を指定するには、OMP_NUM_THREADS 環境変数を設定するか、omp_set_num_threads() OpenMP 実行時ルーチンを呼び出すか、並列領域ディレクティブの num_threads 節を使用します。最高のパフォーマンスを得るため、並列領域の実行に使用するスレッドの数が、マシン上で使用できるハードウェアスレッド (仮想プロセッサ) の数を超えないようにしてください。Oracle Solaris システムでは、psrinfo(1M) コマンドを使用すると、この数を特定できます。Linux システムでは、ファイル /proc/cpuinfo を調べることでこの数を特定できます。詳細は、『OpenMP API ユーザーズガイド』を参照してください。

入れ子並列は、デフォルトでは無効です。入れ子並列を有効にするには、OMP_NESTED 環境変数を TRUE に設定する必要があります。詳細は、『OpenMP API ユーザーズガイド』を参照してください。

コンパイルとリンクを別々に実行する場合は、コンパイル手順とリンク手順の両方に -xopenmp を指定してください。リンク手順とともに使用した場合、-xopenmp オプションは、OpenMP 実行時サポートライブラリ libmtsk.so とリンクします。

最新の機能と最適なパフォーマンスを得るために、OpenMP 実行時ライブラリの最新のパッチ、libmtsk.so がシステムにインストールされていることを確認してください。

マルチスレッド対応アプリケーションを構築するための OpenMP Fortran 95、C および C++ アプリケーションプログラムインタフェース (API) の詳細は、『Oracle Solaris Studio OpenMP ユーザーガイド』を参照してください。

OpenMP の C の実装に固有の情報については、『Oracle Solaris Studio C ユーザーガイド』を参照してください。

-xP

すべての K&R C 関数のプロトタイプを出力するために、ソースファイルに対して構文および意味の検査のみを実行します。このオプションは、オブジェクトコードや実行可能コードを生成しません。

-xpagesize=n

スタックとヒープの優先ページサイズを設定します。

n の値は次のいずれかである必要があります。

SPARC の場合: 4K8K64K512K2M4M32M256M2G16G、または default

x86/x64 の場合: 4K2M4M1G、または default

ターゲットプラットフォームに対して有効なページサイズを指定する必要があります。有効なページサイズを指定しないと、要求は実行時に暗黙的に無視されます。

ページ内のバイト数を判断するには、pagesize(1) Oracle Solaris コマンドを使用します。オペレーティングシステムでは、ページサイズ要求に従うという保証はありません。ただし、適切なセグメントの整合を使用して、要求されたページサイズを取得できる可能性を高められます。セグメントの整合の設定方法は、-xsegment_align オプションを参照してください。ターゲットプラットフォームのページサイズを判断するには、pmap(1) または meminfo(2) を使用します。

-xpagesize オプションは、コンパイル時とリンク時に使用しないかぎり無効です。『C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの完全な一覧が記載されています。

-xpagesize=default を指定する場合は、オペレーティングシステムがページサイズを設定します。

このオプションを指定してコンパイルすることは、LD_PRELOAD 環境変数を同等のオプションで mpss.so.1 に設定するか、またはプログラムを実行する前に同等のオプションを指定して Oracle Solaris コマンド ppgsz(1) を実行することと同じ効果を持ちます。詳細は、Oracle Solaris の各マニュアルページを参照してください。

このオプションは -xpagesize_heap -xpagesize_stack のマクロです。これらの 2 つのオプションは -xpagesize と同じ次の引数を使用します。両方に同じ値を設定するには -xpagesize=n を指定します。別々の値を指定するには個々に指定します。

-xpagesize_heap=n

ヒープのメモリー内のページサイズを設定します。

n の値は、-xpagesize と同じです。

ターゲットプラットフォームに対して有効なページサイズを指定する必要があります。有効なページサイズを指定しないと、要求は実行時に暗黙的に無視されます。

詳細は、-xpagesize を参照してください。

-xpagesize_stack=n

スタックのメモリー内のページサイズを設定します。

n の値は、-xpagesize の説明と同じです。

ターゲットプラットフォームの Oracle Solaris オペレーティングシステムの有効なページサイズを指定する必要があります。有効なページサイズを指定しないと、要求は実行時に暗黙的に無視されます。

詳細は、-xpagesize を参照してください。

-xpatchpadding[={fix|patch|size}]

各関数を開始する前に、メモリー領域を予約します。fix を指定した場合、コンパイラは fix で必要となる領域を予約して続行します。これはデフォルト値です。patch を指定した場合、または値を指定しない場合、コンパイラはプラットフォーム固有のデフォルト値で予約します。値 -xpatchpadding=0 は 0 バイトの領域を予約します。size の最大値は、x86 では 127 バイト、および SPARC では 2048 バイトです。

-xpch=v

このコンパイラオプションは、プリコンパイル済みヘッダー機能をアクティブにします。v には autoautofirstcollect:pch_filename、または use:pch_filename を指定できます。この機能を利用するには、-xpch-xpchstop オプションを、#pragma hdrstop 指令と組み合わせて使用できます。

-xpch オプションは、プリコンパイル済みヘッダーファイルを作成して、コンパイル時間を短縮するときに使用します。プリコンパイル済みヘッダーファイルは、大量のソースコードを含む一連の共通インクルードファイルセットをソースファイルが共有しているアプリケーションのコンパイル時間を短縮するように設計されています。プリコンパイル済みヘッダーを使用することによって、1 つのソースファイルから一連のヘッダーファイルに関する情報を収集し、そのソースファイルを再コンパイルする場合や、同じ一連のヘッダーを持つほかのソースファイルをコンパイルする場合に、その情報を使用することができます。

コンパイラを使用して、プリコンパイル済みヘッダーファイルを自動的に生成できます。これを行うための 2 つの方法のいずれかを選択します。1 つは、ソースファイルで検出された最初のインクルードファイルからプリコンパイル済みヘッダーファイルを作成する方法、もう 1 つの方法は、コンパイラが、ソースファイルで検出されたインクルードファイルのセット (最初のインクルードファイルから始めて、どのインクルードファイルが最後のものであるかを判断するためのよく定義されたポイントまで) から選択する方法です。プリコンパイル済みヘッダーを自動的に生成するためにコンパイラがどの方法を使用するかを決定するには、次の 2 つのフラグのいずれかを使用します。

-xpch=auto

プリコンパイル済みヘッダーファイルの内容は、コンパイラがソースファイル内で検出する使用可能な最長の接頭辞 (使用可能な接頭辞を識別する方法の説明については次のセクションを参照) に基づきます。このフラグは、最大限の数のヘッダーファイルで構成されるプリコンパイル済みヘッダーファイルを生成します。

-xpch=autofirst

このフラグは、ソースファイル内で最初に検出されたヘッダーのみからなるプリコンパイル済みヘッダーファイルを生成します。

プリコンパイル済みヘッダーファイルを手動で作成するには、最初に -xpch を使用し、collect モードを指定する必要があります。-xpch=collect を指定するコンパイルコマンドは、ソースファイルを 1 つしか指定できません。次の例では、-xpch オプションがソースファイル a.c に基づいて header.cpch というプリコンパイル済みヘッダーファイルを作成します。

cc -xpch=collect:myheader a.cc

有効なプリコンパイル済みヘッダーファイル名には、常に .cpch という接尾辞が付きます。pch_filename を指定するときに、自分で接尾辞を追加することも、コンパイラで追加することもできます。たとえば、cc -xpch=collect:foo a.c と指定する場合は、プリコンパイル済みヘッダーファイルは foo.cpch と呼ばれます。

コンパイラが -xpch=auto および -xpch=autofirst と一緒にプリコンパイル済みヘッダーファイルを使用できない場合、新しいプリコンパイル済みヘッダーファイルを生成します。コンパイラが -xpch=use を指定してプリコンパイル済みヘッダーファイルを使用できない場合は、警告が発行され、実際のヘッダーを使ってコンパイルが行われます。

特定のプリコンパイル済みヘッダーを使用するようコンパイラに指示することもできます。これを行うには、-xpch=use:pch_filename を指定します。プリコンパイル済みヘッダーファイルを作成するために使用されたソースファイルと同じインクルードファイルの並びを持つソースファイルであれば、いくつでも指定できます。たとえば、use モードのコマンドは次のようになります。

cc -xpch=use:foo.cpch foo.c bar.c foobar.c

既存のプリコンパイル済みヘッダーファイルは、次の条件が当てはまる場合にのみ使用してください。次のいずれかが真でない場合は、プリコンパイル済みヘッダーファイルを再作成するべきです。

  • プリコンパイル済みヘッダーファイルにアクセスするために使用するコンパイラは、プリコンパイル済みヘッダーファイルを作成したコンパイラと同じであること。あるバージョンのコンパイラによって作成されたプリコンパイル済みヘッダーファイルは、別のバージョンのコンパイラでは使用できない場合があります。

  • -xpch オプション以外で -xpch=use とともに指定するコンパイラオプションは、プリコンパイル済みヘッダーファイルが作成されたときに指定されたオプションと一致すること。

  • -xpch=use で指定する一連のインクルードヘッダー群は、プリコンパイル済みヘッダーファイルが作成されたときに指定されたヘッダー群と同じであること。

  • -xpch=use で指定するインクルードヘッダーの内容が、プリコンパイル済みヘッダーファイルが作成されたときに指定されたインクルードヘッダーの内容と同じであること。

  • 現在のディレクトリ (すなわち、コンパイルが実行中で指定されたプリコンパイル済みヘッダーファイルを使用しようとしているディレクトリ) が、プリコンパイル済みヘッダーファイルが作成されたディレクトリと同じであること。

  • -xpch=collect で指定したファイル内の #include ディレクティブを含む前処理ディレクティブの初期シーケンスが、-xpch=use で指定するファイル内の前処理ディレクティブのシーケンスと同じであること。

プリコンパイル済みヘッダーファイルを複数のソースファイル間で共有するために、これらのソースファイルには、最初のトークンの並びとして一連の同じインクルードファイルを使用していなければいけません。トークンはキーワードか名前、句読点のいずれかです。コンパイラは、コードおよび、#if 指令によって除外されたコードをトークンとして認識しません。この最初のトークンの並びは、活性文字列 (viable prefix) として知られています。言い換えれば、活性文字列は、すべてのソースファイルに共通のソースファイルの先頭部分です。コンパイラはこの活性文字列を、プリコンパイル済みヘッダーファイルを作成し、それによってソースからどのヘッダーファイルがプリコンパイルされるかを判断するためのベースとして使用します。

現在のコンパイル中にコンパイラが検出する活性文字列は、プリコンパイル済みヘッダーファイルの作成に使用した活性文字列と一致する必要があります。言い換えれば、活性文字列は、同じプリコンパイル済みヘッダーファイルを使用するすべてのソースファイル間で、コンパイラによって一貫して解釈される必要があります。

活性文字列は、次のプリプロセッサ指令のいずれかで構成されます。

  • #include

  • #if/ifdef/ifndef/else/elif/endif

  • #define/undef

  • #ident

  • #pragma

これらはいずれかがマクロを参照していてもかまいません。#else#elif、および #endif 指令は、活性文字列内で一致している必要があります。コメントは無視されます。

-xpch=auto または -xpch=autofirst を指定すると、コンパイラは活性文字列の終点を自動的に判断し、次のように定義します。-xpch=collect または -xpch=use の場合、活性文字列は #pragma hdrstop で終了します。

  • 最初の宣言/定義文

  • 最初の #line 指令

  • #pragma hdrstop ディレクティブ

  • 指定されたインクルードファイルのあと (-xpch=auto および -xpchstop が指定された場合)

  • 最初のインクルードファイル (-xpch=autofirst が指定された場合)

注: 条件文内に終点がある場合は、警告が生成され、プリコンパイル済みヘッダーファイルの自動作成は無効になります。また、#pragma hdrstop-xpchstop オプションの両方が指定された場合、コンパイラは 2 つの停止点のうちの早い方を使用して、活性文字列を終了します。

プリコンパイル済みヘッダーファイルを共有する各ファイルの活性文字列内では、対応する各 #define 指令と #undef 指令は同じシンボルを参照する必要があります (#define の場合は、それぞれが同じ値を参照する必要があります)。各活性文字列内での順序も同じである必要があります。対応する各プラグマも同じで、その順序もプリコンパイル済みヘッダーを共有するすべてのファイルで同じでなければいけません。

さまざまなソースファイルで整合性を持って解釈される場合は、ヘッダーファイルをプリコンパイルできます。特に、完全な宣言のみが含まれている場合です。すなわち、どのファイルの宣言も有効な宣言として独立している必要があります。struct S; などの不完全な型宣言は有効な型宣言です。完全な型宣言がほかのファイルに存在している可能性があります。次のヘッダーファイルの例を考えてみてください。

file a.h
struct S {
     #include "x.h" /* not allowed */
};

file b.h
struct T; // ok, complete declaration
struct S {
     int i;
[end of file, continued in another file] /* not allowed */

プリコンパイル済みヘッダーファイルに組み込まれるヘッダーファイルは、次に違反してはいけません。これらの制限に違反するプログラムをコンパイルした場合、結果は予測できません。

  • ヘッダーファイルに、__DATE____TIME__ が含まれていてはいけません。

  • ヘッダーファイルに、#pragma hdrstop が含まれていてはいけません。

プリコンパイル済みヘッダーファイルの自動作成では、コンパイラは、そのファイルを SunWS_cache ディレクトリに書き込みます。このディレクトリは常に、オブジェクトファイルが作成される場所に置かれます。dmake の下で適切に機能するように、ファイルの更新はロックして行われます。

自動生成されるプリコンパイル済みヘッダーファイルをコンパイラに強制的に再構築させる必要がある場合は、CCadmin ツールを使って、プリコンパイル済みヘッダーファイルキャッシュディレクトリをクリアできます。詳細は、CCadmin(1) のマニュアルページを参照してください。

-xpch=collect が指定されている場合、コンパイラはプリコンパイル済みヘッダーファイル用の依存関係情報を生成します。この依存関係情報を利用するには、Makefile 内に適切な規則を作成する必要があります。次の Makefile の例を考えてみてください。

%.o : %.cc shared.cpch
$(cc) -xpch=use:shared -xpchstop=foo.h -c $<
default : a.out
foo.o + shared.cpch : foo.c
$(cc) -xpch=collect:shared -xpchstop=foo.h foo.c -c
a.out : foo.o bar.o foobar.o
$(c) foo.o bar.o foobar.o
clean :
rm -f *.o shared.cpch .make.state a.out

これらの make 規則は、コンパイラによって生成される依存関係とともに、-xpch=collect で使用したソースファイルのいずれか、またはプリコンパイル済みヘッダーファイルの一部であるヘッダーのいずれかに変更があった場合、手動で作成されたプリコンパイル済みヘッダーファイルを強制的に再作成します。これにより、古いプリコンパイル済みヘッダーファイルが使用されなくなります。

-xpch=auto または -xpch=autofirst の場合、Makefile に追加の make 規則を作成する必要はありません。

警告:

矛盾する -xpch フラグをコマンド行に指定しないでください。たとえば、-xpch=collect-xpch=auto の両方を指定したり、-xpchstop=<include> を付けて -xpch=autofirst を指定したりすると、エラーになります。

-xpch=autofirst を指定するか、-xpchstop なしで -xpch=auto を指定した場合、最初のインクルードファイル、あるいは -xpch=auto-xpchstop を付けて指定したインクルードファイルの前に宣言や定義、#line ディレクティブがあると、エラーになり、プリコンパイル済みヘッダーファイルの自動生成が無効になります。

-xpch=autofirst または -xpch=auto で、最初のインクルードファイルの前に #pragma hdrstop があると、プリコンパイル済みヘッダーファイルの自動生成が無効になります。

関連項目: -xpchstop

-xpchstop=[file|<include>]

file はプリコンパイル済みヘッダーファイルを作成する際に考慮される最後のインクルードファイルです。コマンド行で -xpchstop を使用することは、cc コマンドで指定する各ソースファイル内のファイルを参照する最初のインクルード指令のあとに、hdrstop プラグマ (『C ユーザーガイド』を参照) を配置することと同じです。

<include> までのヘッダーファイルに基づくプリコンパイル済みヘッダーファイルを作成するには、-xpchstop=<include>-xpch=auto を組み合わせます。このフラグは、活性文字列全体に含まれているすべてのヘッダーファイルを使用するデフォルトの -xpch=auto の動作をオーバーライドします。

関連項目: -xpch

-xpec[={yes|no}]

(Oracle Solaris) 移植可能な実行可能コード (Portable Executable Code、PEC) バイナリを生成します。このオプションは、プログラム中間表現をオブジェクトファイルとバイナリに入れます。このバイナリは、あとでチューニングやトラブルシューティングのために、使用される場合があります。

-xpec を指定して構築したバイナリは通常、-xpec なしで構築したバイナリより 5 - 10 倍の大きさになります。

-xpec を指定しない場合は、コンパイラは -xpec=no に設定します。-xpec をフラグなしで指定した場合は、コンパイラは xpec を -xpec=yes に設定します。

-xpentium

(x86) Pentium プロセッサ用のコードを生成します。

-xpg

gprof(1) でプロファイル処理するためのデータを収集するオブジェクトコードを用意します。プログラムが正常に終了したときに gmon.out を生成する実行時記録メカニズムが呼び出されます。

注: -xpg を指定しても -xprofile には有益ではありません。これら 2 つは、他方で使用できるデータを生成せず、他方で生成されたデータを使用できません。

プロファイルは、64 ビットの Oracle Solaris プラットフォーム上では prof または gprof を使用して、また 32 ビットの Oracle Solaris プラットフォーム上では gprof だけを使用して生成され、概略のユーザー CPU 時間が含まれます。これらの時間は、メインの実行可能ファイルのルーチンと、実行可能ファイルをリンクするときにリンカー引数として指定した共有ライブラリのルーチンの PC サンプルデータ (pcsample(2) を参照) から導出されます。そのほかの共有ライブラリ ( dlopen (3C) を使用してプロセスの起動後に開かれたライブラリ) のプロファイルは作成されません。

32 ビット Oracle Solaris システムの場合、prof(1) を使用して生成されるプロファイルは、実行可能ファイル内のルーチンに制限されます。32 ビット共有ライブラリは、-xpg で実行可能ファイルをリンクし、gprof(1) を使用することでプロファイリングできます。

現行の Oracle Solaris リリースには、-p でコンパイルされるシステムライブラリが含まれません。その結果、現行の Oracle Solaris プラットフォームで収集されるプロファイルには、システムライブラリルーチンの呼び出し回数が含まれません。

注: x86 システムでは、gprof ランタイムライブラリがプロファイルされるルーチンの戻りアドレスを判別するには、有効なフレームポインタが必要となるため、-xpg-xregs=frameptr と互換性がありません。x86 システムで -fast を指定してコンパイルすると、-xregs=frameptr が呼び出されます。代わりに、次のように指定してコンパイルします。

-fast -xregs=no%frameptr -xpg

コンパイル時に -xpg を指定した場合は、リンク時にも指定する必要があります。『C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるオプションの全一覧をまとめています。

注: gprof プロファイリングのために -xpg でコンパイルされたバイナリは、binopt(1) では使用しないでください。互換性がないため、内部エラーになる可能性があります。

-xprefetch[=val[,val]]

先読みをサポートするアーキテクチャーで先読み命令を有効にします。このオプションを使用する場合は、3 以上の最適化レベルでコンパイルする必要があります。

val は次のいずれかである必要があります。

auto

先読み命令の自動生成を有効にします。

no%auto

自動生成を無効にします。

explicit

明示的な先読みマクロを有効にします。

明示的な先読みは、測定値によってサポートされた特殊な環境でのみ使用すべきです。

no%explicit

明示的な先読みマクロを無効にします。

latx:factor

(SPARC) このオプションは、-xprefetch=auto とのみ組み合わせることができます。指定の係数により、コンパイラの先読みからロード、および先読みからストアまでの応答時間を調整します。係数には、n.n という形式の正の数値を使用します。

先読みの応答時間とは、先読み命令を実行してから先読みされたデータがキャッシュで利用可能となるまでのハードウェアの遅延のことです。

コンパイラは、先読み命令と先読みされたデータを使用するロードまたはストア命令の距離を決定する際に先読み応答時間の値を想定します。

注: 先読みからロードまでの想定待機時間が、先読みからストアまでの想定待機時間と同じではない可能性があります。

コンパイラは、幅広いマシンとアプリケーションで最適なパフォーマンスを得られるように先読みメカニズムを調整します。しかし、コンパイラの調整作業が必ずしも最適であるとはかぎりません。メモリーに負担のかかるアプリケーション、特に大型のマルチプロセッサでの実行を意図したアプリケーションの場合、先読みの応答時間の値を引き上げることにより、パフォーマンスを向上できます。この値を増やすには、1 よりも大きい factor を使用します。.52.0 の間の値は、おそらく最高のパフォーマンスを提供します。

データセットが全体的に外部キャッシュに常駐しているアプリケーションの場合、先読みの応答時間の値を引き下げることにより、パフォーマンスを向上できます。値を小さくするには、1 よりも小さな factor を使用します。

latx:factor サブオプションを使用するには、1.0 程度の factor から順にアプリケーションの性能テストを実行します。そのあと、テストの結果に応じて係数を増減し、パフォーマンステストを再実行します。係数の調整を継続し、最適なパフォーマンスに到達するまでパフォーマンステストを実行します。係数を小刻みに増減すると、しばらくはパフォーマンスに変化がなく、突然変化し、再び平常に戻ります。

yes

(廃止) 使用しないでください。代わりに - xprefetch=auto,explicit を使用します。

no

(廃止) 使用しないでください。代わりに -xprefetch=no%auto,no%explicit を使用します。

デフォルト:

-xprefetch を指定しない場合、デフォルトは -xprefetch=yes ではなく -xprefetch=auto,explicit になります。-xprefetch を値なしで指定した場合も、-xprefetch=auto,explicit と同等です。基本的に非線形のメモリーアクセスパターンを持つアプリケーションには、この変更が良くない影響をもたらします。この変更を無効にするには、-xprefetch=no%auto,no%explicit を指定します。

sun_prefetch.h ヘッダーファイルには、明示的な先読み命令を指定するために使用できるマクロが含まれています。先読み命令は、実行コード中のマクロの位置にほぼ相当するところに挿入されます。

-xprefetch_auto_type=[a]

a[no%]indirect_array_access です。

このオプションは、コンパイラが -xprefetch_level オプションで示されたループのための間接先読みを、直接メモリーアクセスのための先読みが生成されるのと同じ方法で生成するかどうかを決定するために使用します。

-xprefetch_auto_type の値が指定されていない場合、-xprefetch_auto_type=no%indirect_array_access に設定されます。

-xdepend-xrestrict、および -xalias_level などのオプションは、メモリー別名を明確化する情報の生成に役立つため、間接先読み候補の計算の攻撃性に影響し、このため、自動的な間接先読みの挿入が促進されることがあります。

-xprefetch_level=l

このオプションは、-xprefetch=auto で決定された先読み命令の自動挿入の積極性を制御するために使用します。

l は 1、2、または 3 である必要があります。

先読みレベル 2 および 3 は、旧バージョンの SPARC および x86 プラットフォームでは無効な場合があります。

-xprefetch_level=1 は、先読み命令の自動生成を有効にします。-xprefetch_level=2 は、レベル 1 を上回る追加生成を有効にします。-xprefetch_level=3 は、レベル 2 を上回る追加生成を有効にします。

最適化レベル 3 以上でコンパイルして、先読みをサポートするプラットフォーム用のコードを生成する必要があります。

デフォルトは、-xprefetch=auto を指定した場合は -xprefetch_level=1 になります。

-xprevise={yes|no}

コードアナライザを使用して表示できるソースコードの静的分析を生成する場合は、このオプションを指定してコンパイルします。

-xprevise=yes でコンパイルし、別の手順でリンクする場合、リンク手順でも -xprevise=yes をインクルードします。

デフォルトは -xprevise=no です。

Linux では、-xprevise=yes-xannotate とともに指定する必要があります。

詳細は、Oracle Solaris Studio コードアナライザのドキュメントを参照してください。

-xprofile=p

プロファイルのデータを収集、または最適化のためにプロファイルを使用します。

p には collect[:profdir]、use[:profdir]、または tcov[:profdir] を指定する必要があります

このオプションを指定すると、実行頻度のデータが収集されて実行中に保存されます。このデータを以降の実行で使用すると、パフォーマンスを向上させることができます。プロファイルの収集は、マルチスレッド対応のアプリケーションにとって安全です。すなわち、独自のマルチタスク (-mt) を実行するプログラムをプロファイリングすることで、正確な結果が得られます。このオプションは、最適化レベルを -xO2 かそれ以上に指定するときにのみ有効になります。

コンパイルとリンクを別々の手順で実行する場合は、コンパイル手順とリンク手順の両方で同じ -xprofile オプションを指定する必要があります。『C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるオプションの全一覧をまとめています。

collect[:profdir]

実行頻度のデータを集めて保存します。のちに -xprofile=use を指定した場合にオプティマイザがこれを使用します。コンパイラによって文の実行頻度を測定するためのコードが生成されます。

-xMerge-ztext、および -xprofile=collect を一緒に使用しないでください。-xMerge を指定すると、静的に初期化されたデータを読み取り専用記憶領域に強制的に配置します。 -ztext を指定すると、位置に依存するシンボルを読み取り専用記憶領域内で再配置することを禁止します。-xprofile=collect を指定すると、書き込み可能記憶領域内で、静的に初期化された、位置に依存するシンボルの再配置を生成します。

プロファイルディレクトリ名として profdir を指定すると、この名前が、プロファイル化されたオブジェクトコードを含むプログラムまたは共有ライブラリの実行時にプロファイルデータが保存されるディレクトリのパス名になります。パス名が絶対パスではない場合、プログラムがオプション -xprofile=use:profdir でコンパイルされるときの現在の作業用ディレクトリの相対パスと見なされます。

-xprofile=collect:prof_dir または -xprofile=tcov:prof_dir でプロファイルディレクトリ名を指定しない場合、プロファイルデータは実行時に、program.profile という名前のディレクトリに保存されます (program はプロファイリングされたプロセスのメインプログラムのベース名)。この場合は、環境変数 SUN_PROFDATA および SUN_PROFDATA_DIR を使用して、実行時にプロファイルデータが保存される場所を制御できます。設定した場合、プロファイルデータは $SUN_PROFDATA_DIR/$SUN_PROFDATA で指定されたディレクトリに書き込まれます。

プロファイルディレクトリ名がコンパイル時に指定されても、実行時に SUN_PROFDATA_DIR および SUN_PROFDATA の効果はありません。これらの環境変数は、tcov で書き込まれるプロファイルデータファイルのパスと名前を同様に制御します。tcov(1) のマニュアルページを参照してください。

これらの環境変数が設定されていない場合、プロファイルデータは現在のディレクトリ内のディレクトリ profdir.profile に書き込まれます (profdir は実行可能ファイルの名前または -xprofile=collect:profdir フラグで指定される名前)。profdir がすでに .profile で終わっている場合、-xprofile は .profile を profdir に追加しません。プログラムを複数回実行すると、実行頻度データは profdir.profile ディレクトリに蓄積されていくので、以前の実行頻度データは失われません。

Example[1]: プログラムが構築されたディレクトリと同じディレクトリ内にある myprof.profile ディレクトリ内のプロファイルデータを収集して使用するには、次の手順に従います。

 
cc -xprofile=collect:myprof.profile -xO5 prog.c -o prog
  ./prog
cc -xprofile=use:myprof.profile -xO5 prog.c -o prog

Example[2]: /bench/myprof.profile ディレクトリ内のプロファイルデータを収集し、収集したプロファイルデータをあとでフィードバックコンパイルで最適化レベル -xO5 で使用するには、次の手順に従います。

 
cc -xprofile=collect:/bench/myprof.profile -xO5 prog.c -o prog
  ...run prog from multiple locations...
cc -xprofile=use:/bench/myprof.profile -xO5 prog.c -o prog

別々の手順でコンパイルしてリンクする場合は、-xprofile=collect を指定してコンパイルしたオブジェクトファイルは、リンクでも必ず -xprofile=collect を指定してください。

非同期のプロファイル収集を制御する環境変数の説明については、このマニュアルページの「環境変数」のセクションも参照してください。

use[:profdir]

-xprofile=collect[:profdir] または -xprofile=tcov[:profdir] でコンパイルされたコードから収集された実行頻度データを使用して、プロファイル化されたコードが実行されたときに実行された作業用に最適化します。profdir は、-xprofile=collect[:profdir] または -xprofile=tcov[:profdir] でコンパイルされたプログラムを実行して収集されたプロファイルデータを含むディレクトリのパス名です。

tcov と -xprofile=use[:profdir] の両方で使用できるデータを生成するには、-xprofile=tcov[:profdir] オプションを使用して、コンパイル時に同じプロファイルディレクトリを指定する必要があります。混乱を最小限に抑えるには、profdir を絶対パス名として指定します。

profdir はオプションです。profdir が指定されていない場合、実行可能バイナリの名前が使用されます。-o が指定されていない場合、a.out が使用されます。profdir が指定されていない場合、コンパイラは、profdir.profile/feedback、または a.out.profile/feedback を探します。例:

cc -xprofile=collect -o myexe prog.c
cc -xprofile=use:myexe -xO5 -o myexe prog.c

-xprofile=collect オプションを付けてコンパイルしたときに生成され、プログラムの前の実行で作成されたフィードバックファイルに保存された実行頻度データを使用して、プログラムが最適化されます。

-xprofile オプションを除き、ソースファイルおよびコンパイラのほかのオプションは、フィードバックファイルを生成したコンパイル済みプログラムのコンパイルに使用したものと完全に同一のものを指定する必要があります。同じバージョンのコンパイラは、収集構築と使用構築の両方に使用する必要があります。

-xprofile=collect:profdir を付けてコンパイルした場合は、-xprofile=use: profdir のコンパイルの最適化に同じプロファイルディレクトリ名 profdir を使用する必要があります。

収集 (collect) 段階と使用 (use) 段階の間のコンパイル速度を高める方法については、-xprofile_ircache も参照してください。

tcov[:profdir]

tcov(1) を使用する基本のブロックカバレッジ分析用の命令オブジェクトファイル。

オプションの :profdir 引数を指定した場合、コンパイラは指定された場所にプロファイルディレクトリを作成します。プロファイルディレクトリに格納したデータは、tcov (1)、または -xprofile=use:profdir を指定したコンパイラで使用できます。

オプションの :profdir 引数を省略すると、プロファイル化されたプログラムの実行時にプロファイルディレクトリが作成されます。プロファイルディレクトリに保存されたデータは、tcov(1) でのみ使用できます。プロファイルディレクトリの場所は、環境変数 SUN_PROFDATA および SUN_PROFDATA_DIR を使用して指定できます。「環境」を参照してください。

:profdir で指定された場所が絶対パス名でない場合は、プログラムがコンパイルされるときの現在の作業用ディレクトリの相対パスであると解釈されます。

いずれかのオブジェクトファイルに対して :profdir が指定されている場合は、同じプログラム内のすべてのオブジェクトファイルに対して同じ場所を指定する必要があります。場所が :profdir で指定されているディレクトリには、プロファイル化されたプログラムを実行するときにすべてのマシンからアクセスできる必要があります。プロファイルディレクトリはその内容が必要なくなるまで削除できません。コンパイラでプロファイルディレクトリに保存されたデータは、再コンパイルする以外復元できません。

例 1: 1 つ以上のプログラムのオブジェクトファイルが -xprofile=tcov:/test/profdata でコンパイルされる場合、/test/profdata.profile という名前のディレクトリがコンパイラによって作成されて、プロファイル化されたオブジェクトファイルを表すデータの保存に使用されます。実行時に同じディレクトリを使用して、プロファイル化されたオブジェクトファイルに関連付けられた実行データを保存できます。

例 2: 「myprog」という名前のプログラムが -xprofile=tcov でコンパイルされ、ディレクトリ /home/joe で実行されると、実行時にディレクトリ /home/joe/myprog.profile が作成されて、実行時プロファイルデータの保存に使用されます。

-xprofile_ircache[=path]

(SPARC) 収集段階で保存したコンパイルデータを再利用することによって使用段階のコンパイル時間を短縮するには、-xprofile_ircache[=path] を -xprofile=collect|use とともに使用します。

大きなプログラムでは、中間データが保存されるため、use段階のコンパイル時間の効率を大幅に向上させることができます。保存されたデータが必要なディスク容量を相当増やすことがある点に注意してください。

-xprofile_ircache[=path] を使用すると、path はキャッシュファイルが保存されているディレクトリをオーバーライドします。デフォルトでは、これらのファイルはオブジェクトファイルと同じディレクトリに保存されます。collect と use 段階が 2 つの別のディレクトリで実行される場合は、パスを指定しておくと便利です。

一般的なコマンドの順序を次に示します。

example% cc -xO5 -xprofile=collect -xprofile_ircache t1.c t2.c
example% a.out     // run collects feedback data
example% cc -xO5 -xprofile=use -xprofile_ircache t1.c t2.c
-xprofile_pathmap=collect_prefix:use_prefix

(SPARC) -xprofile_pathmap オプションは、-xprofile=use コマンドも指定する場合に使用します。次の項目がともに真で、コンパイラが -xprofile=use でコンパイルされたオブジェクトファイルのプロファイルデータを見つけられない場合は、-xprofile_pathmap を使用します。

  • 前回オブジェクトファイルが -xprofile=collect でコンパイルされたディレクトリとは異なるディレクトリで、オブジェクトファイルを -xprofile=use を指定してコンパイルしている。

  • オブジェクトファイルはプロファイルで共通ベース名を共有しているが、異なるディレクトリのそれぞれの位置で相互に識別されている。

collect-prefix は、オブジェクトファイルが -xprofile=collect でコンパイルされたディレクトリツリーの UNIX パス名の接頭辞です。

use-prefix は、オブジェクトファイルが -xprofile=use を指定してコンパイルされたディレクトリツリーの UNIX パス名の接頭辞です。

-xprofile_pathmap の複数のインスタンスを指定すると、コンパイラは指定した順序でインスタンスを処理します。-xprofile_pathmap のインスタンスで指定された各 use-prefix は、一致する use-prefix が識別されるか、最後に指定された use-prefix がオブジェクトファイルのパス名と一致しないことが確認されるまで、オブジェクトファイルのパス名と比較されます。

-xreduction

自動的な並列化を実行するときにループの縮約を解析します。このオプションは、-xautopar が指定する場合のみ有効です。それ以外の場合は、コンパイラは警告を発行します。

縮約の認識が有効になっている場合、コンパイラは内積、最大値発見、最小値発見などの縮約を並列化します。これらの縮約によって非並列化コードによる四捨五入の結果と異なります。

-xregs=r[,r...]

生成されたコードのレジスタの使用法を指定します。

r には、applfloat、frameptr サブオプションのいずれか 1 つ以上をコンマで区切って指定します。

サブオプションの前に no% を付けるとそのサブオプションは無効になります。

例: -xregs=appl,no%float

-xregs サブオプションは、特定のハードウェアプラットフォームでしか使用できません。

appl (SPARC)

コンパイラがアプリケーションレジスタをスクラッチレジスタとして使用してコードを生成することを許可します。アプリケーションレジスタは、32 ビットプラットフォームでは g2g3、および g4、64 ビットプラットフォームでは g2 および g3 です。

すべてのシステムソフトウェアおよびライブラリは、-xregs=no%appl を指定してコンパイルすることをお勧めします。システムソフトウェア (共有ライブラリを含む) は、アプリケーション用のレジスタの値を保持する必要があります。これらの値は、コンパイルシステムによって制御されるもので、アプリケーション全体で整合性が確保されている必要があります。

SPARC ABI では、これらのレジスタはアプリケーションレジスタと記述されています。これらのレジスタを使用すると必要なロードおよびストア命令が少なくてすむため、パフォーマンスが向上します。ただし、アセンブリコードで記述された古いライブラリプログラムとの間で衝突が起きることがあります。

SPARC 命令セットの詳細は、-xarch を参照してください。

float (SPARC)

コンパイラが浮動小数点レジスタを整数値用のスクラッチレジスタとして使用してコードを生成することを許可します。浮動小数点値は、このオプションに関係なくこれらのレジスタを使用する場合があります。浮動小数点レジスタに対するすべての参照を排除したバイナリコードを生成するには、-xregs=no%float を使用するとともに、決して浮動小数点型をソースコードで使わないようにします。

float (X86)

コンパイラが浮動小数点レジスタをスクラッチレジスタとして使用してコードを生成することを許可します。浮動小数点値は、このオプションに関係なくこれらのレジスタを使用する場合があります。浮動小数点レジスタに対するすべての参照を排除したバイナリコードを生成するには、-xregs=no%float を使用するとともに、決して浮動小数点型をソースコードで使わないようにします。コードの生成時に、コンパイラは浮動小数点、simd、または x87 の命令を使用した結果のコードを診断しようとします。

frameptr (x86)

フレームポインタレジスタ (IA32 の場合 %ebp、x86 の 64 ビットプラットフォームの場合 %rbp) をコンパイラが汎用レジスタとして使用することを許可します。

デフォルトは -xregs=no%frameptr です。

-features=no%except によって例外も無効になっている場合を除いて、C++ コンパイラは -xregs=frameptr を無視します。-xregs=frameptr-fast の一部ですが、-features=no%except も同時に指定されないかぎり C++ コンパイラによって無視されます。

-xregs=frameptr を使用すると、コンパイラは浮動小数点レジスタを自由に使用できるので、プログラムのパフォーマンスが向上します。ただし、デバッガおよびパフォーマンス測定ツールの一部の機能が制限される場合があります。スタックトレース、デバッガ、およびパフォーマンスアナライザは、—xregs=frameptr を使用してコンパイルされた機能についてレポートできません。

また、Posix pthread_cancel() への C++ の呼び出しは、クリーンアップハンドラを見つけようとして失敗します。

C、Fortran、C++ が混在しているコードで、C または Fortran 関数から直接または間接的に呼び出された C++ 関数が例外をスローする可能性がある場合、このコードは -xregs=frameptr でコンパイルしないようにしてください。このような言語が混在するソースコードを -fast でコンパイルする場合は、コマンド行の -fast オプションのあとに -xregs=no%frameptr を追加します。

64 ビットのプラットフォームでは利用できるレジスタが多いため、—xregs=frameptr でコンパイルすると、64 ビットコードよりも 32 ビットコードのパフォーマンスが向上する可能性が高くなります。

注: -xpg も指定した場合は、コンパイラは -xregs=frameptr を無視して警告を発行します。

また、-xkeepframe-xregs=frameptr をオーバーライドします。

SPARC のデフォルトは -xregs=appl,float です。x86 のデフォルトは -xregs=no%frameptr,float です。x86 での -fast の展開では -xregs=frameptr が含められます。

アプリケーションにリンクする共有ライブラリ用のコードは、-xregs=no%appl,float を指定してコンパイルすることをお勧めします。少なくとも、共有ライブラリとリンクするアプリケーションがこれらのレジスタの割り当てを認識するように、共有ライブラリがアプリケーションレジスタを使用する方法を明示的に示す必要があります。

たとえば、大局的な方法で (重要なデータ構造体を示すためにレジスタを使用するなど) レジスタを使用するアプリケーションは、ライブラリと確実にリンクするため、-xregs=no%appl なしでコンパイルされたコードを含むライブラリがアプリケーションレジスタをどのように使用するかを正確に特定する必要があります。

-xrestrict[=f]

ポインタ値の関数パラメータを制限付きポインタとして扱います。f%all%none、または 1 つ以上の関数名のコンマ区切りのリストです。このコマンド行オプションは独立して使用できますが、-xO3 以上の最適化時に使用するのがもっとも適しています。

このオプションに関数リストが指定されている場合、指定された関数内のポインタパラメータは制限付きとして扱われます。-xrestrict=%all が指定された場合は、C ファイル全体のすべてのポインタパラメータが制限付きとして扱われます。

デフォルトは %none です。-xrestrict を指定することは、-xrestrict=%all を指定することと同等です。

関連項目: 『C ユーザーガイド』の「制限付きポインタ」。

-xs[={yes|no}]

(Oracle Solaris) オブジェクトファイルからのデバッグ情報を実行可能ファイルにリンクします。

-xs-xs=yes と同じです。-xdebugformat=dwarf のデフォルトは -xs=yes と同じです。-xdebugformat=stabs のデフォルトは -xs=no と同じです。

このオプションは、実行可能ファイルのサイズ、およびデバッグのためにオブジェクトファイルを保持する必要性のトレードオフを制御します。dwarf の場合は、-xs=no を使用して実行可能ファイルを小さくしますが、オブジェクトファイルに依存しています。stabs の場合は、-xs または -xs=yes を使用してオブジェクトファイルに依存しないようにしますが、実行可能ファイルが大きくなります。このオプションは、dbx のパフォーマンスやプログラムの実行時パフォーマンスにはほとんど影響しません。

コンパイルコマンドがリンクを強制した (つまり、-c を指定しない) 場合、オブジェクトファイルはなく、デバッグ情報を実行可能ファイルに含める必要があります。この場合、-xs=no (暗黙的または明示的) は無視されます。

この機能は、コンパイラが生成されるオブジェクトファイル内のセクションフラグおよびセクション名を調整し、リンカーにそのオブジェクトファイルのデバッグ情報に関する処理を指示することによって実装されます。このため、これはコンパイラオプションであり、リンカーオプションではありません。一部のオブジェクトファイルが -xs=yes でコンパイルされ、ほかのオブジェクトファイルが -xs=no でコンパイルされた実行可能ファイルを作成することが可能です。

Linux コンパイラは -xs を受け入れますが無視します。Linux コンパイラは -xs={yes|no} を受け入れません。

-xsafe=mem

(SPARC)コンパイラは、メモリー保護の違反が発生していないことを想定できます。

このオプションを使用すると、コンパイラでは 64 ビットの SPARC アーキテクチャーで違反のないロード命令を使用できます。

アドレスの位置合わせが合わない、またはセグメンテーション侵害などの違反が発生した場合は違反のないロードはトラップを引き起こさないので、このオプションはこのような違反が起こる可能性のないプログラムでしか使用しないでください。ほとんどのプログラムではメモリーに関するトラップは起こらないので、大多数のプログラムでこのオプションを安全に使用できます。例外条件の処理にメモリーベースのトラップを明示的に使用するプログラムでは、このオプションは使用しないでください。

このオプションは、最適化レベルの -xO5 と、次のいずれかの値の -xarch を組み合わせた場合にだけ有効です。-m32-m64 の両方で sparcsparcvissparcvis2、または sparcvis3

-xsegment_align=n

(Oracle Solaris) このオプションを指定すると、ドライバはリンク行で特殊なマップファイルをインクルードします。マップファイルはテキスト、データ、および bss セグメントを、n で指定された値に整列します。非常に大きなページを使用する場合は、ヒープセグメントおよびスタックセグメントが適切な境界に整列されることが重要です。これらのセグメントが整列されない場合、次の境界まで小さなページが使用され、この結果、パフォーマンスが低下することがあります。マップファイルにより、セグメントは確実に適切な境界上に整列されます。

n の値は次のいずれかである必要があります。

SPARC: 有効な値は、8K64K512K2M4M32M256M1G、および none です。

x86: 有効な値は、4K8K64K512K2M4M32M256M1G、および none です。

SPARC と x86 のデフォルトはどちらも none です。

推奨の使用法は次のとおりです。

SPARC 32-bit compilation: -xsegment_align=64K
SPARC 64-bit compilation: -xsegment_align=4M

x86 32-bit compilation: -xsegment_align=8K
x86 64-bit compilation: -xsegment_align=4M

ドライバは適切なマップファイルをインクルードします。たとえば、ユーザーが -xsegment_align=4M と指定した場合、ドライバは -Minstall-directory/lib/compilers/mapfiles/map.4M.align をリンク行に追加します。install-directory はインストールディレクトリです。前述のセグメントは、4M 境界上に整列されます。

-xsfpconst

接尾辞のない浮動小数点定数を、デフォルトモードの倍精度ではなく、単精度として表現します。-pedantic とともに指定した場合は無効となります。

-xspace

コードサイズが増加する場合は、最適化を行いません。コードのサイズが増大する場合は、ループの並列化は行いません。例: ループを展開しません。

-xstrconst

このオプションは、将来のリリースでは推奨されません。代わりに、-features=[no%]conststrings を使用します。

-xstrconst オプションは、デフォルトデータセグメントではなくテキストセグメントの読み取り専用データセクションに、文字列リテラルを挿入します。重複文字列は削除され、残りのコピーがコード内の参照で共有されます。

-xtarget=t

命令セットと最適化の対象とするシステムを指定します。

t は、nativenative64genericgeneric64system-name のいずれかである必要があります。

-xtarget オプションは、実際のシステムで発生する、-xarch-xchip、および -xcache の組み合わせをすばやく、簡単に指定できます。-xtarget の意味は = のあとに指定した値を展開したものにあります。マクロオプションの展開 (-xtarget など) の表示方法については、-xdryrun の説明を参照してください。

-xtarget=native-m32-xarch=native-xchip=native-xcache=native と同等です。

-xtarget=native64-m64-xarch=native64-xchip=native64-xcache=native と同等です。

-xtarget=generic-m32-xarch=generic-xchip=generic-xcache=generic と同等です。

-xtarget=generic64 は、-m64-xarch=generic64-xchip=generic64、および -xcache=generic と同等です。

-fast マクロオプションは、その展開に -xtarger=native が含まれています。

-xtarget コマンド自体がマクロオプションであり、-xarch -xchip および -xcache オプションのコマンド行でのマクロ展開のように動作します。このため、-xtarget のあとに対象のオプションを指定することによって、展開されたオプションをオーバーライドできます。実行中のシステムで -xtarget=native の展開を調べるには、-xdryrun コマンドを使用します。

注: 特定のホストプラットフォームで -xtarget を展開した場合、そのプラットフォームでコンパイルすると -xtarget=native と同じ -xarch-xchip、または -xcache 設定にならない場合があります。

SPARC プラットフォームの場合:

64 ビットの SPARC アーキテクチャーで 64 ビット Oracle Solaris ソフトウェアをコンパイルすることは、-m64 オプションで示されます。native64 または generic64 以外のフラグで -xtarget を指定する場合は、-m64 オプションも次のように指定する必要があります。

-xtarget=ultra4 ... -m64

そうでない場合は、コンパイラは 32 ビットメモリーモデルを使用します。

native

ホスト環境で最適なパフォーマンスになるようにパラメータを設定します (32 ビットアーキテクチャーが想定されます)。

native64

ホスト環境で最適なパフォーマンスになるようにパラメータを設定します。 (64 ビットアーキテクチャーが想定されます)。

generic

これはデフォルトであり、ほとんどの 32 ビットプラットフォームアーキテクチャーで最適なパフォーマンスとなるようにパラメータを設定します。

generic64

ほとんどの 64 ビットプラットフォームアーキテクチャーで最適なパフォーマンスとなるようにパラメータを設定します。

system-name

指定するプラットフォームで最高のパフォーマンスが得られます。

有効な SPARC プラットフォーム名を次に示します。

一般的に使用されるプラットフォーム名は、ultra、ultra2、ultra2i、ultra1/140、ultra1/170、ultra1/200、ultra2/1170、ultra2/1200、ultra2/1300、ultra2/2170、ultra2/2200、ultra2/2300、ultra2e、ultra2i、ultra3、ultra3cu、ultra3i、ultra4、ultra4plus、ultraT1、ultraT2、ultraT2plus、T3、T4、T5、M5、sparc64vi、sparc64vii、sparc64viiplus、sparc64x、sparc64xplus です。

注: 次の SPARC プラットフォーム名は廃止されており、将来のリリースで削除される可能性があります: ultra、ultra2、ultra2e、ultra2i、ultra3、ultra3cu、ultra3i、ultra4、および ultra4plus。

x86 プラットフォームの場合:

64 ビット x86 プラットフォームで 64 ビット Oracle Solaris ソフトウェアをコンパイルすることは、-m64 オプションで示されます。native64 または generic64 以外のフラグで -xtarget を指定する場合は、-m64 オプションも次のように指定する必要があります。

 -xtarget=opteron ... -m64

そうでない場合は、コンパイラは 32 ビットメモリーモデルを使用します。

generic

これはデフォルトであり、ほとんどの 32 ビットシステムで汎用アーキテクチャー、チップ、およびキャッシュが最適なパフォーマンスになります。

generic64

ほとんどの 64 ビットシステムで、汎用アーキテクチャー、チップ、およびキャッシュが最適なパフォーマンスになります。

native

コンパイラはホストシステムで最適なパフォーマンスとなるコードを生成します。このフラグは、32 ビットアーキテクチャーを想定して、コンパイラが実行されているマシンの使用可能なアーキテクチャー、チップ、およびキャッシュ特性を判別します。

native64

ホストシステムで最適なパフォーマンスになるようにパラメータを設定します。このフラグは、64 ビットアーキテクチャーを想定して、コンパイラが実行されているマシンの使用可能なアーキテクチャー、チップ、およびキャッシュ特性を判別します。

processor-name

指定された x86 の processor-name で最適なパフォーマンスとなるコードを生成します。次のプロセッサが認識されます: barcelonahaswellivybridgenehalemopteron、pentiumpentium_propentium3pentium4penrynsandybridgewestmerewoodcrest

-xtarget サブオプションの実際の展開は、各コンパイラリリースで変更および改善されることがあります。実際の展開を表示するには -dryrun オプションを使用します。

 
cc -dryrun -xtarget=ultra4 |& grep ###
###     command line files and options (expanded):
### -dryrun -xchip=ultra4 -xcache=64/32/4:8192/128/2 -xarch=sparcvis2
-xtemp=path

-temp=path と同等です。

-xthreadvar[=o]

__thread 宣言指定子とともに動作し、コンパイラのスレッドローカルなストレージ機能を活用します。__thread 指定子を使用してスレッド変数を宣言したあとは、-xthreadvar を使用することにより、動的 (共有) ライブラリ内の位置依存コード (PIC 以外のコード) でスレッドローカルなストレージを使用できるようにします。__thread の使用方法については、『C ユーザーガイド』を参照してください。

o は次の値である必要があります。

[no%]dynamic

動的ロード用の変数をコンパイルします。接頭辞 no% はこのオプションを無効にします。-xthreadvar=no%dynamic を指定すると、スレッド変数へのアクセスは非常に早くなりますが、動的ライブラリ内のオブジェクトファイルは使用できません。すなわち、実行可能ファイル内のオブジェクトファイルだけが使用可能です。

-xthreadvar を指定しない場合、コンパイラが使用するデフォルトは位置独立コード (PIC) が有効になっているかどうかによって決まります。位置独立コードが有効になっている場合、オプションは -xthreadvar=dynamic に設定されます。位置独立コードが無効になっている場合、オプションは -xthreadvar=no%dynamic に設定されます。

引数を指定しないで -xthreadvar を指定する場合、オプションは -xthreadvar=dynamic に設定されます。

位置独立ではないコードが動的ライブラリに含まれる場合、-xthreadvar を指定する必要があります。

リンカーは、動的ライブラリ内の位置依存コード (非 PIC) スレッド変数と同等のスレッド変数はサポートできません。非 PIC スレッド変数は非常に高速なため、実行可能ファイルのデフォルトとして指定できます。

位置独立ではないコードが動的ライブラリに含まれる場合、-xthreadvar を指定する必要があります。

異なるバージョンの Oracle Solaris ソフトウェアでスレッド変数を使用する場合は、コマンド行に異なるオプションを指定する必要があります。

関連項目: -xcode-KPIC-Kpic

-xthroughput[={yes|no}]

-xthroughput オプションは、システム上で多数のプロセスが同時に実行されている状況でアプリケーションが実行されることをコンパイラに示します。

-xthroughput=yes を指定すると、コンパイラは、単一のプロセスのパフォーマンスは若干低下するが、システム上のすべてのプロセスによって実行される作業量が増加するように最適化を行います。たとえば、コンパイラがデータの先読みの積極性を下げることを選択する可能性があります。そのように選択すると、そのプロセスによって消費されるメモリー帯域幅が減少し、プロセスの実行が遅くなることがありますが、ほかのプロセスが共有するメモリー帯域幅が増加します。

デフォルトは -xthroughput=no です。

-xtime

各コンパイルによって使用される時間とリソースを報告します。

-xtransition

K&R C と ISO C の違いに関する警告を発行します。-xtransition オプションを、-Xa または -Xt オプションとともに使用するとメッセージが発行されます。異なる動作に関するすべての警告メッセージは適切なコーディングを行うことによって取り除くことができます。

-xtrigraphs[=[yes|no]]

ISO C 標準で定義されている 3 文字表記の認識を有効または無効にします。

-xtrigraphs=yes は、ソースコード内の 3 文字表記の認識を有効にします。

-xtrigraphs=no は、ソースコード内の 3 文字表記の認識を無効にします。

デフォルト:

-xtrigraphs オプションを指定しないと、-xtrigraphs=no が想定されます。

-xtrigraphs だけを指定すると、-xtrigraphs=yes が想定されます。

-xunboundsym={yes|no}

動的に結合されているシンボルへの参照がプログラムに含まれているかどうかを指定します。

-xunboundsym=yes は、動的に結合されたシンボルへの参照がプログラムに含まれていることを意味します。

-xunboundsym=no は、動的に結合されているシンボルへの参照がプログラムに含まれていないことを意味します。

デフォルトは -xunboundsym=no です。

-xunroll=n

コンパイラがループを最適化 (展開) するかどうかを指定します。n は正の整数です。n が 1 の場合は 1 つのコマンドであり、コンパイラはループを展開しません。n が 1 より大きい場合は、-xunroll=n によってコンパイラがループを n 回展開します。

-xustr={ascii_utf16_ushort|no}

ISO10646 UTF-16 文字列リテラルを使用する国際化されたアプリケーションをサポートする必要がある場合は、-xustr=ascii_utf16_ushort を指定します。言い換えれば、このオプションは、オブジェクトファイル内で UTF-16 文字列に変換したい文字列リテラルがコードに含まれる場合に使用します。このオプションが指定されていない場合、コンパイラは 16 ビット文字列リテラルを生成することも認識することもしません。このオプションは、 U"ASCII_string" 文字列リテラルを unsigned short int 型の配列として認識できるようにします。このような文字列はまだ標準の一部ではないので、このオプションは標準でない C の認識を有効にします。

-xustr=no を指定すると、U"ASCII_string" 文字列リテラルのコンパイラによる認識を無効にできます。このオプションのコマンド行の右端にあるインスタンスは、それまでのインスタンスをすべてオーバーライドします。

デフォルトは -xustr=no です。引数を指定しないで -xustr を指定した場合、コンパイラはこの指定を受け付けず、警告を出力します。C または C++ 規格で構文の意味が定義されると、デフォルト値が変わることがあります。

U"ASCII_string" 文字列リテラルを指定せずに -xustr=ascii_ustf16_ushort を指定することはエラーではありません。

-std=c11 (デフォルトを含む) が有効である場合、フラグ -xustr=ascii_utf16_ushort を指定するとエラーになります。-xustr=ascii_utf16_ushort を指定した場合は、-Xc-Xa-Xt-Xs-xc99-std=c99-std=c89、または -ansi のいずれかも指定する必要があります。

すべてのファイルを、このオプションによってコンパイルしなければならないわけではありません。

次の例では、前に U が付いた引用符内の文字列リテラルを示します。-xustr を指定するコマンド行も示します。

 
example% cat file.c
const unsigned short *foo = U"foo";
const unsigned short bar[] = U"bar";
const unsigned short *fun() { return
example% cc -xustr=ascii_utf16_ushort file.c -c
-xvector[=a]

ベクトルライブラリ呼び出しの自動生成、または SIMD (Single Instruction Multiple Data) をサポートする x86 プロセッサ上での SIMD 命令の生成を可能にします。このオプションを使用するときは -fround=nearest を指定することによって、デフォルトの丸めモードを使用する必要があります。

-xvector オプションを指定するには、最適化レベルが -xO3 かそれ以上に設定されていることが必要です。最適化レベルが指定されていない場合や —xO3 よりも低い場合はコンパイルは続行されず、メッセージが表示されます。

a には次の値を指定できます。接頭辞 no% はサブオプションを無効にします。

[no%]lib

(Oracle Solaris) コンパイラは可能な場合はループ内の数学ライブラリへの呼び出しを、同等のベクトル数学ルーチンへの単一の呼び出しに変換します。大きなループカウントを持つループでは、これによりパフォーマンスが向上します。このオプションを無効にするには no%lib を使用します。

[no%]simd

(SPARC) -xarch=sparcace-xarch=sparcaceplus の場合、特定のループのパフォーマンスを改善するために、浮動小数点および整数の SIMD 命令を使用するようにコンパイラに指示します。ほかの SPARC プラットフォームの場合とは反対に、-xvector=simd は、-xvector=none および -xvector=no%simd を除き、任意の -xvector オプションを指定した -xarch=sparcace および -xarch=sparcaceplus のもとで常に有効です。さらに、-xvector=simd には 3 よりも大きい -O が必要であり、それ以外の場合はスキップされ、警告は発行されません。

ほかのすべての -xarch 値の場合、特定のループのパフォーマンスを改善するために Visual Instruction Set [VIS1、VIS2、ViS3 など] SIMD 命令を使用するようにコンパイラに指示します。基本的に -xvector=simd オプションを明示的に使用すると、コンパイラは、ループ繰り返し数を減らすためにループ変換を実行して、特殊なベクトル化した SIMD 命令の生成を有効にします。-xvector=simd オプションは、-O が 3 より大きく -xarchsparcvis3 以上である場合にのみ有効です。それ以外の場合、-xvector=simd はスキップされ、警告は発行されません。

[no%]simd

(x86) コンパイラにネイティブ x86 SSE SIMD 命令を使用して特定のループのパフォーマンスを向上させるよう指示します。ストリーミング拡張機能は、x86 で最適化レベルが 3 かそれ以上に設定されている場合にデフォルトで使用されます。このオプションを無効にするには、no%simd を使用します。

コンパイラは、ストリーミング拡張機能がターゲットのアーキテクチャーに存在する場合、つまりターゲットの ISA が SSE2 以上である場合にのみ SIMD を使用します。たとえば、最新のプラットフォームで -xtarget=woodcrest、-xarch=generic64、-xarch=sse2、-xarch=sse3、または -fast を指定して使用できます。ターゲットの ISA にストリーミング拡張機能がない場合、このサブオプションは無効です。

%none

このオプションを完全に無効にします。

yes

このオプションは非推奨です。代わりに、-xvector=lib を指定します。

no

このオプションは非推奨です。代わりに、-xvector=%none を指定します。

デフォルトは、x86 では -xvector=simd で、SPARC プラットフォームでは -xvector=%none です。サブオプションなしで -xvector を指定する場合、コンパイラは、x86 Oracle Solaris では -xvector=simd,lib、SPARC Oracle Solaris では -xvector=lib、Linux プラットフォームでは -xvector=simd を想定します。

このオプションは、以前のインスタンスをオーバーライドするため、-xvector=%none は以前に指定された -xvector=lib を取り消します。

コンパイラは、リンク時に libmvec ライブラリを取り込みます。

注: x86 プラットフォームの Oracle Solaris カーネルコードをコンパイルする場合は、-xvector=%none を使用してください。

コンパイルとリンクを別々のコマンドで実行する場合は、コンパイルとリンクの両方で同じオプションを使用してください。

-xvis[={yes|no}]

(SPARC) <vis.h> ヘッダーを含めて VIS 命令を生成する場合、または VIS 命令を使用するアセンブラのインラインコード (.il) を使用する場合は、-xvis=yes を指定してコンパイルします。デフォルトは -xvis=no です。-xvis と指定すると -xvis=yes と指定した場合と同様の結果が得られます。

VIS[tm] 命令セットは、SPARC V9 命令セットの拡張です。UltraSPARC プロセッサが 64 ビットの場合でも、多くの場合、特にマルチメディアアプリケーションではデータサイズが 8 ビットまたは 16 ビットに制限されています。VIS 命令は 1 つの命令で 4 つの 16 ビットデータを処理できるので、画像、線形代数、信号処理、オーディオ、ビデオ、ネットワーキングなどの新しいメディアを扱うアプリケーションのパフォーマンスが大幅に向上させます。

-xvpara

OpenMP を使用するときに正しくない結果をもたらす可能性のある、並列プログラミングに関連する潜在的な問題に関して、警告を発行します。-xopenmp および OpenMP API 指令とともに使用します。

次の状況が検出された場合は、コンパイラは警告を発行します。

  • 異なるループ繰り返し間でデータに依存関係がある場合に、MP ディレクティブを使用して並列化されたループ

  • OpenMP データ共有属性節に問題がある場合。たとえば、「shared」と宣言された変数に、OpenMP 並列領域からアクセスするとデータ競合が発生する可能性がある場合や、並列領域の中に値を持つ変数を「private」と宣言し、並列領域よりあとでその変数を使用する場合です。

すべての並列化命令が問題なく処理される場合、警告は表示されません。

例:

cc -xopenmp -xvpara any.c
-Yc, dir

コンポーネント c の場所となる新しいディレクトリ dir を指定します。c は、-W オプションにリストされているツールを表す文字で構成できます。

ツールの検索が指定されている場合、ツールの新しいパス名は dir/tool になります。2 つ以上の -Y オプションが 1 つの項目に適用されている場合には、最後に指定されたものが有効です。

-YA, dir

すべてのコンパイラコンポーネントを検索するときのディレクトリ dir を指定します。dir 内でコンポーネントが見つからない場合は、コンパイラがインストールされているディレクトリに戻って検索されます。

-YI, dir

インクルードファイルが検索されるデフォルトディレクトリを変更します。

-YP, dir

ライブラリファイルが検索されるデフォルトディレクトリを変更します。

-YS, dir

起動オブジェクトファイル用のデフォルトディレクトリを変更します。

-Zll

lock_lint 用のプログラムデータベースは作成しますが、実行可能なコードは生成しません。

cc-a-e-r-t-u-z を認識し、これらのオプションとその引数を ld に渡します。cc は認識できないオプションも警告付きで ld に渡します。

errno

特定の浮動小数点数学ライブラリルーチンは、errno 変数 (errno.h で定義されています) でエラーステータスを返します。オプション -fast-xbuiltin-xlibmieee-xlibmil、および -xlibmopt を使用すると、コンパイラは errno 変数を設定しない同等の最適化コードを使用して呼び出しを浮動小数点関数に自由に置き換えることができます。さらに、-fast ではマクロ __MATHERR_ERRNO_DONTCARE が定義されるため、コンパイラは数学関数で errno を設定する必要がないと想定できます。結果として、errno の値または浮動小数点関数呼び出しのあとに発生した浮動小数点例外の値に依存するユーザーコードが、一貫性のない結果を生成する可能性があります。

この問題を回避する 1 つの方法は、-fast を使用してそのようなコードをコンパイルしないことです。

ただし、-fast の最適化が必要で、コードが浮動小数点ライブラリ呼び出しのあとに正しく設定される errno の値、または適切な浮動小数点例外が発生することに依存している場合は、次のオプションを使用してコンパイルしてください。

 
-xbuiltin=none -U__MATHERR_ERRNO_DONTCARE \
-xnolibmopt  -xnolibmil

これをコマンド行の -fast のあとに使用することで、コンパイラはそのようなライブラリコールを最適化しなくなり、数学関数への呼び出しで errno が正しく設定されるようになります。

新しい共有ライブラリ

Solaris release 10 の場合、-xprofile オプションを使用するために、新しい共有ライブラリ libxprof.so.1libxprof_audit.so.1、および libtdf.so.1 をインストールする必要があります。これらのライブラリは、最新の Oracle Solaris リリースでは事前にインストールされます。

プラグマ

次の #pragmas はコンパイルシステムに認識されます。

#pragma align
#pragma c99
#pragma does_not_read_global_data
#pragma does_not_return
#pragma does_not_write_global_data
#pragma error_messages
#pragma fini
#pragma hdrstop
#pragma ident
#pragma init
#pragma [no_]inline
#pragma [no_]warn_missing_parameter
#pragma int_to_unsigned
#pragma opt
#pragma pack
#pragma rarely_called
#pragma redefine_extname
#pragma returns_new_memory
#pragma struct_align
#pragma unknown_control_flow
#pragma weak

#pragma does_not_read_global_data
#pragma does_not_write_global_data
#pragma no_side_effect

サポートされる OpenMP 2.5 ディレクティブのリストについては、『OpenMP API ユーザーズガイド』を参照してください。

SPARC のみ:

#pragma nomemorydepend
#pragma no_side_effect
#pragma pipeloop
#pragma unroll

これらのプラグマの詳細は、『C ユーザーガイド』を参照してください。

環境変数

設定可能な環境変数のリスト、およびその機能の簡単な説明を次に示します。

LINT_OPTIONS

lint のオプションのデフォルトセット。LINT_OPTIONS は、次のように lint の呼び出しに使用された名前の直後に、コマンド行にその値が指定されたものとして、lint によって解釈されます。

lint $LINT_OPTIONS ... other-arguments ...
OMP_DYNAMIC

スレッド数の動的調整を有効または無効にします。

OMP_NESTED

入れ子並列化を有効または無効にします。『OpenMP API ユーザーガイド』を参照してください。

OMP_NUM_THREADS

この変数は、プログラムが作成できるスレッドの最大数を実行時システムに示します。デフォルトは 2 です。『OpenMP API ユーザーガイド』を参照してください。

OMP_SCHEDULE

実行時のスケジュール型およびチャンクサイズを設定します。『OpenMP API ユーザーガイド』を参照してください。

PARALLEL

OMP_NUM_THREADS と同じです。

STACKSIZE

プログラムを実行すると、マスタースレッドのメインメモリースタック、および各スレーブスレッドの個別のスタックが維持されます。スタックとは、サブプログラムが呼び出されている間、引数と自動変数を保持するために使用される一時的なメモリーアドレス空間です。メインスタックのデフォルトのサイズは、約 8M バイトです。現在のメインスタックサイズを表示し、それを設定するには、limit(1) コマンドを使用します。

マルチスレッド化されたプログラムの各スレーブスレッドは、それ自体のスレッドスタックを持ちます。このスタックはマスタースレッドのメインスタックに似ていますが、各スレッド固有のものです。スレッドのスタックには、スレッド固有の配列とその (スレッドに対してローカルな) 変数が割り当てられます。

すべてのスレーブスレッドは、同じスタックサイズを持ちます。デフォルトでは、32 ビットアプリケーションの場合は 4M バイト、64 ビットアプリケーションの場合は 8M バイトです。このサイズは、STACKSIZE 環境変数で設定します。

一部の並列化されたコードでは、スレッドのスタックサイズをデフォルトより大きな値に設定する必要がある場合があります。

STACKSIZE 環境変数の構文は、スレーブスレッドのスタックサイズを示すためのキーワード (バイトの B、キロバイトの K、メガバイトの M、ギガバイトの G) を受け入れます。

たとえば、setenv STACKSIZE 8192 はスレーブスレッドのスタックサイズを 8M バイトに、1235B は 1235 バイトに、および 1235G は 1235G バイトに設定します。接尾辞文字なしの整数のデフォルトは K バイトです。

コンパイラが、より大きなスタックサイズが必要であるという警告メッセージを生成することがあります。ただし、それをどのくらいの大きさに設定するかは、試行錯誤で判別するしかない可能性があります。スレッド固有/ローカル配列がかかわる場合は特にそうです。スレッドを実行するにはスタックサイズが小さすぎる場合、プログラムはセグメント例外で中止されます。

TMPDIR

通常、cc は、一時ファイルを tmp ディレクトリ内に作成します。環境変数 TMPDIR を選択したディレクトリに設定することにより、別のディレクトリを指定できます。(TMPDIR が有効なディレクトリではない場合、cctmp を使用します)。-xtemp オプションと環境変数 TMPDIR では、-xtemp が優先されます。

SUNPRO_SB_INIT_FILE_NAME

(廃止) ソースブラウザ機能はサポートされなくなりました。

SUN_PROFDATA=profdir

設定すると、-xprofile=collect を指定してコンパイルされたプログラムから収集されたプロファイルデータが、プログラムが実行された時点での現在の作業ディレクトリ内の profdir という名前のディレクトリに格納されます。コンパイル時に、オプションの引数 :profdir-xprofile=collect[:profdir] に指定した場合、SUN_PROFDATA は無効になります。

SUN_PROFDATA_DIR=dirname

設定すると、-xprofile=collect を指定してコンパイルしたプログラムから収集されたプロファイルデータが、UNIX のディレクトリ名が dirname であるディレクトリに格納されます。dirname が絶対パスでない場合は、プログラムが実行された時点での現在の作業用ディレクトリの相対パスであると解釈されます。コンパイル時に、オプションの引数 :profdir-xprofile=collect[:profdir] に指定した場合、SUN_PROFDATA_DIR は無効になります。

SUNW_MP_THR_IDLE

各ヘルパースレッドのタスク終了ステータスを制御し、spin または sleep ns を設定できます。デフォルトは sleep です。詳細は、『OpenMP API ユーザーズガイド』を参照してください。

SUNW_MP_WARN

OpenMP およびその他の並列化ランタイムシステムからの警告メッセージを出力するには、この環境変数に TRUE を設定します。警告メッセージを処理するために sunw_mp_register_warn() を使用して関数を登録した場合、TRUE に設定しても SUNW_MP_WARN は警告メッセージを出力しません。関数を登録せずに SUNW_MP_WARN に TRUE を設定した場合、SUNW_MP_WARN は警告メッセージを標準エラー出力に出力します。関数を登録せず、SUNW_MP_WARN を設定しない場合、警告メッセージは発行されません。sunw_mp_register_warn() の詳細は、『C ユーザーガイド』を参照してください。

SUN_PROFDATA_REPLACE={objfile,program,all}

環境変数 SUN_PROFDATA_REPLACE の値は、実行時に、変更されたバージョンのオブジェクトファイルが検出されたときに、リセットされるプロファイルデータの範囲を示します。SUN_PROFDATA_REPLACE は、指定されたプログラムの範囲のユニット内にあるプロファイルされたプログラムとプロファイルデータの整合性を保つために使用します。

SUN_PROFDATA_REPLACE の値とその意味を次に示します。

objfile

変更されたオブジェクトファイルのプロファイルデータをリセットします。

program

変更されたオブジェクトファイルが含まれているプログラムのすべてのオブジェクトファイルのプロファイルデータをリセットします。

all

オブジェクトファイルが変更された場合、プロファイルディレクトリのすべてのコンテンツをリセットします。

SUN_PROFDATA_REPLACE のデフォルト設定は SUN_PROFDATA_REPLACE=objfile です。

例:

 
% setenv SUN_PROFDATA_REPLACE program (csh)
$ export SUN_PROFDATA_REPLACE=program (ksh)

この設定で、変更されたオブジェクトファイルが含まれているプログラムが実行されると、そのプログラムのすべてのオブジェクトファイルのプロファイルデータがリセットされます。関連するオプションには、-xOn および -xipo=n があります。

SUN_PROFDATA_ASYNC_INTERVAL=async_interval

非同期のプロファイル収集を有効にするには、この環境変数を設定します。非同期のプロファイル収集では、プロファイルデータは実行されているプロセスから一定の間隔 (秒単位で指定) で収集されます。

環境変数 LD_AUDIT、LD_AUDIT_32、または LD_AUDIT_64 のいずれかに /usr/lib/{,64}/libxprof_audit.so.1 が設定されていない場合、SUN_PROFDATA_ASYNC_INTERVAL は無効です。

非同期のプロファイル収集では、MT セーフの mmap ベースのメモリーアロケータ (UMEM_OPTIONSbackend=mmap に設定することによって mmap ベースの割り当てが指定されている libumem (3LIB) など) が必要となります。

例: 64 ビットのプロセスからの 1 分間隔の非同期のプロファイル収集を有効にするには、次の環境変数を指定します。

 
$ env LD_AUDIT_64=/usr/lib/64/libxprof_audit.so.1 \
SUN_PROFDATA_ASYNC_INTERVAL=60 UMEM_OPTIONS=backend=mmap \
64-bit-program [program-args]
SUN_PROFDATA_ASYNC_VERBOSE=verbose

ゼロ以外を設定すると、非同期コレクタから標準エラー出力に詳細なメッセージが出力されます。非同期のプロファイル収集が有効ではない場合、SUN_PROFDATA_ASYNC_VERBOSE は無効です。

SUN_PROFDATA_CLEANUP_AFTER_EXIT=[0|1]

1 を設定すると、プロセスが exit() を呼び出した時間とプロセスの終了が完了した時間の間に、プロファイラがデータ構造体をクリーンアップします。0 を設定すると、アプリケーションが exit() を呼び出す前に終了していなかったアプリケーションスレッドによるプロファイル収集への有害な干渉が防止されます。詳細は、exit(3C) を参照してください。デフォルト設定は SUN_PROFDATA_CLEANUP_AFTER_EXIT=0 です。

ファイル

a.out

実行可能出力ファイル

bb_link.o

tcov のサポート

file.a

オブジェクトファイルのライブラリ

file.c

C ソースファイル

file.d

tcov(1) テストカバレージの入力ファイル

file.i

前処理後の C ソースファイル

file.il

inline(1) 展開ファイル

file.ll

lock_lint データベース

file.o

オブジェクトファイル

file.profile

-xprofile によって使用されるデータのディレクトリ

file.s

アセンブラソースファイル

file.so

動的ライブラリ

file.tcov

tcov(1) からの出力

acomp

コンパイラのフロントエンド

cc

コンパイラのコマンド行ドライバ

cg

コードジェネレータ (SPARC)

crt1.o

実行時起動コード

crti.o

実行時起動コード

crtn.o

実行時起動コード

fbe

アセンブラ

gcrt1.o

gprof(1) を使用したプロファイリングのスタートアップコード

gmon.out

-xpg のデフォルトのプロファイルファイル

ipo

内部手続きオプティマイザ (SPARC)

iropt

グローバルオプティマイザ

libredblack.so

bids のサポート

mcrt1.o

prof(1) および intro(3) を使用したプロファイリングのスタートアップコード

misalign.o

整列境界を誤ったデータのサポート (SPARC)

mon.out

-p のデフォルトのプロファイルファイル

postopt

ポストオプティマイザ (SPARC)

ssbd

静的同期バグ検出 (Oracle Solaris オペレーティング環境)

stack_grow.o

スタックオーバーフローの検査 (SPARC)

SunWS_cache

-xpch オプションを使用した場合に、データを格納するために使用するディレクトリ。

ube

オプティマイザ、コードジェネレータ (x86)

ube_ipa

内部手続きアナライザ (x86)

values-xa.o

-Xa のサポート

values-xc.o

-Xc のサポート

values-xpg4.o

xpg4 のサポート

values-xpg6.o

SUSv3 のサポート

values-xs.o

-Xs のサポート

values-xt.o

-Xt のサポート

xprof_fini.o

-xprofile=collect を指定してコンパイルされたプログラムの初期化ハンドラおよびファイナライズハンドラ

関連項目

analyzer (1) , as (1) , c89 (1) , c99 (1) , cflow (1) , cscope (1) , ctags (1) , ctrace (1) , dbx (1) , er_src (1) , indent (1) , inline (4) , ld (1) , lint (1) , lock_lint (1) , prof (1) , sunstudio (1) , tmpnam (3C) , version (1)

C ユーザーズガイド

OpenMP API ユーザーガイド

『ISO/IEC 9899-1990 Programming Language - C standard』

『ISO/IEC 9899-1999 Programming Language - C standard』