library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


HP OpenVMS

HP OpenVMS
V8.2 新機能説明書


前へ 次へ 目次 索引


7.1.3 OpenVMS I64 用 Linker の新しい修飾子

OpenVMS I64 システムでのリンクをサポートするために, Linker に新しい修飾子がいくつか追加されました。ここでは,これらの修飾子について説明します。

7.1.3.1 新しい /BASE_ADDRESS 修飾子

新しい修飾子 /BASE_ADDRESS が I64 システムに用意されました。ベース・アドレスは,Linker に割り当てを指示する,実行イメージの開始アドレスです。この修飾子は,OpenVMS イメージ・アクティベータによってアクティベートされないイメージ (たとえば,ブート処理で使用されるイメージ) に仮想アドレスを割り当てるためのものです。 OpenVMS イメージ・アクティベータは,Linker が割り当てた開始アドレスを無視することもできます。この修飾子は主にシステム開発者が使用します。

/BASE_ADDRESS 修飾子は,I64 では使用できない CLUSTER=,[base-address] オプションの代わりとなるものではありません。 第 7.1.1.2 項 を参照してください。

7.1.3.2 新しい /SEGMENT_ATTRIBUTE 修飾子

OpenVMS I64 Linker に,新しい修飾子 /SEGMENT_ATTRIBUTE が追加されました。この修飾子には 2 つのキーワード SHORT_DATA=WRITE と DYNAMIC_SEGMENT=P0 または P2 を指定できます。 /SEGMENT_ATTRIBUTE 修飾子の構文は次のとおりです。


/SEGMENT_ATTRIBUTE=([DYNAMIC_SEGMENT=(P0|P2) ], [SHORT_DATA=WRITE]) 

デフォルトでは,Linker は,イメージ・アクティベータ用の情報を持つ動的セグメントを P2 空間に配置します。しかし,DYNAMIC=P0 を指定すると,Linker はこの動的セグメントを P0 空間に配置するようになります。したがって,DYNAMIC_SEGMENT キーワードを指定する必要はほとんどありません。

SHORT_DATA=WRITE キーワードは,読み書き可能なショート・データ・セクションと読み取り専用/書き込み専用のショート・データ・セクションを 1 つのセグメントに結合することで,最大 65,535 バイトの未使用の読み取り専用領域を再利用できるようにします。 SHORT_DATA に WRITE を指定すると,以前は読み取り専用だったデータにプログラムが誤って書き込みをする可能性があります。したがって,この修飾子は,ショート・データ・セグメントが 4 MB の限界に達してしまった場合にのみ使用することをお勧めします。

7.1.3.3 新しい /FP_MODE 修飾子

OpenVMS I64 Linker は,メインの遷移アドレスを提供するモジュールに設定された浮動小数点モードを使用して,プログラムの初期浮動小数点モードを決定します。メインの遷移アドレスを提供するモジュールに初期浮動小数点モードが設定されていない場合に限り,/FP_MODE 修飾子を使用して,初期浮動小数点モードを設定してください。 /FP_MODE 修飾子は,メインの遷移モジュールに設定された初期浮動小数点モードより優先されることはありません。

OpenVMS I64 Linker では以下のキーワードを浮動小数点モードとして指定可能です。

OpenVMS I64 Linker に指定可能な IEEE の動作キーワードには,以下のものがあります。

OpenVMS I64 Linker には,浮動小数点モードの動作リテラルを指定することも可能です。初期浮動小数点モードの詳細は,『OpenVMS Calling Standard』を参照してください。

7.1.3.4 Linker の新しい修飾子: /EXPORT_SYMBOL_VECTOR と /PUBLISH_GLOBAL_SYMBOLS

/EXPORT_SYMBOL_VECTOR 修飾子と /PUBLISH_GLOBAL_SYMBOLS 修飾子が Linker に追加されました。これらの修飾子は,共有イメージを作成したいが,どのシンボルを SYMBOL_VECTOR オプションでエクスポートすればよいかわからないような場合に便利です。 (UNIX からアプリケーションを移植しようとしていて,そのアプリケーションに精通していなければ,エクスポートすべきシンボルがわからないといった場合があります。他には,C++ でコーディングしていて,マングル化された名前がどのように見えるかがわからないといった場合があります。)

