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


目次 索引

第 4 章
ソース・モジュールの移行

この章では,ポーティング作業においてすべてのアプリケーションに共通のステップについて説明します。その後,アプリケーションの再コンパイル前に変更の必要がある特定のタイプのコードやコーディング手法について説明します。

あらかじめコードを徹底的に分析し,移行プロセスのプランを作成しておけば,ソース・モジュールの移行の最終段階はかなり簡単です。多くのプログラムは,まったく変更せずに再コンパイルまたは変換することができます。直接再コンパイルまたは変換できないプログラムは,多くの場合,簡単な変更を行うだけで, I64 システムで動作させることができます。しかし,特定のタイプのコードは変更が必要です。

アプリケーションを移行するには,以下のステップが必要です。

  1. 移行環境を用意します。

  2. Alpha システム上で最新バージョンの Alpha コンパイラを使用してアプリケーションをコンパイルします。

  3. Alpha システム上でアプリケーションをテストし,移行評価のために基準となるデータを作成します。

  4. I64 システム上でアプリケーションを再コンパイルおよび再リンクします。

  5. 移行したアプリケーションをデバッグします。

  6. 移行したアプリケーションをテストします。

  7. 移行したアプリケーションをソフトウェア・システムに統合します。

移行環境の用意を除いた上記のステップを 図 4-1 に示します。

図 4-1 Alpha から I64 へのアプリケーションの移行


ソース・ファイルが次のいずれかに該当する場合は,ソース・ファイルを変更しなければならない可能性があります。

  • VAX Macro-32 または Alpha Macro-64 アセンブリ言語を使用している。

  • 異なるプラットフォーム用のアプリケーションを共通のコードから作成するために条件付きステートメントを使用している。

  • Alpha のオブジェクト・コードの形式など, Alpha アーキテクチャに依存している。

  • 浮動小数点データ・タイプを使用している。

  • スレッドを使用している。

  • 自然な境界に配置されていないデータを使用している。

  • OpenVMS Alpha の呼び出し規則に明示的に依存している。

  • 特権インタフェースを使用しているか,または内部アクセス・モードで動作する。

詳細については, 第 4.8 節 を参照してください。

4.1 移行環境の用意

I64 でのネイティブな開発環境は,Alpha システムの開発環境と同等のものになります。 OpenVMS Alpha で使い慣れているプログラム開発ツールの大部分は,I64 環境でも使用できます。 2 つのアーキテクチャおよび呼び出し規則の相違点を考慮して,これらのツールには多少の変更が加えられています。しかし,このような変更の大部分は,ユーザが意識する必要はありません。

I64 への移行プロセスの重要な要素として,HP Services から提供されるサポートがあります。アプリケーションの変更,デバッグ,テストに役立つサポートが提供されます。詳細については, 第 3.3 節 を参照してください。

4.1.1 ハードウェア

移行に必要なハードウェアについて準備する場合,いくつかの点について考慮する必要があります。まず最初に,通常の Alpha 開発環境で必要なリソースについて検討します。

  • CPU

  • ディスク

  • メモリ

I64 においては,本リリースでは次の構成が推奨されています。

  • HP rx2600 Integrity サーバ (1 CPU または 2 CPU)

  • 1 〜 24 GB のメモリ

  • 1 〜 4 台の 36 GB のディスク

  • DVD/CD-ROM ドライブ

詳細については,『HP OpenVMS Version 8.2 リリース・ノート [翻訳版]』を参照してください。

4.1.2 ソフトウェア

効率のよい移行環境を構築するには,次の点を確認してください。

  • 移行ツール
    以下に示す,互換性のある移行ツール・セットが必要です。

    • コンパイラ

    • 変換ツール

      • HP OpenVMS Migration Software for Alpha to Integrity Servers

      • TIE

    • ランタイム・ライブラリ

    • システム・ライブラリ

    • C プログラム用のインクルード・ファイル

  • 論理名
    論理名が Alpha バージョンあるいは I64 バージョンのツールおよびファイルをそれぞれ参照するように,整合性のある論理名定義を行う必要があります。

  • コンパイル・プロシージャとリンク・プロシージャ
    これらのプロシージャは,新しいツールおよび新しい環境に適合するように調整する必要があります。

  • テスト・ツール
    一連のテスト・ツールがまだ移植されていない場合は, Alpha のテスト・ツールを OpenVMS I64に移植する必要があります。また,OpenVMS I64 固有の OpenVMS 呼び出し規則に準拠するための変更など,OpenVMS I64 版の特徴をテストするために設計されたテスト・ツールも必要です。

  • 以下に示すような,ソースの保守とイメージのビルドのためのツール

    • CMS (Code Management System)

    • MMS (Module Management System)

