日本-日本語
日本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 へのアプリケーション・ポーティング・ガイド


目次 索引

第 5 章
OpenVMS I64 開発環境

この章では,OpenVMS I64 開発環境について以下の項目を説明します。

  • I64 のネイティブ・コンパイラ

  • その他の開発ツール

  • リンカ

  • デバッガ

  • Librarian ユーティリティ



5.1 I64 のネイティブ・コンパイラ

OpenVMS I64 では,以下の言語に対して I64 のネイティブ・コンパイラが提供されています。

  • BASIC

  • BLISS (Freeware CD で提供)

  • C++

  • COBOL V2.8

  • Fortran V8.0 (Fortran 90)

  • HP C V6.5

  • HP Pascal

  • Java

  • VAX Macro-32

Alpha の Macro-64 アセンブラ・コードを OpenVMS I64 でコンパイルし実行するための機能は提供されません。

I64 コンパイラでは,VAX 浮動小数点データ・タイプを使用するためのコマンド・ライン修飾子が提供されます。 VAX Macro-32 コンパイラを除き,これらのコンパイラの詳細については, 第 6 章 を参照してください。

5.1.1 VAX MACRO-32 Compiler for OpenVMS I64

OpenVMS I64 向けの新しいプログラムの開発では,高級言語を使用することをお勧めします。 既存の VAX MACRO コードを OpenVMS I64 システム上で動作するマシン・コードに変換するための VAX Macro-32 Compiler for OpenVMS I64 を提供します。

大部分の VAX MACRO コードは,まったく変更せずにコンパイルできます。例外は以下のとおりです。

  • OpenVMS I64 の呼び出し規則に準拠していないルーチンを呼び出すプログラム

  • Macro-32 以外の言語で書かれたルーチンを JSB インストラクションを使用して呼び出すプログラム

VAX MACRO プログラムの OpenVMS I64 システムへのポーティングの詳細については,『OpenVMS MACRO-32 Porting and User's Guide』を参照してください。

5.2 その他の開発ツール

I64 のネイティブ・アプリケーションの開発,デバッグ,および導入のために,コンパイラの他に複数のツールが提供されています。これらのツールについて, 表 5-1 で概要を説明します。

表 5-1 OpenVMS の開発ツール
ツール 説明
OpenVMS リンカ OpenVMS リンカは I64 のオブジェクト・ファイルから I64 のイメージを生成します。 OpenVMS リンカの詳細については, 第 5.3 節 を参照してください。
OpenVMS デバッガ OpenVMS I64 で動作する OpenVMS デバッガには,現在の OpenVMS Alpha デバッガと同じコマンド・インタフェースが用意されています。 OpenVMS Alpha システムで提供されているグラフィカル・インタフェースは,今後のリリースで提供される予定です。 OpenVMS I64 で提供される OpenVMS デバッガの詳細については, 第 5.4 節 を参照してください。
XDelta デバッガ XDelta デバッガは,特権プロセッサ・モードや引き上げられた割り込み優先順位レベル (IPL) で動作するプログラムのデバッグ用に使用されるアドレス・ロケーション・デバッガです。 XDelta デバッガは本リリースで提供されますが, Delta デバッガはまだ提供されていません。
OpenVMS Librarian ユーティリティ OpenVMS Librarian ユーティリティは I64 ライブラリを作成します。
OpenVMS Message ユーティリティ OpenVMS Message ユーティリティを使用すると, OpenVMS のシステム・メッセージに独自のメッセージを追加することができます。
ANALYZE/IMAGE Analyze/Image ユーティリティは I64 イメージを分析できます。
ANALYZE/OBJECT Analyze/Object ユーティリティは I64 オブジェクトを分析できます。
DECset DECset はさまざまな開発ツールを盛り込んだパッケージであり, LSE (Language Sensitive Editor), DTM (Digital Test Manager), CMS (Code Management System),および MMS (Module Management System) が含まれています。この他に DECset には, PCA (Performance and Coverage Analyzer ) と SCA (Source Code Analyzer) の 2 つのツールがありますが,これらのツールは将来のリリースで提供される予定です。
Command Definition ユーティリティ Command Definition ユーティリティ (CDU) を使うと, DCL コマンドに似た構文を持つコマンドを作成できます。
System Dump Analyzer (SDA) SDA は拡張され,OpenVMS I64 システム固有の情報も表示するようになりました。
Crash Log Utility Extractor (CLUE) CLUE は,クラッシュ・ダンプの履歴と各クラッシュ・ダンプのキー・パラメータを記録し,キー情報を抽出して要約を表示するためのツールです。



