日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第1章:はじめに
第2章:基本的な相違点
第3章:アプリケーションの調査
第4章:ソース・モジュールの移行
第5章:OpenVMS I64 開発環境
第6章:ポーティングの準備
第7章:その他の検討事項
付録A :アプリケーション評価チェックリスト
付録B :サポート対象外のレイヤード・プロダクト
付録C :アプリケーション固有のスタック切り換えコードの I64 へのポーティング
用語集
索引
PDF
OpenVMS ホーム

HP OpenVMS
OpenVMS Alpha から OpenVMS I64 へのアプリケーション・ポーティング・ガイド


目次 索引



OpenVMS I64 リンカは, main プログラムの転送アドレスを提供するモジュールが提供する浮動小数点モードを使用して,プログラムの初期浮動小数点モードを決定します。メイン転送アドレスを提供するモジュールが初期浮動小数点モードを提供しない場合のみ, /FP_MODE 修飾子を使用して浮動小数点の初期モードを設定してください。 /FP_MODE 修飾子は,メイン転送モジュールが提供する浮動小数点の初期モードを上書きしません。 OpenVMS I64 リンカは,浮動小数点モードの設定に次のキーワードを使用できます。

  • D_FLOAT, G_FLOAT---VAX 浮動小数点モードを設定します。

  • IEEE_FLOAT[=ieee_behavior]---IEEE 浮動小数点モードをデフォルトあるいは特定の動作に設定します。

OpenVMS I64 リンカは,次の ieee_behavior キーワードを使用できます。

  • FAST

  • UNDERFLOW_TO_ZERO

  • DENORM_RESULTS (デフォルト)

  • INEXACT

OpenVMS I64 リンカは,浮動小数点モード動作リテラルも使用できます。浮動小数点初期モードについての詳細は,『OpenVMS Calling Standard』を参照してください。

/EXPORT_SYMBOL_VECTOR および /PUBLISH_GLOBAL_SYMBOLS 修飾子は, SYMBOL_VECTOR オプションでどのシンボルをエクスポートするかを知らないユーザが共有イメージを作成するのを支援するためにリンカに追加されています。 UNIX からアプリケーションをポーティングしているがどのシンボルをエクスポートするか良くわからないような場合,あるいは,C++ でコーディングしていてマングル名が何になるかわからない場合に役に立ちます。

OpenVMS I64 リンカは,オブジェクト・モジュール中のすべてのグローバル・シンボルをシンボル・ベクタ・オプションへエクスポートするようにモジュールにマークを付ける,新しい /PUBLISH_GLOBAL_SYMBOLS 修飾子を提供します。さらに,OpenVMS I64 リンカは,シンボル・ベクタ・オプションをエクスポートすることを指定し,またその出力ファイル名を設定するための新しい /EXPORT_SYMBOL_VECTOR 修飾子も提供します。

どちらの修飾子も /SHAREABLE 修飾子を指定している場合のみ有効です。 /EXPORT_SYMBOL_VECTOR はコマンド行でのみ使用可能です。 /PUBLISH_GLOBAL_SYMBOLS はオプション・ファイルでも使用可能です。 /PUBLISH_GLOBAL_SYMBOLS 修飾子がないのに /EXPORT_SYMBOL_VECTOR がある場合,リンカは警告を出します。

/EXPORT_SYMBOL_VECTOR がある場合,オプション・ファイルが書き込まれますがイメージ・ファイルは生成されません。生成されるオプション・ファイルは,開発者が GSMATCH 情報を書き加えて完成させる必要があります。

/PUBLISH_GLOBAL_SYMBOLS 修飾子は位置修飾子で,オブジェクト・ファイルとライブラリで使用されます。 /INCLUDE および /SELECTIVE 修飾子と互換性があります。次に例を示します。

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

/EXPORT_SYMBOL_VECTOR 修飾子は位置修飾子で,オプションの出力ファイル指定を受け付けます。ファイル名が指定されていない場合リンカは最後の入力ファイル名を使用し,デフォルトのファイル・タイプは .OPT です。

この修飾子についての詳細は『HP OpenVMS Version 8.2 新機能説明書』を参照してください。

PSECT_ATTRIBUTE オプションは,アラインメント属性として整数 5,6,7,8 を受け付けるようになりました。これらの整数は,2 のべき乗として示されるバイト・アラインメントを表します (たとえば,2 ** 6 は 64 バイト・アラインメントを表します)。 2 ** 5 (つまり,32 バイト・アラインメントまたは 16 ワード・アラインメント) を表すために,キーワード HEXA (16 ワードの意味) が追加されました。

OpenVMS I64 リンカは /FULL 修飾子で 2 つの新しいキーワードを使用できます。最初のキーワード GROUP_SECTIONS は,マップで使用されているすべてのグループを出力します。現在,グループを利用できるコンパイラは C++ のみです。他の言語でこのキーワードを使用しても効果はありません。