Alphaネイティブな開発ツール

Alpha 上で利用可能な標準の開発ツールは, I64 システムでもネイティブなツールとして利用できます。

変換ツール

ソフトウェア・トランスレータ HP OpenVMS Migration Software for Alpha to Integrity Servers は, Alpha システムと I64 システムの両方で動作します。変換イメージを動作させるために必要となる Translated Image Environment (TIE) は, OpenVMS I64 に含まれています (V8.2 では追加インストールが必要です) 。このため,変換イメージの最終的なテストは, I64 システム上,あるいは I64 移行センターのどちらかで実行する必要があります。一般に,Alpha 用のイメージを I64 システムで動作するように変換する作業は簡単ですが,エラーなしで変換するためには,コードを多少変更しなくてはならない場合があります。

Alpha 用のユーザ・モード・イメージを OpenVMS I64 に移行するためのツールとして,静的なトランスレータと実行時サーポート環境があります。

  • HP OpenVMS Migration Software for Alpha to Integrity Serversは, Alpha 用のイメージを分析して,機能的に同等な I64 用のイメージに変換するユーティリティです。 HP OpenVMS Migration Software for Alpha to Integrity Servers を使用すると,以下のことが可能になります。

    • Alpha 用のイメージが変換可能かどうかを判断する。

    • Alpha 用のイメージを I64 用のイメージに変換する。

    • イメージ内で OpenVMS I64 と互換性がない部分を見つけ,適切な場合には,これらの非互換部分をソース・ファイル中でどのように修正すればよいかについての情報を入手する。

    • 変換されたイメージの実行時性能を高める方法を見つける。

  • Translated Image Environment (TIE) は I64 の共有イメージで,実行時に変換イメージをサポートします。 TIE は,変換されたイメージに対して OpenVMS Alpha と同様の環境を提供し,ネイティブな I64 システムとのやり取りをすべて処理します。 TIE には次のものが含まれています。

    • 以下の機能をサポートする Alpha 命令インタプリタ

      • (命令の不可分性を含め) Alpha システムで実行するのと同じように Alpha 命令を実行

      • 複雑な Alpha 命令をサブルーチンとしてサポート

    • Alpha 互換の例外ハンドラ

    • ネイティブ・コードと変換コード間の通信を可能とするジャケット・ルーチン

    • エミュレートされた Alpha スタック

    TIE は変換したイメージに対して自動的に起動されるため,明示的に呼び出す必要はありません。

HP OpenVMS Migration Software for Alpha to Integrity Servers は,可能な限り多くの Alpha コードを見つけて I64 コードに変換します。 TIE は,I64 の命令に変換できない Alpha コードについては命令の解釈実行を行います。たとえば,以下のような命令がこれに該当します。

  • HP OpenVMS Migration Software for Alpha to Integrity Servers が静的に見つけることができなかった命令

  • VAX (F_,G_ および D_floating) の浮動小数点操作

命令の解釈実行は処理に時間がかかるため, HP OpenVMS Migration Software for Alpha to Integrity Servers は,実行時に解釈実行しなくてすむようにできるだけ多くの Alpha 用コードを変換しようと試みます。変換イメージは,TIE がどの程度 Alpha コードの解釈実行を行うかに依存して,対応するネイティブな Alpha 用イメージよりも動作が遅くなります。

I64 システムで Alpha イメージをそのまま,動的に解釈実行させることはできない点に注意してください。 OpenVMS I64 で動作させる前に, HP OpenVMS Migration Software for Alpha to Integrity Servers を使ってイメージを変換しておく必要があります。

