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
OpenVMS Alpha から OpenVMS I64 へのアプリケーション・ポーティング・ガイド


前へ 次へ 目次 索引


5.5 OpenVMS I64 Librarian ユーティリティ

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 共有イメージ・ライブラリを表します。

5.5.3 UNIX スタイルの弱いシンボルを取り扱う I64 ライブラリ形式

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 の形式のままです。現在定義されているライブラリ・サービス・インタフェースを介してライブラリを参照するアプリケーションの場合,動作が変化することはありません。

5.5.3.2 バージョン 6.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 スタイルの弱い定義の関連付けが正しく維持されるようにする必要があります。


第 6 章
アプリケーションのポーティングの準備

この章では,OpenVMS I64 向けに提供される主要なコンパイラに関して,ポーティング上の検討事項の概要を示します。 表 6-1 は,I64 バージョンへのポーティングに使用された Alpha コンパイラのバージョンの対応関係を示しています。

表 6-1 Alpha コンパイラのバージョンと I64 コンパイラのバージョンの対応関係
コンパイラ 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 ---


1コンパイラはプラットフォーム固有です (Alpha のみ)。
2The I64 MACRO compiler is derived directly from VAX Macro 32.
3Compiler is platform-specific (for OpenVMS I64 only); porting is not applicable.
4Ships as freeware (not as part of OpenVMS).

大部分の 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 

6.3.2 提供されない Alpha BLISS の機能

ここでは,OpenVMS I64 BLISS ではサポートされていない Alpha 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 組み込み関数

以下の 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 はシステム・サービスを呼び出します。

Alpha BLISS のレジスタ名

以下のレジスタは,I64 のデフォルトでは下記に示すような機能で使用されているため, REGISTER,GLOBAL REGISTER,および EXTERNAL REGISTER での名前の指定や,LINKAGE 宣言に対するパラメータとしてはサポートされません。


   R0       ゼロ・レジスタ 
   R1       グローバル・ポインタ 
   R2       揮発性および GEM スクラッチ・レジスタ 
   R12      スタック・ポインタ 
   R13      スレッド・ポインタ 
   R14-R16  揮発性および GEM スクラッチ・レジスタ 
   R17-R18  揮発性スクラッチ・レジスタ 

INTERRUPT リンケージと EXCEPTION リンケージ

INTERRUPT リンケージと EXCEPTION リンケージはサポートされません。

BUILTIN Rn

BUILTIN キーワードに I64 のレジスタ名を指定することはできません。


前へ 次へ 目次 索引