/FULL=NOSECTION_DETAILS が指定されている場合, OpenVMS I64 リンカは,長さゼロの Program Section Synopsis データをマップにリストしません。 /FULL 修飾子が使用されている場合,デフォルトは /FULL=SECTION_DETAILS となり, VAX,Alpha,および I64 のリンカ・マップは Program Section Synopsis にすべてのモジュールをリストします。

5.3.4 リンカ・オプションの引数における大文字小文字の区別

OpenVMS I64 システムでは,コンパイラが発行する名前は大文字と小文字が混在する場合があります。オプション・ファイルで大文字と小文字か混在する名前を操作する必要がある場合のため (たとえばライブラリに /INCLUDE を指定していて,大文字と小文字か混在するモジュール名がある場合など),リンカは,デフォルトの動作 (名前はすべて大文字) ではなく,大文字/小文字を区別して名前を処理するオプションをすでに持っています。次に示す CASE_SENSITIVE オプションを使います。

CASE_SENSITIVE=YES 

CASE_SENSITIVE オプションが YES に設定されている場合,等号の右側のすべての文字 (オプション引数など) の大文字/小文字の違いは維持されます。つまり,これらの文字は変更なくそのまま使用されます。ファイル名,モジュール名,シンボル名,およびキーワードがこれに含まれます。オプション行全体を大文字にするというリンカのデフォルトの動作に戻すには,次のように CASE_SENSITIVE オプションに NO キーワードを指定します。

CASE_SENSITIVE=NO 

NO キーワードは大文字で指定しなければなりません。大文字でないとリンカが認識しません。

VAX および Alpha との互換性のため,このオプションは必要な場合のみ使用することをお勧めします。

詳細については『HP OpenVMS Version 8.2 新機能説明書』を参照してください。

5.4 OpenVMS I64 システムでのデバッグ機能

OpenVMS では,広範囲にわたるデバッグ機能を実行できる複数のデバッガが提供されます。

  • OpenVMS デバッガ (単にデバッガとも呼びます)

  • Delta (OpenVMS I64 では利用できません)

  • XDelta

  • ソース・コード・デバッガ (SCD) (OpenVMS I64 では利用できません)

OpenVMS 8.2 では, OpenVMS デバッガと XDelta デバッガが提供されます。以下の表は,これらのデバッガの機能を示しています。

カテゴリ OpenVMS デバッガ XDelta
オペレーティング・システムのデバッグ 不可 可能
アプリケーションのデバッグ 可能 不可
シンボリック 可能 不可
0 より大きな IPL 不可 可能
プロセス・コンテンツ 可能 不可
ユーザ・モード 可能 不可+
スーパバイザ・モード 不可 不可+
エグゼクティブ・モード 不可 可能
カーネル・モード 不可 可能

+IPL 0,1,および 2 のみ

以降の各項では,OpenVMS I64 システムで動作する OpenVMS デバッガおよび XDelta デバッガの機能について説明します。 OpenVMS デバッガで解決された問題点,制限事項,および報告されている問題点の詳細については,『HP OpenVMS Version 8.2 リリース・ノート [翻訳版]』を参照してください。

5.4.1 OpenVMS デバッガ

OpenVMS I64 で提供されるデバッガは, OpenVMS VAX および Alpha のデバッガと異なります。 OpenVMS I64 デバッガのコマンド・インタフェースやデバッグ機能は OpenVMS VAX/Alpha デバッガに類似していますが,いくつかの相違点があります。ここでは,OpenVMS VAX および Alpha システムのデバッガについて十分理解しているものとして, OpenVMS I64 デバッガの機能について説明します。

OpenVMS I64 デバッガは以下のハードウェア・レジスタをサポートします。

  • 汎用レジスタ R0 〜 R127

  • 浮動小数点レジスタ F0 〜 F127

  • 分岐レジスタ B0 〜 B7

  • プレディケート・レジスタ P0 〜 P63 を表す 64 ビット値 PRED

  • アプリケーション・レジスタ: AR16 (RSC),AR17 (BSP), AR18 (BSPSTORE),AR19 (RNAT),AR25 (CSD), AR26 (SSD),AR32 (CCV),AR36 (UNAT),AR64 (PFS), AR65 (LC),AR66 (EC)

  • ハードウェア IP レジスタと,PSR レジスタの ri フィールドから合成されるプログラム・カウンタ PC

  • その他のレジスタ: CFM (current frame marker), UM (user mask),PSP (previous stack pointer), IIPA (previously executed bundle address)



OpenVMS I64 デバッガは,以下の言語で書かれたプログラムをサポートします。

  • BLISS

  • C

  • C++ (制限あり)

  • COBOL (制限あり)

  • Macro-32

  • Fortran

  • Intel® Assembler (IAS)

サポートされる言語を OpenVMS I64 でデバッグする場合,いくつかの問題点があります。これらの問題点およびその対処法については,『HP OpenVMS Version 8.2 リリース・ノート [翻訳版]』を参照してください。