5.2.1 Alpha コードの変換

HP OpenVMS Migration Software for Alpha to Integrity Servers は,Alpha 用のユーザ・コード・イメージを OpenVMS I64 システムで動作させるためのバイナリ・トランスレータです。このツールは,ソース・コードがすでに入手できなくなっていたり, I64 でコンパイラが利用できない場合や,他社製の製品が OpenVMS I64 にポーティングされていない場合などに便利です。なお,他社製品に対して使用する場合は,ソフトウェア保有者の許可が必要です。

HP OpenVMS Migration Software for Alpha to Integrity Servers は,DECmigrate に似た機能を提供します。 DECmigrate は,OpenVMS VAX のイメージを OpenVMS Alpha システムで動作させるためのポーティングの際に使用されたバイナリ・トランスレータです。

詳細は, 第 4.1.2.1 項 を参照してください。

5.3 モジュールのリンク

リンカの目的は,イメージ,つまりバイナリ・コードとデータが格納されているファイルを作成することです。 OpenVMS I64 に移植されているリンカは, OpenVMS VAX および Alpha のリンカと異なり, OpenVMS I64 オブジェクト・ファイルを受け付け, OpenVMS I64 イメージを作成します。 OpenVMS VAX および Alpha システムと同様に,作成されるイメージの主なタイプは 実行イメージです。このイメージは,DCL コマンド・ラインで RUN コマンドを発行することにより起動できます。

OpenVMS I64 リンカは共有イメージも作成します。共有イメージは, symbol_vector オプションでエクスポートされるプロシージャおよびデータ(それらは実行イメージや他の共有イメージから参照可能)の集合です。共有イメージは,実行イメージまたは共有イメージを作成するリンク操作で,入力ファイルとして指定されます。

モジュールをリンクする際にリンカの入力ファイルとなるのは,通常,オブジェクト・ファイルです。オブジェクト・ファイルは,コンパイラやアセンブラなどの言語プロセッサによって作成されます。これらのコンパイラで作成されるオブジェクト・ファイルは, Intel Itanium アーキテクチャ固有のものなので,OpenVMS I64 でのモジュールのリンクには, OpenVMS VAX/Alpha の場合と異なる特徴がいくつかあります。一般に,OpenVMS I64 のリンカ・インタフェースをはじめ,その他の機能 (たとえば,シンボルの解決,仮想メモリの割り当て,イメージの初期化) は, OpenVMS VAX および Alpha システムの場合と類似しています。ここでは,リンカの相違点の概要を示し, OpenVMS I64 システムでプログラムをリンクする前に確認の必要がある項目についても説明します。説明する内容は次のとおりです。

  • I64 システムでのリンクを VAX および Alpha システムでのリンクと比較した場合の相違点 ( 第 5.3.1 項 )

  • I64 用に拡張されたリンカ・マップ・ファイル情報 ( 第 5.3.2 項 )

  • 新しいリンカ修飾子とオプション ( 第 5.3.3 項 )

  • リンカ・オプションの引数における大文字小文字の混在 ( 第 5.3.4 項 )

これらの機能および検討事項の詳細については,『HP OpenVMS Version 8.2 新機能説明書』を参照してください。

5.3.1 OpenVMS I64 システムでリンクする場合の相違点

OpenVMS I64 システムでのリンクは OpenVMS Alpha システムでのリンクに類似していますが,いくつかの相違点があります。 OpenVMS I64 リンカは,以下の修飾子あるいはオプションを無視します。

  • /REPLACE

  • /SECTION_BINDING

  • /HEADER

  • /DEMAND_ZERO=PER_PAGE の per_page キーワード (per_page キーワードは,意味するところがわずかに異なりますが,将来のリリースではサポートされます。)

  • DZRO_MIN

  • ISD_MAX

