Oracle® Solaris Studio 12.4: Fortran ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

3.4.116 -xcode[=v]

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


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

次の表に、v の値の一覧を示します。

表 3-18  -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 のデフォルト値である abs44abs32 を使用できません。-xcode=pic13 または -xcode=pic32 を指定してください。SPARC では、-xcode=pic13 および -xcode=pic32 で、2 つのわずかなパフォーマンスコストがあります。

  • -xcode=pic13 および -xcode=pic32 のいずれかでコンパイルしたルーチンは、共有ライブラリの大域または静的変数へのアクセスに使用されるテーブル (_GLOBAL_OFFSET_TABLE_) を指し示すようレジスタを設定するために、入口で命令を数個余計に実行します。

  • 大域または静的変数へのアクセスのたびに、_GLOBAL_OFFSET_TABLE_ を使用した間接メモリー参照が 1 回余計に行われます。-xcode=pic32 でコンパイルした場合は、大域および静的メモリーへの参照ごとに命令が 2 個増えます。

これらのコストを考慮しても、-xcode=pic13 および -xcode=pic32 を使用すると、ライブラリコード共有の効果により、必要なシステムメモリーを大幅に減らすことができます。-xcode=pic13 または -xcode=pic32 でコンパイルした共有ライブラリ中のコードの各ページは、そのライブラリを使用する各プロセスで共有できます。共有ライブラリ内のコードに非 pic (すなわち、絶対) メモリー参照が 1 つでも含まれている場合、そのコードは共有不可になるため、そのライブラリを使用するプログラムを実行する場合は、その都度、コードのコピーを作成する必要があります。

.o ファイルが -xcode=pic13 または -xcode=pic32 でコンパイルされたかどうかを調べるためのもっとも簡単な方法は、nm コマンドを使用する方法です。

% nm file.o | grep _GLOBAL_OFFSET_TABLE_ U _GLOBAL_OFFSET_TABLE_

位置独立コードを含む .o ファイルには、_GLOBAL_OFFSET_TABLE_ への未解決の外部参照が含まれます。文字 U で示されます。

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

-xcode どのように使用するべきかを決定するには、次のガイドラインに従います。

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

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

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

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