HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
OpenVMS I64 の Librarian ユーティリティは, OpenVMS Alpha の Librarian と同じ機能を提供しますが,一部の機能が変更されており,制限事項もあります。ここでは,I64 の Librarian に固有の機能について説明します。制限事項やその他の一時的な条件については,『HP OpenVMS Version 8.2 リリース・ノート [翻訳版]』を参照してください。
5.5.1 I64 Librarian を使用する場合の検討事項
DCL の LIBRARY コマンド (または Librarian LBR ルーチン) を使用すると,I64 (ELF) オブジェクト・ライブラリ, I64 (ELF) 共有イメージ・ライブラリ,マクロ・ライブラリ,ヘルプ・ライブラリ,テキスト・ライブラリなどのライブラリを作成できます。ライブラリ内のモジュールの保守や,ライブラリとそのモジュールに関する情報の表示が可能です。 I64 の Librarian で Alpha および VAX のオブジェクトや共有イメージを作成したり,処理することはできません。 I64 Librarian のアーキテクチャは Intel Itanium です。
I64 ライブラリ用のアーキテクチャ・スイッチはありません。以下の修飾子を指定した場合,Librarian は OpenVMS ELF オブジェクト・ライブラリおよびイメージ・ライブラリを取り扱います。
/OBJECT 修飾子も /SHARE 修飾子も指定しなかった場合,作成されるデフォルトのライブラリ・タイプはオブジェクト・ライブラリです。
5.5.2 LBR$ ルーチンの変更点
I64 システムでは,LBR$OPEN ルーチンに対して 2 つの新しいライブラリ・タイプが追加されました。
LBR$C_TYP_ELFOBJ (9) --- ELF オブジェクト・ライブラリを表します。
LBR$C_TYP_ELFSHSTB (10) --- ELF 共有イメージ・ライブラリを表します。
さらに,LBR$OPEN ルーチンに対する以下のライブラリ・タイプは,I64 の Librarian ではサポートされません。これらのライブラリ・タイプを使用して,OpenVMS Alpha または VAX のオブジェクト・ライブラリと共有イメージ・ライブラリを作成したり,開いたりすることはできません。
LBR$C_TYP_OBJ (1) --- VAX オブジェクト・ライブラリを表します。
LBR$C_TYP_SHSTB (5) --- VAX 共有イメージ・ライブラリを表します。
LBR$C_TYP_EOBJ (7) --- Alpha オブジェクト・ライブラリを表します。
LBR$C_TYP_ESHSTB (8) --- Alpha 共有イメージ・ライブラリを表します。
Intel C++ コンパイラの要件により, I64 ライブラリの形式が拡張され,新しい UNIX スタイルの弱いシンボルを取り扱うようになりました。新しい UNIX スタイルの弱いシンボルのキー名に一致する複数のモジュールが,同じライブラリに存在できるようになりました。以前の動作と同様に,Librarian は OpenVMS スタイルの弱いシンボル定義を無視します。
UNIX スタイルの弱いシンボル定義は, OpenVMS での弱い転送アドレスと同じ方法で動作します。つまり,その定義は一時的です。より強力なバインディング・タイプの定義がリンク操作で検出されない場合は,一時的な定義が最終的な定義として指定されます。
5.5.3.1 弱いシンボルに対する新しい ELF タイプ
2 種類の弱いシンボル定義を区別するために,新しい ELF (Executable and Linkable Format) タイプが用意されました。 ABI バージョン 2 のモジュール (コンパイラが使用する最も一般的なバージョン) の場合は,以下のようになります。
Librarian は同じライブラリ内で, ELF ABI バージョン 1 およびバージョン 2 の両方のオブジェクト・ファイルおよびイメージ・ファイルの形式をサポートします。
新しいライブラリ形式 (バージョン 6.0) は, ELF オブジェクト・ライブラリおよび共有イメージ・ライブラリにだけ適用されます。その他のライブラリはバージョン 3.0 の形式のままです。現在定義されているライブラリ・サービス・インタフェースを介してライブラリを参照するアプリケーションの場合,動作が変化することはありません。 |
新しいバージョン 6.0 のライブラリを使用することをお勧めします。旧バージョン (バージョン 3.0) のライブラリは, Library Services で開くことができますが,変更することはできません。旧バージョンのライブラリはバージョン 4.0 に変換できますが,制限事項があります。詳細については,『HP OpenVMS Version 8.2 新機能説明書』を参照してください。
5.5.3.3 新しいグループ・セクション・シンボル
グループという ELF エンティティ内に含まれるセクションの集まりにシンボルを関連付けることができます。これらのグループと,グループに関連付けられたシンボルは,新しい UNIX スタイルの弱いシンボル定義と同様の動作をします。つまり,これらは一時的な定義です。 Librarian は現在,ライブラリのシンボル名インデックスで重複したシンボル定義を認めています。
5.5.3.4 弱いシンボルとグループ・シンボルに関する現在のライブラリの制限事項
ライブラリ・シンボル・エントリは,それが定義されたモジュールに関連付けられます。 OpenVMS I64 では,複数のモジュールが UNIX スタイルの弱いシンボルまたはグループ・シンボルを定義できます。そのため,I64 Librarian は定義しているモジュールの優先順リストを管理しなければなりません。このリストがあれば,優先順位の高い関連付けが削除されても,優先順位が低い関連付けを使用できます。優先順位の規則の詳細については,『HP OpenVMS Version 8.2 リリース・ノート [翻訳版]』を参照してください。
現時点では,『HP OpenVMS Version 8.2 リリース・ノート [翻訳版]』に説明されている制限事項があるため, UNIX スタイルの弱いシンボルを使うモジュールを含むライブラリに対してだけ,挿入操作だけを実行するようにしてください。ライブラリ内のモジュールの削除や置換を行う場合は,ライブラリを再ビルドして, UNIX スタイルの弱い定義の関連付けが正しく維持されるようにする必要があります。
この章では,OpenVMS I64 向けに提供される主要なコンパイラに関して,ポーティング上の検討事項の概要を示します。 表 6-1 は,I64 バージョンへのポーティングに使用された Alpha コンパイラのバージョンの対応関係を示しています。
| コンパイラ | OpenVMS Alpha | OpenVMS I64 | 参照先 |
|---|---|---|---|
| BASIC | V1.6 | V1.6 | 第 6.2 節 を参照 |
| BLISS | V1.11-004 | V1.12-067 | 第 6.3 節 を参照 |
| COBOL | V2.8 | V2.8 | 第 6.4 節 を参照 |
| Fortran 77 | --- | 提供されません 1 | 第 6.5.2 項 を参照 |
| Fortran 90 | V7.5 | V8.0 | 第 6.5 節 を参照 |
| GNAT Pro Ada 95 | 他社製 | --- | 第 6.1 節 を参照 |
| HP Ada 83 | V3.5A | 提供されんません 1 | --- |
| HP C | V6.5 | V7.1 | 第 6.6 節 を参照 |
| HP C++ | V6.5 | 7.1 | --- |
| HP Pascal | V5.9 | V5.9 | --- |
| Java | 1.4.2 | 1.4.2-1 | 第 6.8 節 を参照 |
| Macro-32 | V4.1-18 | T1.0-77 | 第 6.9 節 を参照 |
| Macro-64 | V1.2 | 提供されません 1 | --- |
大部分の OpenVMS I64 コンパイラには,以下に示す共通の特徴があります。
これらの新しいコンパイラで発生する問題を振るい落とすために, OpenVMS I64 にポーティングされているバージョンのコンパイラを使って,まず OpenVMS Alpha 上でアプリケーションをコンパイルすることをお勧めします (新しいバージョンのコンパイラでは,既存のコンパイラ標準より厳密な解釈が適用されたり,新しい厳密な標準が適用されていることがあります)。新しいコンパイラを使って OpenVMS Alpha システム上でアプリケーションをコンパイルし,リンクし,実行してエラーが発生しなければ,そのアプリケーションは OpenVMS I64 へのポーティングが可能です。
6.1 ADA
OpenVMS I64 Version 8.2 では ADA 95 が使用できます。 ADA 83 は,I64 ではサポートされません。
6.2 BASIC
Alpha と I64 では同じ BASIC がサポートされます。 OpenVMS I64 上で BASIC を使用する場合の注意事項については, BASIC のリリース・ノートを参照してください。
OpenVMS Alpha の BASIC コンパイラのデフォルトは /REAL_SIZE=SINGLE (VAX F-float) で,OpenVMS I64 では /REAL_SIZE=SFLOAT がデフォルトです。
BASIC コンパイラは /IEEE_MODE 修飾子をサポートしません。コンパイラと RTL は,例外処理とラウンディング処理に関しては I64 上でも Alpha 版と同じようにランタイム環境を設定します。
6.3 BLISS コンパイラ
ここでは,OpenVMS Alpha と OpenVMS I64 の BLISS コンパイラの相違点について説明します。
BLISS-32EN と BLISS-64EN は, OpenVMS Alpha システム用のコードを生成する OpenVMS Alpha のネイティブ・コンパイラです。
BLISS-32IN と BLISS-64IN は, OpenVMS I64 システム用のコードを生成する OpenVMS I64 のネイティブ・コンパイラです。
BLISS-32xx コンパイラは 32 ビット操作を実行します (つまり,BLISS の値はロングワードです)。デフォルトは 32 ビットです。この章では,これらのコンパイラを総称して「32 ビット・コンパイラ」と呼びます。
BLISS-64xx は 64 ビット操作を実行します (つまり,BLISS の値はクォドワードです)。デフォルトは 64 ビットです。この章では,これらのコンパイラを総称して「64 ビット・コンパイラ」と呼びます。
コンパイラを起動するには,以下のコマンドを使用します。
| プラットフォーム | コンパイラ | コマンド |
|---|---|---|
| Alpha | BLISS-32EN | BLISS/A32 または BLISS |
| Alpha | BLISS-64EN | BLISS/A64 |
| I64 | BLISS-32IN | BLISS/I32 または BLISS |
| I64 | BLISS-64IN | BLISS/I64 |
6.3.1 BLISS ファイル・タイプとファイル位置のデフォルト
ここでは,BLISS コンパイラのデフォルトのファイル・タイプと,出力ファイルの位置について説明します。
OpenVMS コンパイラのオブジェクト・ファイルのデフォルトのファイル・タイプは .OBJ です。
ライブラリ・ファイルの出力ファイルのデフォルトのファイル・タイプは, BLISS-32EN と BLISS-32IN の場合は .L32, BLISS-64EN と BLISS-64IN の場合は .L64 です。これらのライブラリ・ファイルの間に互換性はありません。
BLISS-32EN の検索リストは以下のとおりです。
| ソース・コード: | .B32E,.B32,.BLI |
| リクワイア・ファイル: | .R32E,.R32,,REQ |
| ライブラリ・ファイル: | .L32E,.L32,.LIB |
BLISS-64EN の検索リストは以下のとおりです。
| ソース・コード: | .B64E,.B64,.BLI |
| リクワイア・ファイル: | .R64E,.R64,.REQ |
| ライブラリ・ファイル: | .L64E,.L64,.LIB |
BLISS-32IN の検索リストは以下のとおりです。
| ソース・コード: | .B32I,.B32,.BLI |
| リクワイア・ファイル: | .R32I,.R32,.REQ |
| ライブラリ・ファイル: | .L32I,.L32,.LIB |
BLISS-64IN の検索リストは以下のとおりです。
| ソース・コード: | .B64I,.B64,,BLI |
| リクワイア・ファイル: | .R64I,.R64,.REQ |
| ライブラリ・ファイル: | .L64I,.L64,.LIB |
OpenVMS コンパイラの出力ファイルの場所は, Alpha で動作する場合も I64 で動作する場合も,出力修飾子がコマンド・ラインのどこに指定されているかに応じて決まります。
Alpha の BLISS でも I64 の BLISS でも,入力ファイル指定の後に /OBJECT,/LIST, /LIBRARY などの出力ファイル修飾子が指定されていて,出力ファイル指定がない場合は,出力ファイルのデフォルトは,直前に指定されている入力ファイルのデバイス,ディレクトリ,およびファイル名に設定されます。以下の例を参照してください。
$ BLISS /A32 [FOO]BAR/OBJ ! Puts BAR.OBJ in directory FOO $ BLISS /I32 [FOO]BAR/OBJ ! Puts BAR.OBJ in directory FOO $ $ BLISS /A32 /OBJ [FOO]BAR ! Puts BAR.OBJ in default directory $ BLISS /I32 /OBJ [FOO]BAR ! Puts BAR.OBJ in default directory $ $ BLISS /A32 [FOO]BAR/OBJ=[] ! Puts BAR.OBJ in default directory $ BLISS /I32 [FOO]BAR/OBJ=[] ! Puts BAR.OBJ in default directory |
ここでは,OpenVMS I64 BLISS ではサポートされていない Alpha BLISS の機能について説明します。
以下の Alpha BLISS のマシン固有の組み込み関数は,I64 ではサポートされなくなりました。
CMP_STORE_LONG (CMP_SWAP_LONG に変更)
CMP_STORE_QUAD (CMP_SWAP_QUAD に変更)
CMPBGE
DRAINT
RPCC
TRAPB
WRITE_MBX
ZAP
ZAPNOT
CMP_SWAP_LONG と CMP_SWAP_QUAD の詳細については, 比較 (Compare) およびスワップ (Swap) 組み込み関数 を参照してください。
以下の Alpha BLISS PALcode 組み込み関数は,I64 ではサポートされなくなりました。
CALL_PAL PAL_MFPR_PCBB PAL_MTPR_SIRR PAL_BPT PAL_MFPR_PRBR PAL_MTPR_SSP PAL_BUGCHK PAL_MFPR_PTBR PAL_MTPR_TBIA PAL_CFLUSH PAL_MFPR_SCBB PAL_MTPR_TBIAP PAL_CHME PAL_MFPR_SISR PAL_MTPR_TBIS PAL_CHMK PAL_MFPR_SSP PAL_MTPR_TBISD PAL_CHMS PAL_MFPR_TBCHK PAL_MTPR_TBISI PAL_CHMU PAL_MFPR_USP PAL_MTPR_USP PAL_DRAINA PAL_MFPR_VPTB PAL_MTPR_VPTB PAL_HALT PAL_MFPR_WHAMI PAL_PROBER PAL_GENTRAP PAL_MTPR_ASTEN PAL_PROBEW PAL_IMB PAL_MTPR_ASTSR PAL_RD_PS PAL_LDQP PAL_MTPR_DATFX PAL_READ_UNQ PAL_MFPR_ASN PAL_MTPR_ESP PAL_RSCC PAL_MFPR_ASTEN PAL_MTPR_FEN PAL_STQP PAL_MFPR_ASTSR PAL_MTPR_IPIR PAL_SWPCTX PAL_MFPR_ESP PAL_MTPR_IPL PAL_SWASTEN PAL_MFPR_FEN PAL_MTPR_MCES PAL_WRITE_UNQ PAL_MFPR_IPL PAL_MTPR_PRBR PAL_WR_PS_SW PAL_MFPR_MCES PAL_MTPR_SCBB PAL_MTPR_PERFMON |
PALCALL 組み込み関数用のマクロ定義が STARLET.REQ に含まれています。 OpenVMS はサポーティング・コードを提供しています。特権 CALL_PAL はエグゼクティブ・ルーチンを呼び出し,非特権 CALL_PAL はシステム・サービスを呼び出します。
以下のレジスタは,I64 のデフォルトでは下記に示すような機能で使用されているため, REGISTER,GLOBAL REGISTER,および EXTERNAL REGISTER での名前の指定や,LINKAGE 宣言に対するパラメータとしてはサポートされません。
R0 ゼロ・レジスタ R1 グローバル・ポインタ R2 揮発性および GEM スクラッチ・レジスタ R12 スタック・ポインタ R13 スレッド・ポインタ R14-R16 揮発性および GEM スクラッチ・レジスタ R17-R18 揮発性スクラッチ・レジスタ |
INTERRUPT リンケージと EXCEPTION リンケージ
INTERRUPT リンケージと EXCEPTION リンケージはサポートされません。
BUILTIN キーワードに I64 のレジスタ名を指定することはできません。
| 前へ | 次へ | 目次 | 索引 |