以下の修飾子およびオプションは,OpenVMS I64 リンカでは使用できません。

  • /SYSTEM

  • /DEBUG=file_spec でのファイル名キーワード

  • CLUSTER=cluster_name,base_address... で,ベース・アドレス・キーワードはヌルでなければなりません。

  • BASE=

  • UNIVERSAL=

以下の新しい修飾子が OpenVMS I64 リンカでサポートされます。

  • /BASE_ADDRESS

  • /SEGMENT_ATTRIBUTE

  • /FP_MODE

  • /EXPORT_SYMBOL_VECTOR

  • /PUBLISH_GLOBAL_SYMBOLS

  • /FULL に対する GROUP_SECTIONS および SECTIONS_DETAILS キーワード

これらの修飾子およびオプションのいくつかについての詳細は,『HP OpenVMS Version 8.2 新機能説明書』を参照してください。

VAX および Alpha では, CLUSTER オプションでのベース・アドレスの指定が可能です。 VAX では共有イメージであってもベース・クラスタを含めることが可能ですが, Alpha ではメイン・イメージのみがそのようなクラスタを構成することが可能です。 I64 では,CLUSTER オプションでのベース・アドレスの指定はどのイメージに対しても認められていません。

Alpha および VAX システムでは,オーバーレイ・プログラム・セクションの一部に対する初期化が可能でした。同じ部分に対して複数回初期化を行うと,前のモジュールで行われた初期化が上書きされます。リンクされるイメージで,それぞれのバイトごとに,最後に実行された初期化の内容が,そのバイトの最終値として適用されます。

I64 システムの ELF (Executable and Linkable Format) オブジェクト言語は,セクションの一部を初期化するという Alpha および VAX オブジェクト言語の機能を実装していません。 I64 システムで初期化を行うと,セクション全体が初期化されます。このセクションのその後の初期化は,ゼロ以外の部分が値で一致する場合のみ実行されます。

たとえば以下の条件の場合は, OpenVMS I64 システムと Alpha システムで異なる結果が発生します。

それぞれが 2 つのロングワードを宣言する 2 つのプログラム・セクション (ELF では単にセックションと呼ぶ) がオーバーレイされた場合。最初のプログラム・セクションが最初のロングワードを初期化し, 2 番目のプログラム・セクションは 2 番目のロングワードをゼロ以外の値で初期化します。

OpenVMS Alpha システムでは,リンカは,最初のロングワードと 2 番目のロングワードが初期化されたイメージ・セクションを作成します。 VAX および Alpha オブジェクト言語は,セクションを初期化するために,セクション・サイズと TIR (Text Information Relocation) コマンドをリンカに与えます。

OpenVMS I64 システムでは,リンカは,コンパイラからの初期化データを含む事前に初期化されたイメージ・セクションを取得します。 ELF には TIR コマンドがないため,リンカは初期化は行わず,また初期化についての情報を持っていません。その後リンカは,最後に処理されたセクションを使用して初期化のためのセグメントを生成します。つまり,イメージの最初のロングワードあるいは 2 番目のロングワードのどちらかがゼロ以外の値に初期化されるかどうかは,モジュールがリンクされた順番によります。 I64 システムでは,オーバーレイされたセクションをリンカが読み取り,互換性 (初期化が同一であるか,または矛盾がないか) をチェックします。 2 つのオーバーレイ・セクションがゼロ以外の値で同一であれば,それらは互換性があります。初期化が一致していない場合は,リンカは次のようなエラーを出力します。

%ILINK-E-INVOVRINI, incompatible multiple initializations for overlaid section 
    section: <section name> 
    module: <module name for first overlaid section> 
    file: <file name for first overlaid section> 
    module: <module name for second overlaid section> 
    file: <file name for second overlaid section> 

上記のメッセージでは,リンカは,ゼロ以外の初期化を行った最初のモジュール,およびそれと互換性のない初期化を行う最初のモジュールをリストします。なおこれは,互換性のないすべての初期化を含む完全なリストではありません。リンカが遭遇する最初のものにすぎません。