Alpha イメージを変換することにより, I64 ハードウェアでネイティブに動作するイメージが生成されます。変換された I64 イメージは単に Alpha イメージの解釈実行やエミュレートを行うものではなく,元の Alpha イメージ中の命令で実行していたのと同じ操作を行う I64 命令が含まれています。 HP OpenVMS Migration Software for Alpha to Integrity Servers が変換できなかった命令を TIE が解釈実行できるように, I64 の .EXE ファイルには元の Alpha 用のイメージもそのまま含まれています。

HP OpenVMS Migration Software for Alpha to Integrity Servers の分析機能は,変換ではなく再コンパイルしようと考えているプログラムの評価にも役立ちます。

4.1.3 変換イメージとの共存

アプリケーション・コンポーネントは,バイナリ変換により, OpenVMS VAX および OpenVMS Alpha から OpenVMS I64 に移行させることができます。実行イメージと共有イメージは個別に変換できるため,単一のイメージ実行中にネイティブなイメージと変換されたイメージが混在するような環境を構築することも可能です (多くの場合そうなります)。

変換イメージでは,元の実装で使用していた呼び出し規則が使用されます。つまり,VAX から変換されたイメージの引数リストは, VAX プラットフォームで使用していたのと同じバイナリ形式になっています。 OpenVMS I64 の呼び出し規則は,OpenVMS VAX および OpenVMS Alpha の呼び出し規則とは異なるため,ネイティブなイメージと変換されたイメージとの間で直接呼び出しはできません。このような呼び出しは,ある呼び出し規則から別の呼び出し規則に引数を変換するインタフェース・ルーチン (ジャケット・ルーチンと呼ぶ) によって処理されます。

ジャケット・ルーチンは TIE に含まれています。引数の変換の他,TIE は変換コードへの例外の伝達も行います。変換イメージ (メイン・プログラムまたは共有イメージ) が起動されると,TIE は追加の共有イメージとしてロードされます。イメージ・アクティベータは,ネイティブなイメージと変換されたイメージ間の参照を解決するために,必要に応じてジャケット・ルーチンへの呼び出しを介入させます。

ネイティブなコードと変換されたコードを一緒に使用するためには,以下の要件を満たしている必要があります。

  • すべての関数ディスクリプタがシグネチャ・データを持っていること。
    シグネチャデータは,ネイティブ形式と VAX または Alpha 形式の間で引数と戻り値を変換するために,ジャケット・ルーチンによって使用されます。ネイティブな I64 イメージは,アウトバウンド呼び出しとすべてのエントリ・ポイントの両方に対し,関数ディスクリプタを持っています。

  • 関数変数の呼び出し (呼び出し先関数の識別情報が変数に格納されている) は,すべてライブラリ・ルーチン OTS$CALL_PROC を経由して行うこと。
    OTS$CALL_PROC は,呼び出そうとしている関数がネイティブなものか変換されたものかを実行時に判断し,ネイティブなら直接呼び出し,変換されたものなら TIE 経由で呼び出します。

これらの要件は, /TIE 修飾子を使ってコードをコンパイルし, /NONATIVE_ONLY 修飾子を使ってリンクすることで満たされます。 /TIE は,Macro-32 コンパイラを含むほとんどの OpenVMS I64 コンパイラでサポートされています (C++ ではサポートされません)。どちらの修飾子も,コンパイルおよび LINK コマンドで明示的に指定する必要があります。これらの修飾子を指定しなかった場合のデフォルト値は,ぞれぞれ /NOTIE および /NATIVE_ONLY です。 I64 アセンブラではシグネチャがサポートされていないため, I64 アセンブリ言語で記述されたコードは変換されたコードから直接呼び出すことはできません。 I64 アセンブリ言語で記述されたコードから変換コードを呼び出すには,必ず明示的に OTS$CALL_PROC を呼び出します。

変換イメージのサポートのため,性能は多少犠牲になります。関数変数の呼び出しは,すべて OTS$CALL_PROC 経由で行われるため,ほとんどの場合約 10 の命令が必要になります。性能が要求されるコードを変換イメージと一緒に使用する場合は,必ず /TIE および /NONATIVE_ONLY を使ってイメージを作成します。