新しい /PUBLISH_GLOBAL_SYMBOLS 修飾子は,オブジェクト・モジュール内のすべてのグローバル・シンボルをシンボル・ベクタ・オプション・ファイルにエクスポート可能とするために,オブジェクト・モジュールにマーク付けを行います。新しい /EXPORT_SYMBOL_VECTOR 修飾子は, /PUBLISH_SYMBOL_VECTOR でマーク付けされたモジュール内の各グローバル・シンボルに対するシンボル・ベクタ・オプションを出力ファイルに書き出します。 /EXPORT_SYMBOL_VECTOR を指定したときには,オプション・ファイルへの書き込みが行われるだけで,イメージ・ファイルは生成されません。生成されたオプション・ファイルは,開発者が今後のリンクで用いるために, GSMATCH 情報を付加して完結させておく必要があります。

どちらの修飾子も,/SHAREABLE 修飾子が指定されている場合にのみ,有効です。 /EXPORT_SYMBOL_VECTOR は,コマンド行でのみ指定できる修飾子です。 /PUBLISH_GLOBAL_SYMBOLS は,オプション・ファイルでの使用も可能です。 Linker は,/EXPORT_SYMBOL_VECTOR 修飾子が指定されているときに, /PUBLISH_GLOBAL_SYMBOLS 修飾子が指定されていないと警告メッセージを出力します。

/EXPORT_SYMBOL_VECTOR=[file-spec]

/EXPORT_SYMBOL_VECTOR は,I64 Linker に対し, /PUBLISH_GLOBAL_SYMBOLS 修飾子で指定されたシンボル・ベクタ・オプションと, GSMATCH テンプレート・オプションが格納されたオプション・ファイルを作成するように指示します。

/EXPORT_SYMBOL_VECTOR 修飾子を使用すると,イメージの生成は抑止されます。

/EXPORT_SYMBOL_VECTOR を指定すると,入力の symbol_vector オプションは受け付けられません。

/PUBLISH_GLOBAL_SYMBOLS を少なくとも 1 つ,コマンド行またはオプション・ファイル内に指定する必要があります。

この修飾子には,リンク操作で作成するオプション・ファイルの名前として使用したい文字列を指定することもできます。文字列にファイル・タイプを指定しないと,デフォルトで,ファイル・タイプ .OPT が割り当てられます。 /EXPORT_SYMBOL_VECTOR 修飾子にファイル名を指定しないと, Linker は,最初の入力ファイルのファイル名を使用してオプション・ファイルを作成します。

入力ファイル指定に /EXPORT_SYMBOL_VECTOR 修飾子を付加すると, Linker は,修飾子を付加したファイルのファイル名を使用してオプション・ファイルを作成します。

生成されたオプション・ファイルは,GSMATCH テンプレート・オプションを書き込んだ後,共有イメージ・ファイルを作成するために他のリンク操作で使用されます。

/PUBLISH_GLOBAL_SYMBOLS

/PUBLISH_GLOBAL_SYMBOLS 修飾子は,オブジェクト・モジュールやオブジェクト・モジュール・ライブラリにマーク付けし, /EXPORT_SYMBOL_VECTOR 修飾子で指定されたシンボル・ベクタ・オプション・ファイルへすべてのグローバル・シンボルをエクスポートするように, I64 Linker に指示します。

この修飾子は,/SHAREABLE 修飾子および /EXPORT_SYMBOL_VECTOR 修飾子と一緒に使用する必要があります。

この修飾子は,/INCLUDE 修飾子および /SELECTIVE_SEARCH 修飾子と互換性があります。この修飾子は,コマンド行と Linker オプション・ファイルで使用できます。

この修飾子をオブジェクト・ファイルに適用すると,そのオブジェクト・ファイル内のすべてのモジュールのすべてのグローバル・シンボルが,シンボル・ベクタ・オプションとしてエクスポートされることになります。

この修飾子を /SELECTIVE_SEARCH 修飾子と組み合わせて,オブジェクト・ファイルに適用すると,そのオブジェクト・ファイル内のすべてのモジュールのグローバル・シンボルのうち,参照されているもののみが,シンボル・ベクタ・オプションとしてエクスポートされることになります。

この修飾子をオブジェクト・ライブラリに適用すると,イメージ内に暗黙的に組み込まれた,オブジェクト・ライブラリのすべてのモジュールのすべてのグローバル・シンボルが,シンボル・ベクタ・オプションとしてエクスポートされることになります。

この修飾子を /INCLUDE 修飾子と組み合わせて,オブジェクト・ライブラリに適用すると,オブジェクト・ライブラリのインクルード・リストに記載されたモジュールのすべてのグローバル・シンボルが,シンボル・ベクタ・オプションとしてエクスポートされることになります。