リンカ・マップのプログラム・セクション構文では,ゼロ以外の初期化を伴う各モジュールには "Initializing Contribution" というフラグが付けられます。この情報を使用して,すべての互換性のない初期化を識別し,解決してください。初期化済みのオーバーレイ・セクションの処理に関するさらに詳しい例と説明については,『HP OpenVMS Version 8.2 新機能説明書』を参照してください。

オブジェクト・モジュール内の ELF common シンボル (Alpha の relaxed ref/def シンボルに相当) を,同じシンボルを含む共有イメージと /SELECTIVE_SEARCH 修飾子とともにリンクする場合, I64 リンカの動作は Alpha と異なります。 Alpha では,リンカは,オブジェクト・モジュール側の relaxed ref/def シンボルから定義を取得します。詳細は『HP OpenVMS Version 8.2 新機能説明書』を参照してください。

5.3.2 拡張されたマップ・ファイル情報

リンカ・マップ・ファイル内の情報は, OpenVMS I64 システム用に拡張されています。

  • Alpha システムで Object Module Synopsis というタイトルだったマップ・セクションは,I64 システムでは Object and Image Synopsis に変更され,拡張されたオブジェクト情報とイメージ情報が格納されています。

  • Alpha システムで Image Section Synopsis というタイトルだったマップ・セクションは,I64 システムでは Cluster Synopsis と Image Segment Synopsis の 2 つのセクションに分割されました。情報はそれぞれ適切なセクションに移動されています。

  • Program Section Synopsis の PIC 属性と NOPIC 属性は,I64 システムでは無効であるため,削除されました。

  • Symbol Cross Reference セクションの外部シンボルの指定は変更されました。 Alpha で使用されていたプレフィックスまたはサフィックスは,再配置可能(R)および外部(X)を意味する RX でした。しかし,リンカには,外部シンボルが再配置可能かどうかはわかりません。そのため,I64 システムでは,プレフィックスまたはサフィックスは X (外部) に変更されました。

  • Symbols By Value セクションの Keys for Special Characters は変更または拡張されています。たとえば,UxWk キーによって示される UNIX スタイルの弱いシンボル (おそらく C++ でのみ使用される) が OpenVMS I64 に新たに追加されています。

この新しい情報を示すリンカ・マップの例については『HP OpenVMS Version 8.2 新機能説明書』を参照してください。

5.3.3 OpenVMS I64 用の新しいリンカ修飾子とオプション

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

I64 システムで新しい修飾子 /BASE_ADDRESS が提供されています。ベース・アドレスは,リンカが実行イメージに対して割り当てる起点となるアドレスです。この修飾子の目的は,ブート・プロセスなどの, OpenVMS イメージ・アクティベータで起動されないイメージに対して仮想アドレスを割り当てることです。 OpenVMS イメージ・アクティベータは,リンカが割り当てたスタート・アドレスを無視します。この修飾子は,主にシステム開発者によって使用されます。

/BASE_ADDRESS 修飾子は,OpenVMS I64 では不正となる CLUSTER=,[base-address] オプションの置き換えにはなりません。詳細は 第 5.3.1.1 項 を参照してください。

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

OpenVMS I64 リンカは, 2 つのキーワード SHORT_DATA=WRITE および DYNAMIC_SEGMENT = P0 あるいは P1 を指定できる新しい /SEGMENT_ATTRIBUTE 修飾子を提供します。 DYNAMIC_SEGMENT キーワードは通常は必要ありません。詳細は『HP OpenVMS Version 8.2 新機能説明書』を参照してください。

SHORT_DATA=WRITE キーワードにより,最大 65,535 バイトの未使用読み取り専用スペースを再要求して,読み取り専用と読み書き両用のショート・データ・セクションを統合した単一のセグメントを作ることができます。 SHORT_DATA=WRITE を設定すると,以前は読み取り専用だったデータ・セグメントに書き込みが禁止されないという危険があります。このため,この修飾子はセクションの必要サイズが通常のショート・データ・セクションの上限である 4 MB を超えてしまった場合のみ使用することをお勧めします。


目次 索引

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