前へ | 次へ | 目次 | 索引 |
既存の VAX MACRO コードを OpenVMS Alpha システムで動作するマシン・コードに変換するには,MACRO--32 Compiler for OpenVMS Alpha を使用します。OpenVMS Alpha にはその目的で,このコンパイラが含まれています。
一部の VAX MACRO コードは変更せずにコンパイルできますが,大部分のコード・モジュールでは,エントリ・ポイント指示文を追加する必要があります。また,多くのコード・モジュールではその他の変更も必要です。
MACRO--32 コンパイラは,ソース・コードに LIB$ESTABLISH が含まれている場合には,それを呼び出そうとします。 MACRO--32 プログラムが 0(FP) のルーチン・アドレスを格納することにより,動的ハンドラを確立する場合には,OpenVMS Alpha システムでコンパイルしても,そのプログラムは正しく動作します。しかし,CALL_ENTRY ルーチンの内部からでなければ,JSB (Jump to Subroutine) ルーチンの内部から条件ハンドラ・アドレスを設定することはできません。 |
コンパイラは OpenVMS Alpha システム用に最適化されたコードを生成しますが,高レベルの制御機能をプログラマに提供する VAX MACRO 言語の多くの機能は,OpenVMS Alpha システム用の最適なコードを生成することを困難にします。OpenVMS Alpha 用に新たなプログラムを開発する場合には,中級言語または高級言語を使用することをお勧めします。MACRO--32 コンパイラの詳細については,『Porting VAX MACRO Code to OpenVMS Alpha』を参照してください。
3.2.1.3 その他の開発ツール
ネイティブなAlphaイメージを作成するために,コンパイラの他にもいくつかのツールが提供されます。
OpenVMS リンカは,VAXオブジェクト・ファイルまたはAlphaオブジェクト・ファイルを受け付け,VAXイメージまたはAlphaイメージを作成できるようになりました。また,VAXハードウェアでAlphaイメージを作成できるため,クロス・リンカとして機能します。
OpenVMS Alphaで実行されるOpenVMS デバッガは,現在のOpenVMS VAXデバッガと同じコマンド・インターフェイスを使用します。OpenVMS Alphaシステムでも,VAXシステム上のグラフィカル・インターフェイスが提供されています。
OpenVMS メッセージ・ユーティリティを使用すれば,OpenVMSシステム・メッセージに独自のメッセージを追加できます。
OpenVMS Alpha システム用の MACRO--64 アセンブラは,すべての Alpha コンピュータを対象にしたネイティブ・アセンブラです。VAX MACRO アセンブラは OpenVMS VAX オペレーティング・システムに含まれていますが,MACRO--64 アセンブラは OpenVMS Alpha オペレーティング・システムに含まれていません。このアセンブラは個別に購入できます。一般に,中級言語および高級言語コンパイラは,MACRO--64 アセンブラより性能の高いコードを OpenVMS Alpha システム用に生成します。OpenVMS Alpha システム用に新たなプログラムを開発する場合には,中級コンパイラまたは高級コンパイラのご使用をお勧めします。MACRO--64 アセンブラの詳細については,『MACRO--64 Assembler for OpenVMS AXP Systems Reference Manual』を参照してください。
DECsetは包括的なCASEツール群であり,Language Sensitive Editor (LSE),Source Code Analyzer (SCA),Code Management System (CMS),Module Management System (MMS)をはじめ,多くの要素で構成されます。
Alphaシステムで実行するためにVAXイメージをトランスレートする処理については,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。一般に,この処理は簡単ですが,エラーなしにトランスレートするには,コードを少し変更しなければならないことがあります。
3.2.2.1 VAX Environment Software Translator (VEST) と Translated Image Environment (TIE)
ユーザ・モードのVAXイメージをOpenVMS Alphaに移行するための主なツールは,静的トランスレータと実行時サポート環境です。
VESTは,できるだけ多くのVAXコードをAlphaコードにトランスレートします。TIEは,Alpha命令に変換できなかったVAXコードを解釈します。たとえば,次のコードは TIEによって解釈されます。
命令の解釈は速度の遅い処理であり,おそらく平均的な1つのVAX命令に対して100前後の Alpha命令が必要となるため,VESTは実行時にインタプリタを通じた解釈の必要性をできるだけ少なくするために,できるだけ多くのVAXコードをトランスレートしようとします。トランスレートされたイメージは,ネイティブなAlphaイメージと比較すると,約3分の1の速度で実行されます。ただし,この速度はTIEがどれだけのVAXコードを解釈しなければならないかに応じて異なります。トランスレートされたVAXイメージは,少なくともVAXハードウェアと同じ速度で実行されます(同じレベルのプロセス技術を使用したCPUの場合)。
AlphaシステムでVAXイメージの動的解釈を指定することはできません。イメージを OpenVMS Alphaで実行するには,その前にVESTを使用してイメージをトランスレートしなければなりません。
VAXイメージをトランスレートすると,Alphaハードウェアで実行されるイメージが作成されます。このようにして作成されるAlphaイメージは,単にVAXイメージを解釈したバージョンやエミュレートしたバージョンではなく,元のVAXイメージ内の命令が実行する操作と同じ操作を実行するAlpha命令を含むイメージです。Alphaの .EXEファイルには,元のVAXイメージが完全に登録されているため,TIEはVESTがトランスレートできなかったコードを解釈できます。
VESTの分析機能は,トランスレートする場合だけでなく,再コンパイルする予定のプログラムを評価する場合も役立ちます。
VESTとTIEについての詳しい説明は,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。このマニュアルでは,フローグラフなども含めて,VESTが作成するすべての出力とその解釈方法が詳しく説明されています。また,VESTが作成するイメージ情報ファイル(IIF)から提供される情報を利用して,トランスレートされたイメージの実行時の性能を向上する方法も説明されています。
3.3 移行したアプリケーションのデバッグとテスト
アプリケーションをOpenVMS Alphaに移行した後,デバッグしなければなりません。
また,正しい操作が実行されるかどうかを調べるためにアプリケーションをテストすることも必要です。
3.3.1 デバッグ
OpenVMSオペレーティング・システムでは,次のデバッガが準備されています。
OpenVMS デバッガはシンボリック・デバッガです。つまり,このデバッガを使用する場合には,プログラムで使用しているシンボル(変数名やルーチン名,ラベルなど)によってプログラムの位置を参照できます。プログラム位置を参照するために,メモリ・アドレスやマシン・レジスタを指定する必要はありません。ただし,メモリ・アドレスやマシン・レジスタを指定したい場合は,必要に応じて指定できます。
OpenVMSデバッガは通常,トランスレートされたイメージに対して動作しません。しかし,トランスレートされたイメージは内部でVAXレジスタをエミュレートしているので,SHOW CALL や SHOW STATE コマンドでデバッグに有用なVAX コンテキストを得ることができます。
Delta デバッガはアドレス・ロケーション・デバッガです。つまり,このデバッガを使用する場合には,アドレス・ロケーションによってプログラム位置を参照しなければなりません。このデバッガは主に,特権付きプロセッサ・モードまたは高い割り込みレベルで実行されるプログラムをデバッグするために使用します。
デバッグはAlphaハードウェアで実行しなければなりません。
3.3.1.1 OpenVMS デバッガによるデバッグ
OpenVMS Alpha システムでは,次の DEC 言語で作成したプログラムに対してデバッガを使用できます。
OpenVMS デバッガには,OpenVMS Alpha コードのアーキテクチャ上の違いに対処する機能がいくつか含まれています。これらの機能を使用すると,OpenVMS Alpha システムに移植するコードを簡単にデバッグできるようになります。たとえば,SET コマンドの /UNALIGNED_DATA 修飾子を使用すると,アラインされていないデータにアクセスする命令 (たとえば,ワード境界にないデータにアクセスする load word 命令など) のすぐ後で,デバッガはブレークします。
どのルーチンでも,SET コマンドに /RETURN 修飾子を指定できます。OpenVMS VAX システムの場合のように,CALLS 命令や CALLG 命令を使用して呼び出したルーチンに制限されません。OpenVMS Alpha システム固有の機能の詳細については,『OpenVMS デバッガ説明書』を参照してください。
OpenVMS デバッガを使用して,移行したアプリケーションをAlphaシステムでデバッグする場合には,次のことを考慮しなければなりません。
DBG> %DEBUG-E-ACCESSR, no read access to address 00000000 |
OpenVMS デバッガによるデバッグについての詳しい説明は,『OpenVMS デバッガ説明書』を参照してください。
3.3.1.2 Delta デバッガよるデバッグ
Delta/XDelta デバッガ (DELTA/XDELTA) は OpenVMS Alpha システムで動作し,Alpha アーキテクチャで必要となる新しいコマンドを提供し,また,既存のコマンドの一部も拡張しています。たとえば,ベース・レジスタの表示は 16 進数ではなく,10 進数で表示し,別のプロセスの内部プロセス識別 (PID) 番号を確認する機能も追加されています。Delta/XDelta デバッガが OpenVMS Alpha システムでどのように動作するかについての詳しい説明は,『OpenVMS Delta/XDelta Debugger Manual』を参照してください。
Delta デバッガを使用すれば,部分的または完全にトランスレートされたアプリケーションをデバッグできます。
トランスレートされたイメージをデバッグする場合には,次のことを確認しなければなりません。
ネイティブなAlphaコードとトランスレートされたコードが混在するアプリケーションをデバッグするには,/TIE修飾子を使用してアプリケーションのネイティブな部分がコンパイルされているかどうかを確認しなければなりません。さらに,/NONATIVE_ONLYリンカ・オプションを使用してアプリケーションをリンクしなければなりません。
Delta デバッガによるデバッグについての詳しい説明は,『OpenVMS Delta/XDelta Debugger Manual』を参照してください。
3.3.1.3 OpenVMS Alpha システムコード・デバッガによるデバッグ
OpenVMS Alpha のシステムコード・デバッガは,任意の IPL で動作する非ページング・システム・コードとデバイス・ドライバをデバッグするために使用します。OpenVMS Alpha のシステムコード・デバッガはシンボリック・デバッガです。したがって,ソース・コードに指定するときと同様に,変数名,ルーチン名などを指定できます。また,ソフトウェアが実行しているソース・コードを表示し,ソース行を 1 ステップずつ実行することもできます。
システムコード・デバッガを使用するには,2 台の Alpha システムが必要です。
このデバッガを使用すると,次の言語で作成されたコードをデバックできます。
BLISS コンパイラは,OpenVMS VAX バージョン 7.1 と OpenVMS Alpha バージョン 7.1 に同梱されている OpenVMS フリーウェア CD に登録されています。 |
OpenVMS Alpha のシステムコード・デバッガは,各言語の構文,データ型,演算子,式,有効範囲に関する規則,その他の構造を認識します。プログラムが複数の言語で作成されている場合には,デバッグ・セッションでデバッグ・コンテキストを 1 つの言語から別の言語に変更できます。
Step 2 ドライバと OpenVMS Alpha システムコード・デバッガの詳細については,『Writing OpenVMS Alpha Device Drivers in C』を参照してください。
3.3.2 システム・クラッシュの分析
OpenVMS では,システム・クラッシュを分析するために 2 つのツールを使用できます。それはシステム・ダンプ・アナライザ (SDA) とクラッシュ・ダンプ・ユーティリティ・エクストラクタ (CLUE) です。
3.3.2.1 システム・ダンプ・アナライザ
OpenVMS Alpha システムのシステム・ダンプ・アナライザ (SDA) ユーティリティは,OpenVMS VAX システムで提供されるユーティリティとほとんど同じです。多くのコマンド,修飾子,表示は同一ですが,クラッシュ・ダンプ・ユーティリティ・エクストラクタ (CLUE) ユーティリティの機能にアクセスするためのいくつかのコマンドも含めて,コマンドと修飾子が追加されています。また,プロセッサ・レジスタやデータ構造体など OpenVMS Alpha システム固有の情報を表示できるように,一部の表示も変更されています。
SDA インタフェースは少しだけ変更されていますが,VAX と Alpha のダンプ・ファイルの内容と,ダンプからシステム・クラッシュを分析するための全体的な処理は,2 種類のコンピュータで少し違います。Alpha の実行パスは,VAX の実行パスの場合より複雑な構造体とパターンをスタックに残します。
VAX コンピュータで SDA を使用するには,まず,VAX システムの OpenVMS 呼び出し規則を十分理解しておく必要があります。同様に,Alpha システムで SDA を使用するには,まず,Alpha システムの OpenVMS 呼び出し規則を十分理解しておかなければ,スタックでクラッシュのパターンを解読できるようになりません。
前へ | 次へ | 目次 | 索引 |