/SELECTIVE_SEARCH 修飾子を使用してビルドされたオブジェクト・ライブラリにこの修飾子を適用すると,イメージに組み込まれた,オブジェクト・ライブラリのすべてのモジュールのグローバル・シンボルのうち,参照されているもののみが,シンボル・ベクタ・オプションとしてエクスポートされることになります。 (選択的検索が可能なライブラリにモジュールを挿入する方法については,『OpenVMS Command Definition, Librarian, and Message Utilities Manual』を参照してください。)

グローバル・シンボルが,複数のモジュールで一時的な定義 (つまり,C の緩やかな refdef 外部モデルから生成) となっている場合,モジュールのいずれかが /PUBLISH でマーク付けされていれば,公開されています。同様に,UNIX の弱いシンボルの場合は,いずれのモジュールによっても,グローバル・シンボルを,シンボル・ベクタ・オプションとしてエクスポートする候補とすることができます。ただし,どちらのシンボル・タイプの場合も,強い定義によってシンボルが上書きされる場合は,定義元モジュールに /PUBLISH があるかどうかによって,シンボルをシンボル・ベクタ・オプションとしてエクスポートする候補とするかどうかが決まります。

例:


$ link/SHARE public/PUBLISH,implementation/EXPORT=public 
$ link/SHARE plib/LIBRARY/PUBLISH/INCLUDE=public/EXPORT=public  
$ LINK/SHAREABLE public/PUBLISH, implementation/EXPORT=public 

PUBLIC.OBJ 内のモジュール中のグローバル・シンボルがすべて,シンボル・ベクタ・オプションとしてファイル PUBLIC.OPT にエクスポートされます。


$ LINK/SHAREABLE api_table,implementation/PUBLISH/SELECTIVE/EXPORT=public 

IMPLEMENTATION.OBJ 内のモジュール中のグローバル・シンボルのうち, API_TABLE.OBJ 内のモジュールから参照されているものだけが,シンボル・ベクタ・オプションとしてファイル PUBLIC.OPT にエクスポートされます。


$ LINK/SHAREABLE api_table,plib/LIBRARY/PUBLISH/EXPORT 

共有イメージに組み込まれている,ライブラリ PLIB.OLB のすべてのモジュールのすべてのグローバル・シンボルが,シンボル・ベクタ・オプションとしてファイル PLIB.OPT にエクスポートされます。


$ LINK/SHAREABLE plib/LIBRARY/PUBLISH/INCLUDE=public/EXPORT 

ライブラリ PLIB.OLB 内のモジュール public 中のグローバル・シンボルがすべて,シンボル・ベクタ・オプションとしてファイル PLIB.OPT にエクスポートされます。


$ LINK/SHAREABLE api_table, plib/LIBRARY/PUBLISH/SELECTIVE/EXPORT=public 

api_table 内のすべてのモジュールから参照されている,ライブラリ PLIB.OLB のすべてのモジュール中のすべてのグローバル・シンボルが,シンボル・ベクタ・オプションとして,ファイル PUBLIC.OPT にエクスポートされます。また,同様の例でオプション・ファイルに /PUBLISH が指定されているものを次に示します。


$ link/SHAREABLE TT:/opt/EXPORT  public/PUBLISH, implementation  

PUBLIC.OBJ 内のモジュール中のグローバル・シンボルがすべて,シンボル・ベクタ・オプションとして,TT: (端末への出力) にエクスポートされます。

7.1.3.5 /FULL 修飾子の新しいキーワード: GROUP_SECTIONS と SECTION_DETAILS

OpenVMS I64 Linker で,フル・イメージ・マップの作成を指示する /FULL 修飾子に 2 つのキーワードが追加されました。 /FULL 修飾子のフォーマットは,次のとおりです。


/FULL [=(keyword [,...])] 

OpenVMS I64 Linker は,マップの表示を調整するための次のキーワードを受け付けます (デフォルトは /FULL=SECTION_DETAILS)。

キーワード 意味
GROUP_SECTIONS OpenVMS I64 Linker に対して,処理されたすべてのグループ (ELF COMDAT) をリストするように指示します。
NOSECTION_DETAILS OpenVMS I64 Linker に対して,「Program Section Synopsis」での,長さがゼロのコントリビューションの出力を抑止するように指示します。
ALL OpenVMS I64 Linker では,ALL キーワードを指定すると,GROUP_SECTIONS キーワードと SECTION_DETAILS キーワードの両方を指定したのと同じになります。

最初のキーワード,GROUP_SECTIONS は,使用されたグループをすべてマップに出力します。現時点で,グループを活用できるコンパイラは, C++ だけです。このキーワードを C++ 以外の言語で使用しても効果はありません。