/NOSYSSHR でリンクされた実行イメージと共有イメージには,他にも留意事項があります。通常,OTS$CALL_PROC への参照は,共有イメージ LIBOTS.EXE によって解決され,特別な注意は必要ありません。しかし,イメージを /NOSYSSHR を指定して作成すると,共有イメージ・ライブラリの検索が省略され,代わりに STARLET.OLB 内のオブジェクト・モジュールから外部参照が解決されます。 OTS$CALL_PROC はシステム・シンボル・テーブル内に定義されたデータ・セルを参照するため,単に STARLET.OLB から取り込んだだけでは CTL$GQ_TIE_SYMVECT の参照が未解決となります。

/NOSYSSHR でリンクされるほとんどのイメージは,外部イメージとのやり取りを避けるためにそのように作成されているため,変換されたコードの呼び出しで問題は発生しません。そのため,STARLET.OLB には,変換されたイメージの呼び出しをサポートしない OTS$CALL_PROC のサブセット版が含まれています。この OTS$CALL_PROC_NATIVE という名前のモジュールはデフォルトでロードされ,/NOSYSSHR でリンクされたイメージは,デフォルトでは変換されたコードを呼び出せなくなります。

さらに,STARLET.OLB には完全版の OTS$CALL_PROC モジュールも含まれています。ライブラリのシンボル・テーブルにはこのモジュールのエントリがないため,明示的な参照によってのみロードされます。万一 /NOSYSSHR を指定してリンクしたイメージから変換された共有イメージを呼び出す必要がある場合には,完全版の OTS$CALL_PROC を STARLET.OLB から明示的にインクルードして,イメージをシステム・シンボル・テーブルとリンクする必要があります。リンク・コマンド・ファイルには,以下の 2 つのオプションが必要です。

  • 入力ファイル・リストに SYS$LIBRARY:STARLET.OLB/INCLUDE=OTS$CALL_PROC を含める

  • LINK コマンドに /SYSEXE 修飾子を含める



4.2 最新バージョンのコンパイラによる Alpha でのアプリケーションのコンパイル

ネイティブの I64 コンパイラでコードを再コンパイルする前に,まず,最新バージョンのコンパイラを使用して Alpha でコードをコンパイルすることをお勧めします。たとえば,アプリケーションが Fortran で書かれている場合は, Alpha で Fortran Version 7.5 (Fortran 90) を使用して再コンパイルしたアプリケーションが問題なく動作するか確認します。 Fortran Version 7.5 は I64 に移植されているバージョンです。

最新バージョンのコンパイラを使用して OpenVMS Alpha でアプリケーションを再コンパイルすると,コンパイラのバージョンに起因する問題を検出できます。たとえば,新しいバージョンのコンパイラでは,以前は無視されていたプログラミング言語標準が新たに適用されていることがあり,その結果,アプリケーション・コードの潜在的な問題点が顕在化することがあります。また,新しいバージョンでは,それ以前のバージョンがリリースされた後で標準に追加された内容が適用されていることもあります。このような問題を OpenVMS Alpha であらかじめ修正しておけば,I64 へのアプリケーションのポーティングが容易になります。

OpenVMS I64 のネイティブ・コンパイラの一覧については, 第 5.1 節 を参照してください。

4.3 移行するアプリケーションの Alpha 上での動作を確認するためのテスト

テストの第 1 ステップでは,Alpha アプリケーションに対してユーザが用意した一連のテスト・ツールを実行して,ポーティング後のアプリケーションをテストする際の比較基準となるデータを収集します。実行するのは,アプリケーションを I64 に移植する前でも後でもかまいません。その後,これらのテスト結果を,I64 システムで行った同様のテストの結果と比較します。 第 4.6 節 を参照してください。

4.4 I64 システムでの再コンパイルと再リンク

一般に,アプリケーションの移行では,コードの変更,コンパイル,リンク,デバッグを繰り返し行います。この過程で,開発ツールで検出されたすべての構文エラーとロジック・エラーを解決します。通常,構文エラーは簡単に修正できます。ロジック・エラーを解決するには,一般にコードの大幅な変更が必要になります。

新しいコンパイラ・スイッチやリンカ・スイッチの追加など,コンパイル・コマンドとリンク・コマンドはある程度変更しなければならない可能性があります。新しいリンカ修飾子の詳細については, 第 5 章 を参照してください。コンパイラ・スイッチの詳細については, 第 6 章 を参照してください。 VAX MACRO コードを移植する場合は,『OpenVMS MACRO-32 Porting and User's Guide』を参照してください。


目次 索引

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