CC(1) — NEWS-OS Programmer’s Manual
名称
cc − RISC NEWS C コンパイラ
形式
cc [ option ] ... file ...
解説
cc は RISC NEWS の ucode C コンパイラであり、次のフォーマットでファイルを生成します。 通常は、 coff フォーマットを MIPS が拡張した MIPS オブジェクトで、それ以外は バイナリまたはシンボリック ucode、 ucode オブジェクトファイルおよびバイナリまたはシンボリックアセンブリ言語です。 cc は数種類の引数を受け付けます。
名前が .c で終わる引数は、C のソースプログラムであるとみなされます。 これらはコンパイルされ、各オブジェクトプログラムは、ソースファイル名の 最後の .c が .o に置き換えられた名前のファイルに入れられます。 1 つのソースプログラムがコンパイルされ、全部一度に ロードされるときだけ .o ファイルは削除されます。
名前が .s で終わる引数は、シンボリックアセンブリ言語ソースプログラム であるとみなされます。 これらはアセンブルされ、 .o ファイルが生成されます。 名前が .i で終わる引数は、C プリプロセッサによって処理された後の C ソースであるとみなされます。 これらはコンパイルされますが、C プリプロセッサによる処理は行われません。
−O3 フラグによって高水準の最適化が指定された場合、もしくは、 −j フラグによって ucode オブジェクトファイル生成が指定された場合、 各 C ソースファイルは ucode オブジェクトファイルにコンパイルされます。 ucode オブジェクトは、ソースファイル名の最後の .c が .u に置き換えられた名前のファイルに入れられます。
下記に示すサフィックスは主にコンパイラ開発を助けるためのもので、通常は 使用されません。 名前が .B、.O、.S および .M で終わる引数は、それぞれフロントエンド、オプティマイザ、 ucode オブジェクトファイルスプリッタ、および ucode マージャによって生成されたバイナリの ucode であるとみなされます。 名前が .U で終わる引数は、シンボリック ucode であるとみなされます。 名前が .G で終わる引数は、バイナリのアセンブリ言語であるとみなされます。 これは、コードジェネレータおよびシンボルからバイナリへのアセンブラに よって生成されます。
サフィックスの規定によってバイナリ ucode、 シンボリック ucode、 またはバイナリアセンブリ言語とみなされるファイルは、 .T サフィックスをもつファイル内に対応するシンボルテーブルを もっているとみなされます。
cc は、 sony、 sony_news、 r3000、 mips、 host_mips、 unix、 __sony、 __sony_news、 __r3000、 __mips、 __unix を定義し、環境変数 machine 、 cputype にセットされている値とそれらの頭にアンダスコアを 2 つつけたものを 定義して、C マクロプリプロセッサを起動します。 もし、これらの環境変数が定義されていない場合には、システムのデフォール トの値が設定されます。 cc は、 .c ファイルをコンパイルするときは、C プリプロセッサマクロ LANGUAGE_C、_LANGUAGE_C を定義します。 cc は、 .s ファイルをコンパイルするときは、C プリプロセッサマクロ LANGUAGE_ASSEMBLY、_LANGUAGE_ASSEMBLY を定義します。 また、 cc はデフォルトでは、 SYSTYPE_BSD、_SYSTYPE_BSD を定義しますが、これは −systype name オプションが指定された場合は変更されます(下記の説明を参照)。
cc によって解釈されるオプションを以下に示します。 load-time オプションについては ld(1) を参照してください。
−c コンパイルのローディングフェーズを抑制し、1 つのプログラムだけが コンパイルされるときでもオブジェクトファイルを生成するようにします。
−g0 コンパイラは、シンボリックデバッキング用のシンボルテーブル情報を生成 しないようにします。 これがデフォルトです。
−g1 コンパイラは、部分的に最適化されたコードにおいて正確だが制限 されたシンボリックデバッグをするためのシンボルテーブル情報を 生成させます。
−g または −g2
コンパイラは、完全なシンボリックデバッキングをするための追加のシンボル テーブル情報を生成させ、完全なシンボリックデバッキングを制限する最適化を 行わないようにします。
−g3 コンパイラは、完全に最適化されたコードにおいて完全なシンボリック デバッキングをするためのシンボルテーブル情報を生成させます。 このオプションにより作成されたオブジェクトに対して、デバッガは正確な動 作を保証しません。
−w 警告メッセージを制御します。
−p0 プロファイリングを許しません。 これがデフォルトです。 ローディングが行われる時に、標準のランタイム起動ルーチン (crt1.o) が使用され、プロファイリングライブラリは検索されません。
−p1 または −p
プログラムカウンタの値を定期的にサンプリングすることによってプロ ファイリングをするためのセットアップをします。 このオプションは、ローディングにだけ影響をおよぼします。 ローディングが行われた場合、このオプションは標準のランタイム起動ルーチン をプロファイリングランタイム起動ルーチン (mcrt1.o) に置き換え、レベル 1 のプロファイリングライブラリ (libprof1.a) をサーチします。 プロファイリングが行われた場合、起動ルーチンは monstartup(3) を呼び出し、ポストプロセッサ prof(l) で使用するための実行プロファイリングデータを mon.out ファイルに出力します。
−O0 最適化をすべてオフにします。
−O1 迅速に実行できる最適化をすべてオンにします。 これがデフォルトです。
−O または −O2
グローバルな ucode オプティマイザを呼び出します。
−O3 グローバルなレジスタ割当てを含め、すべての最適化を実行します。 このオプションは、すべてのソースファイル引数より前に置かなければ なりません。 このオプションを使用すると、 ucode オブジェクトファイルが各 C ソースファイル用に作成され、 .u ファイルに入れられます。 新しく作成された ucode オブジェクトファイル、コマンドライン上で指定された ucode オブジェクトファイル、ランタイム起動ルーチン、および すべてのランタイムライブラリは ucode リンクされます。その結果生成される ucode リンクされたファイル上で最適化が行われ、 続いて通常のようにリンクが行われて a.out ファイルが生成されます。 実際、 −O3 オプションが指定された場合には、 −c を指定することはできません。
−feedback file
−cord オプションと一緒に使用され、 フィードバックファイルとして使用される file を指定します。この file は、 pixie(1) によって生成されたプログラムの実行結果に対し、 −feedback オプションを設定した prof(1) によって生成されます。
−cord
リンクの結果生成されるファイルに対して、プロシージャリアレンジャ cord(1) を実行します。 再配置は、プログラムのテキストのキャッシュ衝突を減らすために行われます。 cord(1) の出力は、 −o output オプションで指定されたファイル、またはデフォルトの a.out に入れられます。少なくとも 1 つの −feedback file を指定しなければなりません。
−j 指定されたソースプログラムをコンパイルし、 ucode オブジェクトファイル出力を .u のサフィックスを付けた対応するファイルに入れます。
−ko output
ucode ローダによって作成される出力ファイルを output と命名します。このファイルは削除されません。 このファイルがコンパイルされた場合、オブジェクトファイルは、 output ファイルのサフィックスが .o に変えられたファイルに入れられます。 output にサフィックスがない場合は、 .o サフィックスが output に付加されます。
−k −k で始まるオプションを ucode ローダに渡します。このオプションは、 ucode ライブラリ (−klx による)およびその他の ucode ローダオプションを指定するために使用されます。
−S 指定されたソースプログラムをコンパイルし、シンボリックアセンブリ言語 出力を .s のサフィックスをもつ対応するファイルに入れます。
−P C マクロプリプロセッサだけを実行し、各ソースファイル(サフィックスの 規定による、すなわち .c および .s) の結果を対応する .i ファイルに入れます。 .i ファイルの中には、 # 行は含まれません。 このオプションは −cpp オプションを設定します。
−E (サフィックスがあるかないかに関係なく)ファイルに対して C マクロプリ プロセッサだけを実行し、その結果を標準出力に送ります。 これのオプションは −cpp オプションを設定します。
−C
−M
−Q これら 3 つのオプションは、そのまま cpp(1) に渡されます。詳細は、 cpp(1) を参照してください。
−o output
最終出力ファイルを output と命名します。このオプションが使用される場合、 a.out ファイルは変更されません。
−Dname=def
−Dname
C マクロプリプロセッサを起動する際に、 #define を指定したときと同様に name を定義します。定義される値 (def) が与えられない場合には、 name は、 1 として定義されます。
−Uname
name の初期定義を削除します。
−Idir 名前が / で始まっていない #include ファイルは最初 file 引数のファイルが存在するディレクトリ内で検索され、見つからない場合には −I オプションで指定されたディレクトリ内、そして最後に標準のディレクトリ (/usr/include、/usr/sony/include) 内を検索します。
−I このオプションが指定されると、 #include ファイルの検索を、標準のディレクトリ (/usr/include、/usr/sony/include) 内に対して行ないません
−G num
グローバルポインタを用いて参照されるデータ項目の最大サイズをバイト単位 で指定します。 num は 10 進数とみなされます。 num が 0 の場合、グローバルポインタを用いたデータ参照は行なわれません。 num のデフォルト値は 8 バイトです。
−v 実行パスを、関連する引数と入力ファイルおよび出力ファイルと一緒に 表示します。
−V ドライバおよびすべてのパスのバージョンを表示します。 これは、 what(1) コマンドで行われます。
−std[0,1]
コンパイラが、言語に関して標準ではないものに対して警告を生成するように します。−std0 は K & R 準拠、−std1 は、不完全ではあり ますが ANSI C 準拠、そして −std は −std1 と同じです。 −std または −std1 オプションを指定すると、 プリプロセッサに対して __STDC__=1 というマクロが設定されます。ANSI C がサポートされるまでは、 −std0 がデフオルトです。 現在のところ、−std1(もしくは −std)との唯一の相違点は、 ANSI の仕様で整定数が signed もしくは unsigned のどちらにも成りえる点です。 デフォルトの K & R モードでは、整定数の型は必ず int となります。
−Xt or −traditional
−std0 オプションと同じ。
−Xc or −pedantic
−std1 オプションと同じ。
−Xa −std オプションと同じ。
−cpp コンパイルの前に、C およびアセンブリソースファイルに対して C マクロ プリプロセッサを実行します。 これは、 cc のデフォルトです。
−nocpp
コンパイルの前に、C およびアセンブリソースファイルに対して C マクロ プリプロセッサを実行しません。
−Olimit num
グローバルオプティマイザによって最適化されるルーチンの最大サイズを 基本ブロック単位で指定します。 ルーチンの基本ブロックの数がこの数より多い場合は、そのルーチンは最適化 されず、メッセージが表示されます。 グローバルオプティマイザを指定するオプション (−O、−O2、 または −O3) も指定しなければなりません。 num は 10 進数とみなされます。 num のデフォルト値は 1000 基本ブロックです。
−edit[0−9]
コンパイラのフロントエンドによって構文エラーが認識された時に環境変数 EDITOR によって定義されているエディタ(定義されていない場合には vi(1) を起動する。キャラクター端末上でコンパイルしている時には、 コンパイルしているジョブがフォアグラウンドの場合にのみ有効です。 X-window ベースの端末上でコンパイルする場合には、そのコンパイルがフォ アグラウンド、バックグラウンドを問わず有効となります。エディタは 2 つの ファイルに対して起動されます。ひとつはエラーメッセージファイルで、もう 一つはソースファイルです。最初、全てのエラーの行番号をエラーメッセージ ファイルを用いて確認し、つぎに修正のため、ソースファイルに切り替えます。 エディタを終了すると、コンパイルが再スタートします。このプロセスはオプ ションの数字にしたがって、最大 9 回まで繰り返されます。オプション内に数 字を指定しない場合には、コンパイル − エディット − コンパイル のプロ セスは全てのエラーが修正されるまで行われます。−edit0 オプション はこのエディット機能を無効にします。
−trapuv
全ての未初期化スタック、automatic および動的に 確保された変数を 0xFFFA5A5A に初期化します。 この値が浮動小数点の変数として用いられると、 これは浮動小数点の NaN として扱われ、浮動小数点トラップを生成します。 また、ポインタとして用いられると、segmentation violation が生じます。
−framepointer
ソースファイル内で定義されているプロシジャに対して、フレームポインタを 用いるようにします。
cc はオブジェクトファイルのターゲットのバイト順序付け (byte ordering) が どちらのものも生成することができます。 デフォルトのターゲットのバイト順序付けは、コンパイラが実行されている マシンに合わせてあります(RISC NEWS では、 バイト順序付けのデフォルトは big-endian です)。 オプション −EB および −EL はターゲットのバイト順序付けを指定します (それぞれ big-endian および little-endian)。 コンパイラは、 ターゲットのバイト順序付けに対する C プリプロセッサマクロも定義します。 これらの C プリプロセッサマクロは、big-endian と little-endian のバイト 順序付けに対してそれぞれ MIPSEB、_MIPSEB、 または MIPSEL、_MIPSEL です。
−EB big-endian バイト順序付けでターゲットオブジェクトファイルを生成します。 C プリプロセッサマクロ MIPSEB 、 _MIPSEB がコンパイラによって定義されます。これがデフォルトです。
−EL little-endian バイト順序付けでターゲットオブジェクトファイルを生成します。 C プリプロセッサマクロ MIPSEL、_MIPSEL がコンパイラによって定義されます。
下記のオプションは、 cc 固有のものです。
−unsigned
すべての char 宣言を unsigned char 宣言にします。 デフォルトでは、これらは signed char 宣言として扱われます。
−signed
すべての char 宣言を signed char 宣言にします。 これがデフォルトです。
−volatile
すべての変数が volatile (揮発性のもの)として扱われるようにします。
−varargs
varargs.h マクロを必要とする可能性のある行に対する警告を表示します。
−float
コンパイラが、 float 型を double 型へ昇格させないようにします。
下記に示すオプションは主として、本来のコンパイル環境以外の UNIX コンパイル環境を提供するために使用されます。
−systype name
指定されたコンパイル環境 name を使用します。 サポートされているコンパイル環境の名称は、 bsd43 と sysv です。 これは、 #include ファイルの標準ディレクトリ、ランタイムライブラリ、および ランタイムライブラリがサーチされる場所を変更する効果をもっています。 新しい項目は、その通常のパスに置かれますが、そのパスの先頭に、 /name が付加されます。 また、デフォルトの SYSTYPE_BSD、_SYSTYPE_BSD の代わりに、形式 SYSTYPE_NAME、_SYSTYPE_NAME (name は大文字で書かれます) のプリプロセッサマクロが定義されます。
−mips1
R2000/R3000 RISC アーキテクチャの命令体系にしたがったコード生成を行いま す。R2000/R3000 を用いたシステムではこれがデフォールトとなります。
−mips2
R6000 RISC アーキテクチャの命令体系にしたがったコード生成を行いま す。R6000 を用いたシステムではこれがデフォールトとなります。
以下に記述するオプションは主に、コンパイラ開発を目的としており、 通常は使用されません。
−Hc 文字 c によって指定されたパスの後でコンパイルを停止し、次のパスのための中間 ファイルを生成します。 c は [fjusmoca] のどれかです。これは、 −t オプションと同じ方法でアセンブラパスを選択します。 このオプションを指定した場合、パスで作成、使用されたシンボルテーブルが 最後に残され、そのファイル名はソースファイルのサフィックスを .T に置換するか、末尾に加えたものです。このファイルは削除されません。
−K 中間ファイルの名前として、ソースファイルの名前のサフィックスを中間ファ イルのタイプに対して決められたサフィックス(たとえば、フロントエンドに よって生成されるバイナリの ucode ファイルに対しては、 .B) で置換されたものを用います。 ソースファイルがサフィックスをもっていない場合は、従来のサフィックスが ソースファイル名に付加されます。 これらの中間ファイルは、パスに致命的なエラーが発生したときでも 削除されることはありません。 ucode リンクが実行され、 −K オプションが指定された場合、 ucode リンクの後で作成されたファイルの基本名はデフォルトでは u.out です。 −ko output が指定された場合のオブジェクトファイルの基本名は、サフィックスが 存在するときはサフィックスのない output であり、サフィックスがない場合は、 output にサフィックスが付加されます。
−# バイナリ ucode ファイル (.B) または最適化されたバイナリ ucode ファイル (.O) を、 btou(1) を使用してシンボリック ucode ファイル (.U) に変換します。 C コンパイラフロントエンドからのバイナリ ucode を変換することによってシンボリック ucode ファイルを生成する場合は、フロントエンドオプション −Xu が btou(1) の代わりに使用されます。
−Wc[c...],arg1[,arg2...]
引数 argi をコンパイラパス c[c..] に渡します。 c は [pfjusmocablyz] の 1 つです。 c は −t オプションの場合と同様にしてコンパイラパスを選択します。
オプション −t[hpfjusmocablyzrnt]、 −hpath、 および −Bstring は、特定のパス、起動ルーチン、または標準ライブラリのために使用する 名前を選択します。 これらの引数は左から右に処理されるので、その順序は重要です。 −B オプションに出会うと、最後の −h および −t オプションを使用して名前の選択が行われます。 したがって、 −B オプションは、常に −h または −t オプションと組み合わせて用いられます。これらのオプションの組み合せによっ て、任意の名前の組合せを選択することができます。
−EB または −EL オプション、 −p[01] オプション、および −systype オプションは、ランタイムライブラリの位置、およびどのランタイムライブラリ を使用するかに影響を与えることがあるので、 −B オプションの前に置かなければなりません。
−t[hpfjusmocablyzrnt]
名前を選択します。 選択された名前は、下記の表に従って −t オプションの後に続く文字によって指定されたものです。
名前文字
includeh(下記の注意を参照)
cppp
ccomf
ujoinj
uldu
usplits
umergem
uopto
ugenc
as0a
as1b
ldl
ftocy
cordz
[m]crt[1n].or
libprof1.an
btou, utobt
−t 引数に文字 h がある場合、 #include ファイルのサーチに使用される ディレクトリのリストにディレクトリが 1 つ追加されます。 このディレクトリ名の形式は、 COMP_TARGET_ROOT/usr/includestring となっています。 このディレクトリは、コンパイラの string リリース用のインクルードファイルを含むためのものです。
−hpath
名前が通常見られるディレクトリではなく path を使用します。
−Bstring
−t オプションによって指定された名前すべてに string を付加します。 −B の前に −t オプションが処理されていない場合は、 −t オプションは hpfjusmocablyzrnt であるとみなされます。このリストはすべての名前を指定します。 −B の前に −t 引数が処理されていない場合は、 −Bstring はその −lx 引数とともに使用するためにローダに渡されます。
ccstring の形式の名前をもつコンパイラの呼び出しは、コマンド行上で −Bstring を使用するのと同じ効果があります。
環境変数 COMP_HOST_ROOT が設定されている場合は、その値はデフォルトの / の代わりにすべてのパス名のルートディレクトリとして使用されます。 環境変数 COMP_TARGET_ROOT が設定されている場合は、その値はデフォルトの / の代わりに、すべてのインクルードファイルおよびライブラリ名のルート ディレクトリとして使用されます。 これは、 #include ファイルの標準ディレクトリ /usr/include、/usr/sony/include および標準ライブラリの /usr/lib/libc.a に影響します。 この環境変数が設定されている場合は、 −lx オプション使用時にライブラリがサーチされる最初のディレクトリは、 COMP_TARGET_ROOT/usr/lib/cmplrs/cc です。 その後で、ライブラリの標準ディレクトリがサーチされます (ld(1) を参照)。
環境変数 TMPDIR が設定されている場合は、その値はデフォルトの /tmp/ の代わりに、任意の一時ファイルを入れるディレクトリとして使用されます。
環境変数 RLS_ID_OBJECT が設定されている場合は、その値はリンクが行われるときはリンクする オブジェクトの名前として使用されます。 これは、オブジェクトにリリース識別情報を追加するために使用されます。 これは常に、ローダに対して指定される最後のオブジェクトです。 この情報を作成するためのツールに関しては、 rls_id(1) を参照してください。
その他の引数は、ローダオプションまたは cc を以前に実行した時に生成された C コンパチブルのオブジェクトファイル、 あるいは C コンパチブルのルーチンのライブラリのいずれかであると みなされます。 これらのファイルは、指定されたコンパイルの結果として、指定された 順序でロードされ、デフォルトの名前 a.out をもつ実行可能プログラムを生成します。
ファイル
file.c入力ファイル
file.oオブジェクトファイル
a.outロードされた出力ファイル
/tmp/ctm?一時ファイル
/usr/lib/cppC マクロプリプロセッサ
/usr/lib/ccomC フロントエンド
/usr/lib/ujoinバイナリ ucode とシンボルデーブルのジョイナ
/usr/bin/ulducode ローダ
/usr/lib/usplitバイナリ ucode とシンボルテーブルのスプリッタ
/usr/lib/umergeプロシージャインテグレータ
/usr/lib/uoptオプションのグローバル ucode オプティマイザ
/usr/lib/ugenコードジェネレータ
/usr/lib/as0シンボリックからバイナリへのアセンブリ言語翻訳プログラム
/usr/lib/as1バイナリのアセンブリ言語のアセンブラとリオーガナイザ
/usr/lib/crt1.oランタイム起動ルーチン
/usr/lib/crtn.oランタイム起動ルーチン
/usr/lib/mcrt1.oプロファイリング用の起動ルーチン
/usr/lib/libc.a標準ライブラリ、intro(3) を参照
/usr/lib/libprof1.a レベル 1 のプロファイリングライブラリ
/usr/include#include ファイル用の標準ディレクトリ
/usr/bin/ldRISC NEWS ローダ
/usr/lib/ftocprof(1) と cord(1) 間のインタフェース
/usr/lib/cordプロシージャリアレンジャ
/usr/bin/btouバイナリからシンボリックへの ucode 翻訳プログラム
/usr/bin/utobシンボリックからバイナリへの ucode 翻訳プログラム
mon.outprof(1) による分析用に生成されたファイル
関連事項
B. W. Kernighan and D. M. Ritchie, The C Programming Language, Prentice-Hall, 1978
B. W. Kernighan, Programming in C—a tutorial
D. M. Ritchie, C Reference Manual
RISC NEWS Compiler Langage Programmer’s Guide,
monstartup(3), prof(1), ld(1), dbx(1), what(1), cord(1), pixie(1), ftoc(1)
診断
cc によって生成される診断は、自明であるように作られています。 場合によってはアセンブラまたはローダによってメッセージが生成される ことがあります。
注意
標準ライブラリ /usr/lib/libc.a は、完全なパス名ではなく、 −lc ローダオプションを使用することによってロードさます。 −L ローダオプションで指定されたディレクトリ、またはローダによって サーチされるデフォルトのディレクトリの中に、 libc.astring という名前のファイルがある場合、誤ったライブラリがロードされることが あります。
インクルードディレクトリおよび libc.a の操作には、混乱させられます。
NEWS-OSRelease 4.2.1R