/FULL=NOSECTION_DETAILS を指定すると, OpenVMS I64 Linker は,マップの「Program Section Synopsis」での長さがゼロのコントリビューションの出力を抑制します。修飾子 /FULL を使用すると,デフォルトの /FULL=SECTION_DETAILS になり, VAX,Alpha,および I64 システムでのフル Linker マップとして,すべてのモジュール・コントリビューションが「Program Section Synopsis」にリストされます。

7.1.4 OpenVMS I64 の Linker の新しいオプション

OpenVMS I64 システムでのリンクをサポートするために, Linker に新しいオプションがいくつか追加されました。ここでは,これらの機能について説明します。

7.1.4.1 PSECT_ATTRIBUTE オプションの新しいアラインメント

PSECT_ATTRIBUTE オプションには,アラインメント属性として, 5,6,7,および 8 が追加されました。この整数値は, 2 のべき乗として示されるバイト・アラインメントを表します。たとえば,6 の場合には,2 ** 6 で, 64 バイト・アラインメントを表します。 2 ** 5 に対して,キーワード HEXA (16 ワードの意味) が追加されました (これは 32 バイト・アラインメント, 16 ワード・アラインメントを意味します)。

7.1.5 Linker の既存の修飾子とオプションの新しい使用方法

以下の項では,I64 システムでの,Linker の既存の修飾子とオプションの新しい使用方法を説明します。トピックは,次のとおりです。

7.1.5.1 I64 システムの Linker オプションでの大文字と小文字が混在した引数

OpenVMS I64 システムでは,コンパイラが大文字と小文字が混在した名前を生成することがあります。オプション・ファイル内の大文字と小文字が混在した名前を処理させる必要がある場合 (たとえば,ライブラリのインクルード文を使用していて,モジュールの名前に大文字と小文字が混在している場合) は,デフォルトの動作 (すべて大文字に変換してから処理する) を使用しないで, Linker のオプションを使って,大文字と小文字が混在した名前を処理するようにします。そのオプションは,CASE_SENSITIVE で,次のように指定します。


CASE_SENSITIVE=YES 

CASE_SENSITIVE オプションに YES を設定すると, (行の左端からみて) 最初の等号より右側にあるすべての文字 (たとえば,オプションの引数) は大文字/小文字の区別が維持されます。つまり,これらの文字は (大文字に) 変換されずにそのまま処理されます。ファイル名,モジュール名,シンボル名,キーワードが対象です。 Linker のデフォルト動作の行全体を大文字に変換する設定に戻すには,次のように NO キーワード付きの CASE_SENSITIVE オプションを指定します。


CASE_SENSITIVE=NO 

NO キーワードを小文字 (no) で指定すると,Linker によって認識されないため,大文字で指定する必要があることに注意してください。

たとえば,次の大文字と小文字が混在した名前を含むモジュールを扱う際に, Linker に大文字/小文字を区別するモードを設定して,大文字と小文字をそのまま残す場合を考えます。


 
 case=Yes 
 My_Lib/library/include=(Add_Func, Sub_Func) 
 symbol_vector=(Add_Func=PROCEDURE,PAGE_COUNT=DATA) 
 case=NO 
 

Linker によって処理されると,このテキストは次のようになります。


 
 CASE=YES 
 MY_LIB/LIBRARY/INCLUDE=(Add_Func,Sub_Func) 
 SYMBOL_VECTOR=(Add_Func=PROCEDURE,PAGE_COUNT=DATA) 
 CASE=NO 
 

各オプションの最初の等号より右側のすべての文字は大文字/小文字を区別したまま読み込まれていることがわかります。

VAX と Alpha での動作を保持するために, CASE_SENSITIVE=YES は,必要な場合にのみ使用することをお勧めします。

7.1.5.2 イメージ名を指定する場合の規約

次に示す規約は,イメージに適用される各種の名前の説明です。

Alpha システムでは,NAME= に指定したイメージ名は,共有イメージ・リスト内での自己参照を識別するために使われます。自己参照は,シンボル・ベクタ内の別名を使った,イメージ内部からの自身の呼び出しです。

I64 システムでは,共有イメージ・リスト内には現在のイメージに対するエントリがありません。自己参照は,共有イメージ・リスト (つまり,DT_NEEDED エントリの集まり) に対する特殊なインデックス値 (DT_VMS_FIXUP_NEEDED フィールドが -1) によって参照されます。


前へ 次へ 目次 索引