[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

# 9アプリケーションのトランスレート

この章では，Alphaシステムで実行するために， VAXアプリケーションをトランスレートするときに使用するリソースについて説明します。

# 9.1DECmigrate for OpenVMS Alpha

DECmigrate for OpenVMS Alphaは， ソース・コードを入手できないイメージをトランスレートするときに使用します。 DECmigrateのVAX Environment Software Translator (VEST)コンポーネントは， VAXのバイナリ・イメージ・ファイルをネイティブな Alphaイメージにトランスレートします。トランスレートされたイメージは， AlphaコンピュータのTranslated Image Environment(TIE)のもとで動作します (TIEはOpenVMS Alphaオペレーティング・システムで提供される共用可能イメージです)。 トランスレーションでは，エミュレーションやインタプリテーションのもとで OpenVMS VAXイメージを実行することは行われません(ただし，特定の例外があります)。 その代わり，新しいOpenVMS Alphaイメージには，元の OpenVMS VAXイメージの命令が実行していた操作と同じ操作を実行する Alpha命令が含まれます。

トランスレートされたイメージは一般に， VAXコンピュータでオリジナル・イメージを実行するときと同じ速度で， Alphaコンピュータでも動作します。しかし，トランスレートされたイメージは， Alphaアーキテクチャのすべての利点を活用する最適化コンパイラを利用できません。 したがって，トランスレートされたイメージは一般に，ネイティブな OpenVMS Alphaイメージの約25〜40パーセントの速度で動作します。 このように性能が低下する主な理由は，アラインされないデータと複雑な VAX命令を広範囲にわたって使用しているためです。

DECmigrateによるトランスレーション・サポートは，OpenVMS VAXバージョン5.5-2 に存在する言語機能，システム・サービス， 実行時ライブラリ・エントリ・ポイントに制限されています。

DECmigrateのもう1つの機能は，イメージを分析して， Alphaコンピュータで互換性が維持されない部分を識別することです。 このように互換性が維持されない部分は，その種類に応じて， 問題を修正するためにコンパイラ修飾子を指定したり， コードを変更することができます。

イメージ・トランスレーションとVESTの詳細については， 『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。

# 9.2 DECmigrate:トランスレートされたイメージのサポート

DECmigrateバージョン1.1Aは，OpenVMSバージョン6.1以降を実行する Alphaシステムで動作します。トランスレートされたイメージを実行するには， このバージョンまたはそれ以降のバージョンが必要です。 トランスレートされたイメージは一般に， それ以降のバージョンと互換性を維持しますが， 以前のバージョンとの互換性は維持しません。つまり，DECmigrateバージョン1.1A を使用してトランスレートされたイメージは，OpenVMSバージョン6.1 以降を稼動しているAlphaシステムのみで動作できますが，DECmigrateバージョン1.0 を使用してトランスレートされたイメージは，OpenVMS Alphaバージョン1.0 以降で動作できます。表 9-1は， OpenVMS Alphaシステムの各バージョンと，それをサポートする DECmigrateのバージョンを示しています。

### 表 9-1 OpenVMS Alpha の各バージョンでのトランスレートされたイメージのサポート

イメージをトランスレートするために使用した DECmigrateのバージョン | トランスレートされたイメージに対する OpenVMS Alphaのサポート
--- | ---
バージョン1.0 | バージョン1.5 | バージョン6.1以降
バージョン1.0 | サポートされる | サポートされる | サポートされる
バージョン1.1 | サポートされない | サポートされる | サポートされる
バージョン1.1A | サポートされない | サポートされない | サポートされる

# 9.3Translated Image Environment (TIE)

イメージのトランスレーションは，VAXアプリケーションの一部または全部を OpenVMS Alphaに移行するための1つの手段です。DECmigrate for OpenVMS AXPの VAX Environment Software Translatorユーティリティ(VEST)は， VAX実行可能イメージまたは共用可能イメージを，同等の機能の Alphaイメージに変換することにより，トランスレートされたイメージを作成します。 VESTは，オプションとして提供されるレイヤード製品 DECmigrate for OpenVMS AXPの構成要素です。

トランスレートされたイメージがOpenVMS Alphaで実行される場合には， Translated Image Environment (TIE)がイメージを正しく実行するのに必要な VAX環境を提供します。TIEはTIE$SHAREと TIE$EMULAT_TVという共用可能イメージで構成されます。これらのイメージは VAXの複合命令を実行します。 移行におけるイメージ・トランスレーションの役割については， 『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。

この後の節では，次のことについて説明します。

- ネイティブなイメージとトランスレートされたイメージの間の相互操作性

- トランスレートされたイメージの実行

- TIE統計情報とフィードバック

ネイティブなイメージとトランスレートされたイメージの間の相互操作性

TIEはOpenVMS Alphaの他の構成要素と連携動作して， ネイティブなイメージとトランスレートされたイメージが相互に他のイメージを呼び出すことができるようにしています。 相互操作性に依存したアプリケーションやランタイム・ライブラリを開発する場合には， コンパイル，リンク，またはトランスレートを行うときに， 特定の手順に従わなければなりません。 第9.3.1.4項に説明している最初の制限事項を参照してください。

トランスレートされたイメージの実行

トランスレートされたイメージを実行するには，DCLのRUNコマンドを使用します。 次の例を参照してください。

         $ RUN FOO_TV.EXE

OpenVMS Alphaに， 適切なトランスレートされた共用可能イメージと実行時ライブラリが含まれていない限り， トランスレートされたイメージは正しく動作しません。 イメージをトランスレートするときに，VESTは， 入力イメージが参照しているイメージとライブラリに対応するイメージ情報ファイル (IIF-ファイル・タイプは.IIF)を必要とします。これらの.IIFファイルを使用すると， VESTは共用可能イメージとライブラリのトランスレートされたバージョンを正しく参照するトランスレートされたイメージを作成できます。 イメージのトランスレーションで使用されるイメージ情報ファイルは， OpenVMS Alphaで使用できるトランスレートされた共用可能イメージまたは実行時ライブラリのバージョンに正確に対応しなければなりません。

OpenVMS Alphaには，トランスレートされた実行時ライブラリと対応するイメージ情報ファイルがあります。 これらは第9.4節に示すとおりです。 トランスレートして実行するイメージで参照されているライブラリまたは共用可能イメージが含まれているかどうかを判断するには， このリストを確認してください。OpenVMS Alphaに，必要な共用可能イメージまたはライブラリがない場合には， 『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。 このマニュアルでは，イメージ情報ファイルの作成方法と使用方法を説明しています。

トランスレートされたライブラリがそのライブラリのネイティブ・バージョンに置き換えられた場合には， そのライブラリを指す論理名を適切に定義しなければなりません。つまり， image_TVをimageに再定義しなければなりません。

TIE統計情報とフィードバック

TIEの実行時サポート機能の他に，TIEの統計情報とフィードバックを使用すると， トランスレートされたイメージの性能を向上するのに役立ちます。

- TIEは， トランスレートされたイメージの実行に関する統計情報を表示できます。 これらの統計情報は，イメージが TIEリソースをどのように使用しているかとイメージ間のやり取りを記述します。

- TIEはVAXコードのインタプリテーションで検出された VAXエントリ・ポイントに関する情報を記録できます。 イメージを再度トランスレートする場合には，VESTはこの情報を使用して，より多くの VAXコードを検出し，トランスレートします。

『DECmigrate for OpenVMS AXP Systems Translating Images』では， これらの機能について詳しく説明しており，また， これらの機能の使用を有効または無効に設定するための論理名の定義方法についても説明しています。

## 9.3.1問題点と制限事項

この節では，TIEの問題点と制限事項について説明します。

### 9.3.1.1条件ハンドラに関する制限事項

ネイティブ・イメージとトランスレートされたイメージの両方に対して設定できる条件ハンドラのタイプには， 永久的な制限事項があります。ネイティブ・ルーチンは， トランスレートされた条件ハンドラを設定することができず， トランスレートされたルーチンはネイティブな条件ハンドラを設定できません。 ネイティブ・イメージまたはトランスレートされたイメージがこの制限に違反すると， 実行時の結果は予測できなくなります。

### 9.3.1.2例外ハンドラに関する制限事項

次の例外ハンドラの制限事項は永久的なものです。

- 正しいプログラム・ステータス・ロングワード(PSL) を受け取ることに依存している例外ハンドラを含むトランスレートされたイメージは， 正しく機能しないことがあります。例外が報告されるときに，VAXのPSLがないため， Alphaのプログラム・ステータス(PS)がシグナル・アレイに報告されます。

- トランスレートされたイメージで，シグナル・アレイ内の PSLの変更に依存している例外ハンドラを使用している場合には， そのイメージは正しく機能しません。 変更されたPSLは障害のあるコードに伝達されません。

### 9.3.1.3浮動小数点に関する制限事項

次の浮動小数点の制限事項は永久的なものです。

- 場合によっては，同じデータを操作する浮動小数点命令が， Alphaシステムではトラップを生成するのに， VAXシステムでは生成しないという状況があります。とくに，OpenVMS Alphaで VAX浮動小数点命令を実行すると，VAXハードウェアが正しく処理できる "ダーティ・ゼロ"に対してトラップが生成されます。"ダーティ・ゼロ"とは， ゼロの代わりに使用される浮動小数点値です。 ダーティ・ゼロを使用する操作を実行するトランスレートされたイメージとの互換性を維持するために， TIEにはダーティ・ゼロを修正し， 浮動小数点演算を再実行する条件ハンドラが含まれています。しかし， このハンドラが正常に機能するのは，イメージをトランスレートするときに， /PRESERVE=FLOAT_EXCEPTIONS修飾子を使用した場合だけです。

  トランスレートするときに/PRESERVE=FLOAT_EXCEPTIONS修飾子を使用せず， ダーティ・ゼロに対して演算を実行するイメージは，HPARITH例外を発生させ， 要約状態のビット1がセットされます。 トランスレートされたアプリケーションでこのような例外が発生した場合には， /PRESERVE=FLOAT_EXCEPTIONSを指定して再トランスレートしてください。 VAXのダーティ・ゼロが発生するのは一般に，浮動小数点データを 0に初期化しなかったためです。この場合には， ダーティ・ゼロを使用するアプリケーションを OpenVMS Alphaに移植するために， ソース・コードを変更しなければならない可能性があります。

- AlphaのD53浮動小数点(小数部が56ビットではなく，53ビットの D浮動小数点データ型)は，G浮動小数点表現に変換されたVAXのD浮動小数点です。 この変換の結果，次のような問題が発生します。次の VAX命令について考えてみましょう。

           MOVD    (SP),R2
           MOVD    R2,-(SP)

  VESTは，これらのVAX命令を次のようなAlphaコードにトランスレートします。

           LDD     F2,0(R14)       ! Pick up D float
           CVTDG   F2,F2           ! Convert to Canonical G Form with rounding
           CVTGD   F2,F17          ! Convert back to D Form for storing
           STD     F17,-8(R14)     ! Store the result

  実行時に，VESTで生成されたコードは，D56浮動小数点をG正規形式に変換するときに， もっとも正確なG浮動小数点の値を求めるために丸めを行います。場合によっては， G正規形式に変換すると，D浮動小数点の値が切り上げられ， D浮動小数点では表現できない指数部を作成することがあります。この場合には， CVTGD操作はHPARITHトラップを発生させ， その理由として浮動小数点オーバフローを示します。

  トランスレートされたイメージで実行時にこの問題が発生した場合には，VESTの /FLOAT=D56_FLOAT修飾子を使用して再度トランスレートを行い， プログラムが正しく実行されるようにしなければなりません。

### 9.3.1.4相互操作性に関する制限事項

相互操作性に関して，次の制限事項に注意してください。

- トランスレートされたイメージを呼び出すネイティブ・ルーチンや， トランスレートされたイメージから呼び出されるネイティブ・ルーチンは， /TIE修飾子を使用してコンパイルし， /NONATIVE_ONLY修飾子を使用してリンクしなければなりません。 ネイティブ・イメージとトランスレートされたイメージの間の相互操作性の確認は実行時に行われます。 ネイティブ・ルーチンのコンパイルとリンクで/TIE修飾子と /NONATIVE_ONLY修飾子を使用しなかった場合には， ネイティブ・ルーチンとトランスレートされたイメージが相互操作しようとするときに， 実行時にエラーが発生します。このようなエラーが発生した場合には， ネイティブ・ルーチンの再コンパイルと再リンクを行ってください。

- /TIE修飾子を指定せずにコンパイルしたネイティブ・ルーチンで， トランスレートされたルーチンに対して間接呼び出しを実行すると， 実行時にアクセス違反が発生することがあります。間接呼び出しは， トランスレートされたルーチンのアドレスを格納した変数を通じて行われます。 この場合， ネイティブ・ルーチンからトランスレートされたルーチンへの呼び出しを援助するための自動ジャケット・コードはありません。 ネイティブ・コードはネイティブ・プロシージャ記述子としてルーチン・アドレスを使用しようとします。 ネイティブ・プロシージャのコード・アドレスは， プロシージャ記述子のベースからオフセットPDSC$L_ENTRYの位置にあります。 オフセットの値は8です。 トランスレートされたルーチンのアドレスはプロシージャ記述子として取り扱われるため， そのアドレスからオフセット8の値が呼び出すコードとして使用されます。 この結果，通常はアクセス違反が発生します。

  この問題が発生した場合には，デバッガを使用して次のことを確認してください。

  - R27が，トランスレートされたイメージを指しているかどうかを確認します。

  - 8(R27)のビット<31:2>がアクセス違反アドレスのビット<31:2> に等しいことを確認してください(Alpha命令はロングワード・アラインされるため， すべてのビットが使用されるわけではありません)。

  - R26がネイティブ・イメージを指していることを確認してください。

  - -4(R26)がJSR R26，(26)命令であることを確認してください。
  これらのすべての確認で問題が検出されなかった場合には， /TIE修飾子を使用してネイティブ・ルーチンを再コンパイルし， 実行時に自動ジャケットが有効になるようにします。

### 9.3.1.5VAX C:トランスレートされたプログラムの制限事項

次のトランスレートされたVAX Cプログラムの制限事項は永久的なものです。

- プログラムでVAX C RTLルーチンの brk()を使用して動的メモリを解放する場合には(つまり， 現在のブレーク・アドレスより小さいブレーク・アドレスを要求した場合)， TIEが次に複合命令ルーチンを使用しようとしたときに， 致命的なメモリ・アクセス違反が発生することがあります。 このような違反が発生するのは，複合命令ルーチンが別のイメージ TIE$EMULAT_TV.EXEにあるからであり，これはルーチンの1つを最初に使用するときに， LIB$FIND_IMAGE_SYMBOLによって動的に起動されます。このことが発生する時期と， メモリを解放するbrk()呼び出しに渡したアドレスに応じて， TIE$EMULAT_TV.EXEがロードされるメモリも解放される可能性があります。

  この問題を回避するには，メモリを解放するためにbrk()を絶対に使用しないか， またはメモリを解放するために後で使用するブレーク・アドレスを入手する前に，複合 VAX命令を確実に実行します。メモリを割り当てるために brk()を使用しても問題はありません。

- vfork()とエグゼクティブ関数を使用するトランスレートされたVAX Cプログラムは，実行時にハングする可能性があります。VAX Cプログラムの子プロセスが強制終了され，エラーが発生した場合には， メールボックス入出力が完了するのを待ってハングしている可能性があります。 この問題を回避するには，子プロセスが強制終了されないようにします。

# 9.4トランスレートされたイメージのサポート

トランスレーション・サポートは，ユーザがAlphaに移行する際に発生する障 害を削減するために提供されています。それは次の理由によるものです。

- 最初は言語サポートが完全に行われなかったため

- 再コンパイルのためにソース・コードを入手できないため

- VAXアーキテクチャの特定の機能に大きく依存しているコードを再コ ンパイルするのが困難なため

VAXバージョンが現在も活発に開発されている言語に対して，ネイティブな Alphaバージョンも提供されています。TIEは，OpenVMS VAXバージョン5.5-2 のリリースの時点で提供されていた言語機能をサポートできるように維持管理されています。

同様に，システム・サービスや実行時ライブラリのエントリ・ポイントの使用が， OpenVMS VAXバージョン5.5-2で提供されていたものに制限されているイメージに対しては， トランスレーションがサポートされます。

もっと新しいVAXレイヤード製品がインストールされている場合には， アプリケーションでトランスレーションに適したイメージを再構築することが必要なときに， いくつかの追加手順が必要になることがあります。たとえば， OpenVMS VAX用のDECwindows Motifバージョン1.2またはバージョン1.2-3では， トランスレーションにとって適切であるように，OSF Motifバージョン 1.2.2やバージョン1.2.3のライブラリではなく，OSF Motifバージョン 1.1.3ライブラリまたはDECwindows XUIライブラリを使用してイメージを作成しなければなりません。

同様に，DEC Fortran for VAXの最近のバージョンを使用するイメージの場合， トランスレーションに適した Fortranプログラムをコンパイルするために追加の修飾子が必要です。

詳細については，それぞれのVAX製品のリリース・ノートを参照してください。

OpenVMS VAXイメージを将来，再構築したり， 再トランスレーションしなければならない状況では，安全措置として，関連する OpenVMS VAXバージョン5.5-2共用可能イメージのコピーを別の VAXディレクトリに保存し，これらのイメージに対して VAXアプリケーションの新しいバージョンをリンクするようにしてください。 この手法を使用する場合，作成されるイメージは新しい OpenVMS VAX共用可能イメージと互換性があり( OpenVMSの既存の機能を拡張した機能を使用できます)，また，OpenVMS Alphaにトランスレーションするためにイメージを正しく構築できます( 共用可能イメージの新しいバージョンは必要ありません)。

この後の節では，トランスレートされたイメージ，イメージ情報ファイル， およびOpenVMS Alphaで提供されるその他の関連ファイルについて説明します。

OpenVMS Alphaには，トランスレートされたメッセージ・イメージはありません。 メッセージ・イメージはすべて，ネイティブ・イメージとして作成されます。

SYS$LIBRARY:内のトランスレートされたイメージ

BASRTL2_D53_TV.EXE
BASRTL2_D56_TV.EXE
BASRTL_D56_TV.EXE
BASRTL_TV_SUPPORT.EXE
BLAS1RTL_D53_TV.EXE
BLAS1RTL_D56_TV.EXE
COBRTL_D56_TV.EXE
DBLRTL_D56_TV.EXE
EDTSHR_TV.EXE
FORRTL2_TV.EXE
FORRTL_D56_TV.EXE
LIBRTL2_D56_TV.EXE
LIBRTL_D56_TV.EXE
MTHRTL_D53_TV.EXE
MTHRTL_D56_TV.EXE
PASRTL_D56_TV.EXE
PLIRTL_D56_TV.EXE
RPGRTL_TV.EXE
SCNRTL_TV.EXE
TECOSHR_TV.EXE
TIE$EMULAT_TV.EXE
UVMTHRTL_D53_TV.EXE
UVMTHRTL_D56_TV.EXE
VAXCRTLG_D56_TV.EXE
VAXCRTL_D56_TV.EXE
VMSRTL_TV.EXE

SYS$SYSTEM:内のトランスレートされたイメージ

DBLMSGMGR_TV.EXE
EDF_TV.EXE
EDT_TV.EXE
MONITOR_TV.EXE
TECO32_TV.EXE

IMAGELIB:内のトランスレートされたRTLイメージ

BASRTL2_D53_TV.EXE
BASRTL_D56_TV.EXE
BLAS1RTL_D53_TV.EXE
COBRTL_D56_TV.EXE
DBLRTL_D56_TV.EXE
FORRTL2_TV.EXE
FORRTL_D56_TV.EXE
LIBRTL_D56_TV.EXE
PLIRTL_D56_TV.EXE
RPGRTL_TV.EXE
SCNRTL_TV.EXE トランスレートされたRTLの大部分は，D53形式ではなく，D56形式で提供されます。 一部は両方の形式で提供されます。両方の形式が提供される場合には， 省略時の形式はD53です。トランスレートされた実行時ライブラリの詳細については， 第9.5節を参照してください。

SYS$LIBRARY:内のイメージ情報ファイル

ACLEDTSHR.IIF
BASRTL2.IIF
BASRTL.IIF
BLAS1RTL.IIF
COBRTL.IIF
CONVSHR.IIF
CRFSHR.IIF
DBLRTL.IIF
DCXSHR.IIF
DISMNTSHR.IIF
DTKSHR.IIF
EDTSHR.IIF
ENCRYPSHR.IIF
EPC$SHR.IIF
FDLSHR.IIF
FORRTL.IIF
FORRTL2.IIF
INIT$SHR.IIF
LBRSHR.IIF
LIBRTL.IIF
LIBRTL2.IIF
MAILSHR.IIF
MOUNTSHR.IIF
MTHRTL.IIF
NCSSHR.IIF
P1_SPACE.IIF
PASRTL.IIF
PLIRTL.IIF
PPLRTL.IIF
PTD$SERVICES_SHR.IIF
RPGRTL.IIF
S0_SPACE.IIF
SCNRTL.IIF
SCRSHR.IIF
SECURESHR.IIF
SMBSRVSHR.IIF
SMGSHR.IIF
SORTSHR.IIF
SPISHR.IIF
TECOSHR.IIF
TPUSHR.IIF
UVMTHRTL.IIF
VAXCRTL.IIF
VAXCRTLG.IIF
VMSRTL.IIF

システム論理名の定義

次のシステム論理名は， トランスレートされた環境を使いやすくするために定義されています。 ACLEDTSHR_TV = ACLEDTSHR
CDDSHR_TV = CDDSHR
CONVSHR_TV = CONVSHR
CRFSHR_TV = CRFSHR
DCXSHR_TV = DCXSHR
DISMNTSHR_TV = DISMNTSHR
DTKSHR_TV = DTKSHR
ENCRYPSHR_TV = ENCRYPSHR
EPC$SHR_TV = EPC_SHR
FDLSHR_TV = FDLSHR
INIT$SHR_TV = INIT$SHR
LBRSHR_TV = LBRSHR
MAILSHR_TV = MAILSHR
MOUNTSHR_TV = MOUNTSHR
NCSSHR_TV = NCSSHR
PPLRTL_TV = PPLRTL
PTD$SERVICES_SHR_TV = PTD$SERVICES_SHR
SCRSHR_TV = SCRSHR
SECURESHR_TV = SECURESHR_JACKET
SMBSRVSHR_TV = SMBSRVSHR
SMGSHR_TV = SMGSHR
SORTSHR_TV = SORTSHR
SPISHR_TV = SPISHR
TPUSHR_TV = TPUSHR
BASRTL_TV = BASRTL_D56_TV
BASRTL2_TV = BASRTL2_D53_TV
BLAS1RTL_TV = BLAS1RTL_D53_TV
COBRTL_TV = COBRTL_D56_TV
DBLRTL_TV = DBLRTL_D56_TV
FORRTL_TV = FORRTL_D56_TV
LIBRTL_TV = LIBRTL_D56_TV
LIBRTL2_TV = LIBRTL2_D56_TV
MTHRTL_TV = MTHRTL_D53_TV
PASRTL_TV = PASRTL_D56_TV
PLIRTL_TV = PLIRTL_D56_TV
VAXCRTL_TV = VAXCRTL_D56_TV
VAXCRTLG_TV = VAXCRTLG_D56_TV
DBLMSGMGR = DBLMSGMGR_TV
EDTSHR_TV = EDTSHR
TECO32 = TECO32_TV
TECOSHR = TECOSHR_TV
VMSRTL = VMSRTL_TV
DBLRTLMSG = DBL$MSG
PASMSG = PAS$MSG
PLIMSG = PLI$MSG
RPGMSG = RPG$MSG
SCNMSG = SCN$MSG
VAXCMSG = DECC$MSG

# 9.5トランスレートされた実行時ライブラリ

OpenVMS Alphaキットの一部として， DECはトランスレートされた実行時ライブラリを提供しています。

VAX実行時ライブラリのルーチンの一部は，倍精度算術演算に対してVAX D浮動小数点データ型を使用します。

これらのライブラリのトランスレートされたバージョンでは，省略時の設定では， AlphaのD56 D浮動小数点データ型が使用されます(VAX実行時ライブラリでは D浮動小数点を使用していました)。この結果，VAX D浮動小数点の 56ビットの仮数部の完全な精度が提供されるため，実行時の性能は低下しますが， 一貫性のある結果が求められます。

性能が重要な算術演算関連のライブラリの場合には，倍精度演算に対して AlphaのD53 D浮動小数点データ型を使用する， トランスレートされた実行時ライブラリのバージョンも提供しています。 これらのライブラリの場合，省略時の設定はD53形式です。D53形式は， 仮数部の下位3ビットの精度を犠牲にして性能を向上します。

次のトランスレートされたライブラリは，D56形式でのみ提供されます。

- BASRTL

- COBRTL

- DBLRTL

- FORRTL

- LIBRTL

- LIBRTL2

- PASRTL

- PLIRTL

- VAXCRTL

- VAXCRTLG

次のトランスレートされたライブラリは，D56形式とD53形式 (省略時の設定)の両方で提供されます。

- BASRTL2

- BLAS1RTL

- MTHRTL

- UVMTHRTL

実行時ライブラリのD56形式へのアクセス

実行時ライブラリを使用する場合には，省略時の設定により，次の処理が行われます。

- BASRTL2の場合，倍精度データに対して MAT関数を使用するトランスレートされたBASICイメージは，D53データ型を使用する BASIC実行時ライブラリ・ルーチンを起動します。

- BLAS1RTLの場合，倍精度浮動小数点引数を使用する BLAS$関数を起動するトランスレートされたイメージは， D53データ型を使用するルーチンを呼び出します。

- MTHRTLの場合， MTH$倍精度浮動小数点関数を起動するトランスレートされたイメージは， D53データ型を使用するルーチンを呼び出します。

- その他の場合は，省略時の設定により，Alphaの D56浮動小数点データ型が使用されます。

一部のユーザはD56浮動小数点の完全な精度を必要とします。しかし， D56ルーチンを使用すると，性能が大幅に低下します。 D56ルーチンにアクセスするには，表 9-2に示すように， D56形式を指す実行時ライブラリの論理名を再定義しなければなりません。 サイトの必要に応じて，論理名はプロセス単位で定義するか， またはシステム単位で定義できます。

### 表 9-2実行時ライブラリの論理名

ライブラリ | 論理名 | D56ルーチンの名前
--- | --- | ---
BASRTL2 | BASRTL2_TV | BASRTL2_D56_TV
BLAS1RTL | BLAS1RTL_TV | BLAS1RTL_D56_TV
MTHRTL | MTHRTL_TV | MTHRTL_D56_TV

## 9.5.1 CRF$FREE_VMとCRF$GET_VM:トランスレートされた呼び出しルーチン

トランスレートされたルーチンからCRF$FREE_VMとCRF$GET_VMを呼び出す場合， トランスレートされた呼び出し側は正しく機能しません。 トランスレートされた呼び出し側はVAX JSBのセマンティックを期待していますが， ネイティブ・コードには(当然のことながら) Alpha JSBセマンティックが存在します。

この問題を回避するには，トランスレートされた呼び出し側はJSBではなく， CALLを使用しなければなりません。

# 9.6トランスレートされたVAX C実行時ライブラリ

この後の節では，トランスレートされた VAX C実行時ライブラリに関連するリリース・ノートを示します。

## 9.6.1問題点と制限事項

この節では，OpenVMS AlphaのトランスレートされたVAX C実行時ライブラリ (VAX C RTL)で報告されている問題点と制限事項について説明します。

### 9.6.1.1機能上の制限事項

トランスレートされたVAX C RTLは，OpenVMS VAXバージョン5.4の VAX C RTLのトランスレートされたバージョンです。 VAX C RTLのそのリリースに存在する問題と制限事項はすべて， トランスレートされたVAX C RTLにもそのまま存在します。トランスレートされた VAX C RTLの機能上の制限事項は次のとおりです。

- fmod( )関数はD_FLOATに対して正しい結果を生成しません。

- SIGFPEシグナルを使用するD_FLOATプログラムは， すべての浮動小数点例外を検出できない可能性があります。 /FLOAT=D56_FLOATを使用するプログラムをトランスレートすると， SIGFPEに関するほとんどの問題を修正できます。

- sbrk( )関数は，SYS$EXPREGから戻される値と一致しないアドレスを戻します。

- HUGE_VAL定数を使用するか，または算術演算関数( HUGE_VALを戻す可能性のある関数)を呼び出すD_FLOATプログラムは， /FLOAT=D56_FLOATを使用してトランスレートした場合を除き， 異常終了する可能性があります。

- 特定の状況では，一部の算術演算関数(D_FLOATまたはG_FLOAT)は， エラー番号をERANGEまたはEDOMに設定するのではなく， 高い性能の算術演算トラップ例外を生成する可能性があります。

### 9.6.1.2相互操作性に関する制限事項

トランスレートされたVAX C RTLがネイティブなDEC C RTLと相互操作する場合には， 次の制限事項が適用されます。

- 次のように制御を移すために，longjmp関数を使用することはできません。

  - ネイティブ・ルーチンからトランスレートされたルーチンへ

  - トランスレートされたルーチンからネイティブ・ルーチンへ

- mallocやcallocなどによって割り当てられたメモリは， 同じコンテキストで解放しなければなりません。つまり， トランスレートされたルーチンがメモリを割り当てる場合には， メモリの割り当てを解釈するための free呼び出しもトランスレートされたルーチンで行わなければなりません。 トランスレートされたルーチンでメモリを割り当て， そのメモリの割り当てをネイティブ・ルーチンで解除すると，ヒープが破壊されます。 同様に，ネイティブ・ルーチンでメモリを割り当て， トランスレートされたルーチンでメモリの割り当てを解除すると， やはりヒープが破壊されます。

- トランスレートされたルーチンでシグナル(および関連) 関数によって設定されたシグナル・ハンドラは， シグナルが発生するときに起動されません。ネイティブ・シグナル・ハンドラだけが UNIXスタイルのシグナルを検出できます。

- SIGEMT，SIGTRAP，SIGIOT， SIGFPEの各シグナルがトランスレートされたイメージによって発生する場合， これらのシグナルを検出することはできません。

- exec関数は類似したイメージを起動するためにだけ使用できます。 つまり，ネイティブ・イメージで起動された exec関数は，トランスレートされたイメージを実行できません。同様に， トランスレートされたイメージで起動されたexec関数は， ネイティブ・イメージを実行できません。

- 後でシステム呼び出しを実行するために，ネイティブ・イメージで vforkを実行してコンテキストを設定し，その後， トランスレートされたイメージでシステム呼び出しを起動した場合， アクセス違反が発生します。

- ファイル・ポインタとファイル記述子をネイティブ・イメージとトランスレートされたイメージの間で共用することはできません。 ファイルをトランスレートされたイメージで開いた後， ネイティブ・イメージでそのファイル・ポインタを使用して読み込みまたは書き込みを実行しようとした場合， アクセス違反が発生するか，またはファイルが壊れる可能性があります。 ネイティブ・イメージでファイルを開いた後， そのファイル・ポインタを使用してトランスレートされたイメージが読み込みまたは書き込みを実行しようとした場合にも， 同じ結果が発生します。

これらの制限された処理を実行するプログラムでは，アクセス違反が発生するか， またはその他の例外が発生します。このような制限された操作を検出し， 実行されないようにするために，徹底的なテストを行ってください。

# 9.7トランスレートされたVAX COBOLプログラム

OpenVMS Alphaオペレーティング・システムでは，VAX COBOLバージョン5.0 コンパイラ(またはそれ以前のコンパイラ)を使用してコンパイルされ， トランスレートされたVAX COBOLプログラムの実行をサポートします。

## 9.7.1問題点と制限事項

VAX COBOLバージョン5.1コンパイラでコンパイルされたプログラムは， OpenVMS Alphaオペレーティング・システムでサポートされません。

[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]