本リリースでは,C++ と COBOL のサポートには制限があります。参照,クラス,クラス・メンバなどの基本的な C++ の機能はサポートされますが,一般に,C++ に対するデバッガのサポートは,C と共通のプログラミング構造に制限されています。

C++ のデータ宣言に対して, SHOW SYMBOL/ADDRESS コマンドと SHOW SYMBOL/TYPE コマンドは使用しないでください。これらの問題やその他の問題の具体例については,『HP OpenVMS Version 8.2 リリース・ノート [翻訳版]』を参照してください。

Macro-32 は OpenVMS I64 でのコンパイル言語です。 Itanium アーキテクチャでのハードウェア・レジスタの使い方は,Alpha や VAX の場合と異なるため, IMACRO コンパイラは Alpha および VAX のレジスタへのソース・コードの参照を, Itanium で互換性のあるレジスタ参照に変換しなければなりません。 Macro-32 で使用されるレジスタ・マッピングの詳細については,『HP OpenVMS Version 8.2 リリース・ノート [翻訳版]』を参照してください。

提供されている機能とコマンドは以下のとおりです。

  • 画面モード: ソース表示,インストラクション表示,出力表示

  • インストラクションのデコーディング

  • ブレークポイント

  • ウォッチポイント (非静的)

  • ステップ (すべてのフォーム)

  • DEBUG/KEEP コマンド (保持デバッガ構成)

  • RUN/DEBUG コマンド (通常のデバッガ構成)

  • マルチスレッド・プログラム

  • CALL コマンド

  • 共有イメージ内のコードのシンボリック・デバッグ

  • 考えられるすべての静的データ・ロケーションのシンボル化

  • 浮動小数点レジスタ内の値は, IEEE T-floating 値として表示

  • 浮動小数点変数の確認と代入

  • EXAMINE/ASCII コマンド



以下の機能は OpenVMS I64 へのポーティングがまだ完了していません。

  • DECwindows グラフィカル・ユーザ・インタフェース

  • ヒープ・アナライザ

  • 画面モード: レジスタ表示

  • SHOW STACK コマンド



5.4.2 XDelta デバッガ

OpenVMS I64 システムの XDelta デバッガは,基本的には OpenVMS Alpha システムの XDelta と同じ動作をしますが,いくつかの制限事項があります。ここでは,OpenVMS 用に追加された新機能と, OpenVMS I64 システムと OpenVMS Alpha システムの XDelta の相違点について説明します。

OpenVMS I64 システム用に以下の新機能が追加されました。

  • XDelta は以下の Itanium レジスタをサポートします。

    • 汎用レジスタ: R0 〜 R127

    • 浮動小数点レジスタ: FP0 〜 FP127

    • アプリケーション・レジスタ: AR0 〜 AR127

    • 分岐レジスタ: BR0 〜 BR7

    • 制御レジスタ: CR0 〜 CR63

    • その他のレジスタ: PC,PS,およびCFM

    • Alpha レジスタのソフトウェアでのインプリメント

  • ;D メモリ・ダンプ・コマンド

  • ;T 割り込みスタック表示コマンド

本リリースでのこれらレジスタおよび機能の詳細については,『HP OpenVMS Version 8.2 新機能説明書』を参照してください。このドキュメントでは,;D および ;T コマンドについてと,一部の制限事項についても説明しています。

ここでは,I64 システムと Alpha システムでの XDelta の動作の違いについて説明します。

実行中のシステムへの割り込み

I64 で実行中のシステムに割り込みをかけるには,システム・コンソールで Ctrl/P を押します。その場合,あらかじめ XDelta をロードしておく必要があります。 Ctrl/P を押すと,システムは現在の PC および現在の IPL で停止します。 Alpha システムの場合と異なり,IPL が 14 より低くなるのを待つための遅延は発生しません。

シンボル化の機能向上

X レジスタは,イメージやモジュールのベース・アドレスなど,頻繁に使用される値を保持するためにプログラマが使用します。ブレークポイントやその他のアドレス値を表示する場合, XDelta はこれらの値を,最も近い X レジスタ値を基準にした相対値として出力するようになりました。以前は,特定の値だけが X レジスタ値との相対値を出していました。

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 --- OpenVMS ELF オブジェクト・ライブラリを使用します (デフォルト)。

  • /SHARE --- OpenVMS ELF 共有イメージ・ライブラリを使用します。

  • /CREATE --- /OBJECT 修飾子あるいは /SHARE 修飾子のどちらを指定したかに応じて,オブジェクト・タイプまたは共有イメージ・タイプの 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 での弱い転送アドレスと同じ方法で動作します。つまり,その定義は一時的です。より強力なバインディング・タイプの定義がリンク操作で検出されない場合は,一時的な定義が最終的な定義として指定されます。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.