library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


HP OpenVMS

HP OpenVMS
V8.2 リリース・ノート【翻訳版】


前へ 次へ 目次 索引


5.9 呼び出し標準規則とローテートするレジスタ (I64 のみ)

V8.2

ここでの説明は『OpenVMS Calling Standard』の情報を補足するものです。

呼び出し標準規則の ICB (invocation context block) ( 『OpenVMS Calling Standard』の表 4-16 を参照) およびメカニズム・ベクタ ( 『OpenVMS Calling Standard』の図 8-7 と表 8-6 を参照) は常に,あたかも,レジスタ・リネーム・ベース (CFM.rrb) とローテート・サイズ (CFM.sor) がいずれも 0 であったかのように,汎用レジスタ,浮動小数点レジスタ,およびプレディケート・レジスタを記録しています。言い換えると,ローテートするレジスタを使用しているときに,ローテーションの効果が無視されます。このことは,LIB$I64_PUT_INVO_REGISTERS ルーチン ( 『OpenVMS Calling Standard』の第 4.8.3.13 項を参照) で使用するレジスタ・マスクについても同様です。というのは,これらのマスクは, ICB 構造体のフィールドによって定義されるからです。

現在は,補足的なアクセス・ルーチン LIB$I64_GET_FR, LIB$I64_SET_FR, LIB$I64_GET_GR および LIB$I64_SET_GR ( 『OpenVMS Calling Standard』の第 4.8.4 項を参照) が,レジスタ・リネーム・ベース・レジスタとローテート・サイズ・レジスタの効果を調整しないで,不適切に,そのレジスタ番号パラメータを解釈しています。これは,誤りであり今後のリリースで修正される予定です。

それまでは,ICB またはメカニズム・ベクタ内の汎用レジスタ,浮動小数点レジスタ,およびプレディケート・レジスタを調べるプログラムや,実行時に見えるレジスタを探して内容を解釈するプログラムでは,保存された CFM レジスタを調べて,自身で適切に調整する必要があります。

5.10 Common Data Security Architecture (CDSA) に関する考慮

ここでは,CDSA に関する注意事項について説明します。

5.10.1 Secure Delivery Advanced Developer's Kit

V8.2

インターネット経由でファイルをダウンロードすることは,手軽にソフトウェアのアップデートをしたいと思う OpenVMS ユーザにとっては,必須条件になりつつあります。一方で,これらのユーザは,セキュリティの脆弱性に用心深くなっています。 Secure Delivery は,公開鍵と電子署名技術を用いており, OpenVMS ユーザは HP および他社の OpenVMS ベンダーからダウンロードするファイルが本物であることを確認することができます。

Secure Delivery のについて説明したドキュメントは,次の Web サイトにあります。

http://www.hp.com/go/openvms/security/

このドキュメントは,OpenVMS 上の Secure Delivery の概要と,そのコンポーネントの呼び出し方法について説明しています。 Secure Delivery は, OpenVMS Version 8.2 の Advanced Developer's Kit (ADK) として提供され,その後の OS リリースで全面的にサポートされる予定です。将来予定されているソフトウェア・キットの自動検証のための PCSI との連携機能を除き, Secure Delivery の機能はすべて OpenVMS Version 8.2 に実装されています。

5.10.2 インストールと初期化に関する考慮

V7.3-2

CDSA は,オペレーティング・システムのインストール時に自動的にインストールされます。ただし,次の点に注意してください。

5.11 照合キーを指定する CONVERT/NOSORT で発生する可能のある CONVERT-I-SEQ エラー

V7.3

/NOSORT 修飾子および出力ファイルのいずれかのキーに照合キー・タイプを指定する CONVERT コマンドでは,潜在的な動作の変更による影響があります。

CONVERT コマンドの /NOSORT 修飾子は,主キーが入力ファイルですでにソート順に並べられているため, Convert ユーティリティでソートしないことを表します。 OpenVMS Version 7.3 より前のバージョンの Convert ユーティリティでは,出力ファイルに指定されたキーに照合キー・タイプが含まれる場合, /NOSORT が指定されているかどうかに関係なく,入力ファイルが必ずソートされるという欠陥がありました。 OpenVMS Version 7.3 では,Convert ユーティリティが修正され,出力ファイルのいずれかのキーが照合キーである場合でも,コマンド行の /NOSORT 修飾子に正しく従うように修正されています。

そのため,以前に照合キー欠陥の 2 次的な影響で成功していた CONVERT 操作でも,入力ファイルが主キーによってソートされていない場合で,コマンド行に /NOSORT が指定されているときには, %CONVERT-I-SEQ メッセージが表示されることがあります。入力ファイルが主キーによってソートされていない場合は, /NOSORT 修飾子は,使用しないでください。

5.12 デバッグ・モード: CPUSPINWAIT バグ・チェックの回避

V7.3-1

OpenVMS オペレーティング・システムには,複雑なハードウェアの問題やソフトウェアの問題をデバッグするのに役立つように,多くの特殊操作モードが準備されています。一般には,これらの特殊モードを使用すれば,特別なレベルでトレース,データの記録,一貫性チェックを行うことができ,このような機能は,問題があるハードウェア構成要素やソフトウェア構成要素を突き止めるのに役立ちます。これらの操作モードは,システム・パラメータ MULTIPROCESSING, POOLCHECK,BUGCHECKFATAL,SYSTEM_CHECK によって制御されます。

一般に I/O 負荷の高い特定の状況で,これらの特殊モードのいずれかを使用している場合は ( たとえば,デバイス・ドライバや他の複雑なアプリケーションをデバッグする場合など ),CPUSPINWAIT バグ・チェックが発生することがあります。特に,スピンロックのある状態で長期間実行する特権コードに対して CPUSPINWAIT バグ・チェックが発生します。スピンロックは,クリティカル・セクションのエントリ・ポイントとイグジット・ポイントを区切るために使われ,この場合のように連続的に使うことはできません。

CPUSPINWAIT バグ・チェックを防止するには,これらのシステム・パラメータに対して,システムのデフォルト設定を使用するか,またはシステムの負荷を低下させます。

何らかの理由でデフォルトの設定を変更しなければならない場合は, SMP_ LNGSPINWAIT システム・パラメータを 9000000 に設定することで,問題が発生する可能性を減らせます。

5.13 Delta/XDelta デバッガ

ここでは,OpenVMS Alpha および I64 システム上で動作する OpenVMS Delta および XDelta デバッガに関する注意事項について説明します。

OpenVMS Debugger に関する注意事項は 第 5.28 節 を参照してください。

5.13.1 Delta デバッガは OpenVMS I64 では利用できない

V8.2

Delta デバッガは, OpenVMS I64 オペレーティング・システムにはまだ移植されていません。

5.13.2 I64 システムでの XDelta の制限事項

V8.2

次の Intel® Itanium® ハードウェア・レジスタは,XDelta ではサポートされていません。

5.13.3 I64 システムと Alpha システムでの XDelta の相違点

V8.2

OpenVMS I64 上で実行中のシステムに割り込むには,システム・コンソールで Ctrl/P を押します。 XDelta は,あらかじめロードされていなければなりません。 Ctrl/P を押すと,現在の PC と現在の IPL でシステムが停止します。 OpenVMS Alpha システムと異なり, IPL が 14 未満になるのを待つための遅延はありません。

5.13.4 XDelta のレジスタ表示に関する考慮 (I64 のみ)

V8.2

OpenVMS I64 上の XDelta は,あたかも,レジスタ・リネーム・ベース (CFM.rrb) とローテート・サイズ (CFM.sor) がいずれも 0 であるかのように,汎用レジスタ,浮動小数点レジスタ,およびプレディケート・レジスタを表示します。言い換えると,ローテートするレジスタを使用しているときには,ローテイションの効果は無視されます。この状況は,今後のリリースで修正される予定です。詳細は 第 5.9 節 を参照してください。

5.14 ファイル・アプリケーション: 『Guide to OpenVMS File Applications』の訂正

V8.2

マニュアル『Guide to OpenVMS File Applications』が改訂されるときには,下記の訂正が盛り込まれます。

5.15 RMS 構造体についての HP BLISS コンパイラの警告 (I64 のみ)

V8.2

RMS ユーザ構造体 (たとえば,FAB,RAB) の割り当てに使用できる BLISS マクロ ($xxx_DECL) に,クォドワード・アラインメントが追加されました。プロセッサが高速になるほど,アラインメント・フォルトは性能に悪影響を及ぼします。アラインメントをマクロ内に直接実装することにより,これらのマクロを使用する,BLISS で書かれた多数の OpenVMS ユーティリティおよびユーザ・アプリケーションは,性能が改善されます。

該当するマクロは,$FAB_DECL,$NAM_DECL,$NAML_DECL,$RAB_DECL, $RAB64_DECL,$XABALL_DECL,$XABDAT_DECL,$XABFHC_DECL,$XABITM_DECL, $XABJNL_DECL,$XABKEY_DECL,$XABPRO_DECL,$XABRDT_DECL,$XABRU_DECL, $XABTRM_DECL,および $XABSUM_DECL です。

RMS マクロに追加されたアラインメントにより,コンパイラがアラインメント競合の警告を出力することがあります。コンパイラの警告があるプログラムでも,正しくリンクして,実行することができます。ただし,ソースに簡単な変更を加えて,警告を取り除くことをお勧めします。

これらのマクロを BLISS アプリケーション内で使用し,宣言に ALIGN 属性が含まれている場合, BLISS コンパイラは "conflicting or multiply specified attribute" という警告を出力します。たとえば,FAB: $FAB_DECL ALIGN(2) という宣言に対して,警告が出力されます。この警告は,クォドワード・アラインメント (ALIGN(3)) を指定したとしても出力されます。これらのマクロに関連する明示的な ALIGN 属性を削除する必要があります。

さらに,これらの割り当てが, ALIGN(3) と競合する明示的なアラインメント (ALIGN(3) 未満のもの) を持つ PSECT に含まれている場合,BLISS コンパイラは, "align request negative or exceeds that of psect" という警告を出力します。たとえば,次の宣言に対して警告が出力されます。


 PSECT OWN = $OWN$ (..., ALIGN(2), ...) 
 
 OWN 
 
     FAB = $FAB_DECL, ... 

BLISS アプリケーションの再コンパイル時に PSECT のアラインメントに関する警告が表示された場合, PSECT のアラインメントを ALIGN(3) (またはそれ以上) に調整してください。まれに,PSECT 間でデータが隣接していると仮定しているアプリケーションが存在することがあります。この変更により,このような仮定が成り立たなくなることがあります。そのため,コードでこのうような仮定を行っていないかチェックし,必要な変更を行ってください。

多くの OpenVMS ユーティリティが BLISS で記述されていますが, OpenVMS 全体のビルドで発生した警告はわずかでした。この警告を取り除くために OpenVMS に加えた変更は他にはありませんでした。このため,修正が必要なユーザ・アプリケーションは,ほとんどないと考えられます。

5.16 HP COBOL ランタイム・ライブラリ (RTL)

V8.2

OpenVMS Alpha および OpenVMS I64 Version 8.2 では,HP COBOL RTL (DEC$COBRTL) は V2.8-775 にアップデートされました。

5.16.1 SET および COB$SWITCHES

V8.2

COBOL の SET 文の実装 (論理名 COB$SWITCHESを使用して実装されている) は, LNM$FILE_DEV 内の最初のエントリを使用するのに失敗したときに, LNM$PROCESS を使用するように変更されました。これまでは,LNM$FILE_DEV 内の最初のエントリが書き込み不能な論理名テーブルであると,COBOL の SET 文はフェールしていました。

5.16.2 レコード・ロックの問題の修正

V8.2

COBOL の START 文または WRITE 文で,自動レコード・ロックで複数のレコード・ロックが取得されることがありました。この問題は修正されました。

5.17 HP Decimal Support ランタイム・ライブラリ (RTL)

V8.2

OpenVMS Alpha および OpenVMS I64 Version 8.2 では, HP Decimal Support RTL (LIBOTS2) が V2.8-67 にアップデートされました。

5.18 I64 用の HP Fortran

V8.2

OpenVMS I64 Fortran コンパイラは, OpenVMS Alpha の HP Fortran 90 を移植したものです。このコンパイラは OpenVMS I64 システム上で動作し, OpenVMS I64 システム用のオブジェクトを生成します。このオブジェクトは, OpenVMS I64 上の標準リンカを使用してリンクされます。このコンパイラは,OpenVMS I64 Version 8.2 を必要とします。

OpenVMS I64 システム用の HP Fortran のコマンド行オプションと言語機能は,以下の例外を除いて,OpenVMS Alpha システム用の HP Fortran 90 のものと同じです。

インストール手順など,このリリースについての詳細は, Fortran T8.0 製品のリリース・ノートを参照してください。リリース・ノートを抽出するには, Fortran PCSI キットが置かれているディレクトリをデフォルトとして設定し,次のコマンドのいずれかを入力します。


$ PRODUCT EXTRACT RELEASE_NOTES FORTRAN ! For TXT file 
$ PRODUCT EXTRACT FILE FORTRAN/SELECT=FORTRAN_RELEASE_NOTES.PS ! For PS file 

5.19 OpenVMS 用 HP MACRO

OpenVMS MACRO コンパイラは,OpenVMS VAX システム用に記述された Macro-32 ソース・コード (VAX MACRO アセンブラ) をコンパイルし, OpenVMS Alpha および OpenVMS I64 システムで動作する機械語コードに変換します。ここでは,MACRO コンパイラに関する注意事項について説明します。

5.19.1 OpenVMS I64 用 HP MACRO

V8.2

OpenVMS I64 Version 8.2 では,ネイティブの MACRO コンパイラが用意されています。このコンパイラは, OpenVMS Alpha 上の MACRO コンパイラと同じ DCL コマンドを使用します。

OpenVMS Alpha 上でコンパイルした大半のプログラムは,変更せずにそのまま OpenVMS I64 上で再コンパイルできるはずです。ただし,非標準の戻り値を持つルーチンを呼び出すプログラムや,他の言語で記述された JSB 命令呼び出しルーチンを使用するプログラムは,ソース・ファイルにいくつかの新しいディレクティブを追加しなければなりません。

新しいディレクティブの詳細や,MACRO コンパイラの詳細は,『OpenVMS MACRO-32 Porting and User's Guide』を参照してください。

5.19.2 /TIE 修飾子のデフォルトは Alpha と I64 で異なる

V8.2

/TIE 修飾子のデフォルトは Alpha システムと I64 システムで異なります。 Alpha では,デフォルトは /TIE です。 I64 では,デフォルトは /NOTIE です。

5.19.3 /OPTIMIZE=VAXREGS 修飾子は I64 ではサポートされない

V8.2

Alpha システムでサポートされていた /OPTIMIZE=VAXREGS 修飾子は, I64 システムではサポートされません。残念ながら,関連するコードすべてがコマンド行処理から削除されてはいません。 I64 システムで /OPTIMIZE=ALL を指定すると,サポートされていない VAXREGS 最適化を誤って起動することになります。今後のリリースで,コマンド行プロセスを修正して VAXREGS を起動しないようにする予定です。

5.19.4 CODGENWARN メッセージは無視できる (Alpha のみ)

V8.2

Macro-32 コンパイラが,次のようなメッセージを出力することがあります。


%AMAC-W-CODGENWARN, pre-allocation of multiple condition codes overlapped 

このメッセージは無視して構いません。生成されたコードは正しいものです。このようなメッセージが出力されないうよう, Macro-32 コンパイラは今後のリリースで修正される予定です。

5.19.5 操作単位のサポート (I64 のみ)

V8.2

Macro-32 コンパイラは,/GRANULARITY 修飾子や .PRESERVE GRANULARITY オプションを完全にはサポートしていません。多くの場合,Macro-32 コンパイラはデフォルトでバイトを操作単位とするコードを生成しますが,そうでない場合 (たとえば,整列されていないクォドワードにアクセスしている場合) があります。この問題は,今後のリリースで修正される予定です。

5.19.6 デフォルトでは整数のゼロ除算エラーは検出されない (I64 のみ)

V8.2

Macro-32 コンパイラは,整数のゼロ除算エラーを正しく検出するコードを生成しません。 /ENABLE=OVERFLOW 修飾子を指定すると, Macro-32 コンパイラは実行時の値での除算に関してゼロ除算をチェックするコードを生成しようとします。しかし,これは間違ったオペランドをチェックします。ゼロ以外の数値でゼロを除算すると,このコードはエラーを発生します。今後のリリースでコンパイラは修正され,デフォルトでゼロ除算を正しく検出するコードを生成するようになります。動作は,現在の OpenVMS VAX および OpenVMS Alpha システムでの動作と同じになります。

5.19.7 整数を負の最大値で除算するとコンパイラがクラッシュする (I64 のみ)

V8.2

次の命令で Macro-32 コンパイラは,クラッシュします。


    DIVL3 R0, #^X80000000, R0 
    BVS 1$ 

この問題は,今後のリリースで修正される予定です。

5.19.8 整数の除算で "V" コンディション・コードが正しくセットされない (I64 のみ)

V8.2

整数の除算命令 (DIVL, DIVW, および DIVB) で,オーバフロー ("V") コンディション・コードが正しくセットされないことがあります。この問題は,今後のリリースで修正される予定です。

5.19.9 浮動小数点数のゼロ除算エラーが検出されない (I64 のみ)

V8.2

Macro-32 浮動小数点数サポート・ルーチンは,浮動小数点数のゼロ除算を検出しません。サポート・ルーチンでは,VAX 浮動小数点数を IEEE 浮動小数点数に変換して除算を実行します。チェック処理無しで,除算で IEEE の NaN 値 (非数値) が生成されます。サポート・ルーチンは,次に NaN 値を VAX 浮動小数点数に戻そうとします。この操作で,不正浮動小数点数のエラーになります。今後のリリースで,サポート・ルーチンが修正され,正しく浮動小数点数のゼロ除算エラーを検出するようになります。

5.19.10 INSV 命令でメモリを余計に上書きする (I64 のみ)

V8.2

サイズ引数がリテラル 32 で,ポジション引数が 0 より大きいとき, INSV 命令用に生成されたコードが,必要以上にメモリを上書きします。そのようなケースでは INSV 命令が, 2番目のロングワード (メモリ・デスティネーションの場合),または 2番目のレジスタ (レジスタ・デスティネーションの場合) を必要以上に上書きします。

デスティネーションがメモリ参照である場合,リテラル 32 をスクラッチ・レジスタに入れ,そのスクラッチ・レジスタを INSV 命令のサイズ・オペランドとして使用することで,この問題を回避できます。

たとえば,次のようなコードを考えます。


    INSV R2, #15, #32, (R4) 

このコードは,R4 が指すロングワードの上位部分を正しくアップデートしますが,次のロングワードの下位部分のみに書き込むのではなく,次のロングワード全体に不正に書き込みます。次のように変更すれば,正しく動作します。


    MOVL #32, Rtmp          ; Rtmp は使用可能なレジスタ 
    INSV R2, #15, Rtmp, (R4) 

デスティネーションがレジスタ参照である場合,回避策は INSV 命令を,複数の命令に分割することです。たとえば次のコードを


   INSV R2, #15, #32, R4 

次のように変更します。


   INSV R2, #15, #17, R4   ; R2 の下位 17 ビットを R4 の上位に 
   ASHL #-15, R2, Rtmp     ; R2 の上位部分を Rtmp に 
   INSV Rtmp, #0, #15, R5  ; R2 の上位 15 ビットを R5 の下位に 

この問題は,今後のリリースで修正される予定です。

5.20 Hypersort ユーティリティ

ここでは,OpenVMS Alpha および OpenVMS I64 Version 8.2 用の Hypersort V08-006 に関する注意事項について説明します。

Hypersort で修正されていない問題を回避する場合,または Hypersort に実装されていない機能を使用する場合には,従来どおり SORT32 を使用してください。 SORT32 に関する注意事項は 第 5.36 節 を参照してください。

5.20.1 弊社への問題の報告

V8.2

SORT や MERGE で問題を発見した場合は,問題を報告する前に,次のコマンドを実行してください。


$ WRITE SYS$OUTPUT "WSEXTENT =''F$GETJPI("","WSEXTENT")'" 
$ WRITE SYS$OUTPUT "PGFLQUOTA=''F$GETJPI("","PGFLQUOTA")'" 
$ SHOW LOGICAL SORTSHR 
$ SORT/STATISTICS (or MERGE/STATISTICS) 

問題を再現する入力ファイルとともに,この出力を問題の報告に含めてください。

5.20.2 ラージ・ファイルの制限事項

V8.2

Hypersort V08-010 は,メモリ割り当てのアルゴリズムが改良されましたが,大規模な入力ファイルが使用されると,ハングアップしたり, ACCVIO が発生することがあります。ハングアップや ACCVIO が発生する可能性を低くするには, 第 5.20.8 項 に記載されているとおりにページ・ファイル・クォータとワーキング・セット・エクステントを設定します。 Hypersort でハングアップしたり ACCVIO が発生する場合は,代わりに SORT32 を使用してください。

5.20.3 Hypersort と VFC ファイルの制限事項

V7.3-2

Hypersort で VFC ファイルを使用するには,/FORMAT=RECORD_SIZE:n が必要です。

5.20.4 /FORMAT=RECORD_SIZE の制限事項

V7.3-1

Hypersort では, SORT と MERGE の両方で使用する /FORMAT=RECORD_SIZE:n がサポートされます。ただし,次の 2 つの制限事項があります。

5.20.5 Hypersort と検索リスト,および論理名の使用

V7.3-1

Hypersort では,検索リスト,および入力ファイルと作業ファイルで使用される論理名のサポートが十分でありません。この問題を検出した場合は,SORT32 を使用してください。

5.20.6 作業ファイルの空き領域不足

V7.3-1

すべてのソート作業ファイルで空き領域が無くなると,Hypersort が正しく終了しません。この問題を防ぐには,次のいずれかの処理を実行してください。

5.20.7 入力アスタリスク (*) の制限事項

V7.3

Hypersort では,入力ファイル指定にアスタリスク (*) を使用できません。

5.20.8 最適化されたワーキング・セット・エクステントとページ・ファイル・クォータの設定

V7.3-1

SORT32 と Hypersort は,異なるソート・アルゴリズムと作業ファイル・アルゴリズムを使用します。これらのユーティリティの相対的な速度は,入力ファイルと,メモリ,ディスク,および CPU の構成によって異なります。ワーキング・セット・エクステントが,ページ・ファイル・クォータの 3 分の 1 を超えないようにしてください。 SORT32 と Hypersort はいずれも,個々の入力ファイルに合ったワーキング・セット・エクステントを使用することで,最高の性能を発揮します。

5.21 Intel® アセンブラ (I64 のみ)

V8.2

Intel アセンブラ言語で記述されたすべてのモジュールには,-Xunwind フラグによる自動生成を行うか,ソース・モジュールに明示的に unwind ディレクティブを記述する方法で,適切な unwind ディレクティブが含まれていなければなりません。正確な unwind 情報なしでは,オペレーティング・システムの条件処理と例外ディスパッチが動作せず,予期しない状態でプログラムが失敗することがあります。正確な unwind 情報を持たないプログラムは, OpenVMS ではサポートされていません。この前提条件は,永続的な要件となります。

5.22 Librarian ユーティリティ

ここでは,Librarian ユーティリティと Library Service ルーチンに関する注意事項について説明します。

5.22.1 data-reduced ELF オブジェクト・ライブラリとのリンクは推奨できない (I64 のみ)

V8.2

DCX data-reduced ELF オブジェクト・ライブラリは,ライブラリ内の連続領域には格納されません。その結果,最初にデータの展開を行う必要があるため,モジュールをプロセスの P2 空間に直接マッピングすることはできません。 LBR$MAP_MODULE ライブラリ・サービスが,モジュールを展開しプロセスの P2 空間にコピーします。この動作により,結果としてできた P2 空間内のページが,プロセス・クォータとしてカウントされます。

LBR$UNMAP_MODULE ライブラリ・サービスは,これらのページを回復しますが,これらのページはヒープ領域解放リストに残り,プロセス・クォータとしてカウントされ続けます。そのため,Linker 操作の前に,あらかじめ DCX data-reduced ELF オブジェクト・ライブラリを展開することをお勧めします。

5.22.2 I64 ライブラリへの .STB ファイルの挿入または置き換えの失敗 (I64 のみ)

V8.2

OpenVMS VAX および Alpha では, .STB ファイルをオブジェクト・ライブラリに格納することができます。 OpenVMS I64 では,Librarian はこの動作を行いません。例を次に示します。


 $ LIBR/CREATE OBJ$:SOME_LIBRARY OBJ$:SOME_FILE.STB 
 Librarian T01-23 
 %LIBRAR-E-NOTELFFILE, TPSSWRKD$:[TPSS.TRACE.IA64.LPIOBJ]TRACEMSG.STB;1 
  is not an ELF object or image file 

.STB ファイルはオブジェクトでもイメージでもないため,現在 Librarian は,このファイルを I64 システムの .OLB ファイルには格納しません。

ただし,Alpha と VAX では, .STB ファイルはオブジェクト・ファイルと同様の形式になっています。 VAX では,.STB ファイルを Linker への入力として使用することもできます。 Alpha では,.STB ファイルの形式は,.OBJ ファイルの形式と同じです (つまり,ファイル拡張子が .STB であること以外は,これらのファイルに違いはありません)。そのため,Alpha の Librarian はこのファイルを受け付けますが, Linker の入力として使用することはできません。

I64 では, .STB ファイルにファイル・タイプ (ET_VMS_LINK_STB) が埋め込まれます。これにより,Librarian と Linker が, .STB ファイルを処理できないことを判断できます。

5.22.3 プロセス・クォータが低すぎると Librarian がエラーを通知しない問題

V8.2

OpenVMS Alpha および I64 の Librarian は圧縮,データ・リダクション,データ拡張操作でエラーを通知しないことがあります。この問題が発生するのは,Librarian が動作しているアカウントまたはプロセスの PGFLQUOTA プロセス・クォータが低い場合です。 $PUTMSG システム・サービスは,エラーが発生した場合でも必ず SS$_NORMAL というステータスを返すので,操作エラーがただちに明らかになりません。しかし,エラーが発生した場合には, Librarian は Success 以外のステータスを返します。

この問題を回避するには,PGFLQUOTA を増加させてから圧縮,データ・リダクション,データ拡張操作を実行します。さらに,コマンド・プロシージャで LIBRARY コマンドからの戻りステータスを確認するようにしてください。

5.22.4 オブジェクト・モジュール名の長さの問題 (I64 のみ)

V8.2

Librarian は,I64 (ELF) オブジェクトと共有イメージ・ライブラリのモジュール名を誤って 31 文字までに制限しています。この問題は,今後のリリースで修正される予定です。イメージの名前に関する規定については『HP OpenVMS Version 8.2 新機能説明書』を参照してください。

5.23 Lightweight Directory Access Protocol (LDAP) API

ここでは,LDAP API に関する注意事項について説明します。

5.23.1 ld が NULL の場合の ldap_get_option ルーチンからのエラー戻り値 (-1)

V7.3

ldap_get_options()の呼び出しで ldパラメータに NULL 値を使用すると,グローバル・デフォルト・データ・セットではなく,エラー戻り値 -1 が返されます。

5.23.2 ber_flatten() ルーチンが中括弧の不一致を検出しない

V7.3

ber_flatten()ルーチンでは,BerElement 内の '{' および '}' 形式修飾子が一致しない場合が正しく検出されません。

5.24 OpenVMS Alpha 用 Linker ユーティリティ

ここでは,Alpha Linker ユーティリティに関する注意事項について説明します。

I64 Linker に関する注意事項は 第 5.25 節 を参照してください。

5.24.1 LINK/NATIVE_ONLY のヘルプ・テキストの明確化

V8.2

LINK/NATIVE_ONLY のオンライン・ヘルプを,Alpha および I64 に関してより明確に記述すると,次のように記述することができます。

"リンカがプロシージャ・シグネチャ情報を生成するのを防ぎます。リンクするネイティブ・コードを, VAX または Alpha のバイナリ・コードから変換されたイメージと一緒に使用するためにはプロシージャ・シグネチャが必要です。実行イメージまたは共有イメージが,変換されたイメージを呼び出したり,変換されたイメージから呼び出されたりできるようにするには, /NONATIVE_ONLY を使用してリンクしてください。変換されたイメージと一緒に使用するコードは, /TIE 修飾子を使用してコンパイルしなくてはなりません。 (詳細は,関連するコンパイラのマニュアルを参照してください。) "

5.24.2 多数のファイルを指定した場合に Linker がハングアップしたように見える

V7.3-2

RMS_RELATED_CONTEXT リンカ・オプションがオン (デフォルトは RMS_RELATED_CONTEXT=YES) で,存在しないファイルが LINK コマンドのファイル・リストに指定されていた場合,リンカによる LIB$FIND_FILE の呼び出しは完了するまでに長時間かかり,リンカがハングアップしたように見えます。リンクしているファイルの数と,ファイル指定での論理名の使用状況に応じて,リンカの処理が完了するまでに数時間かかることもあります。これは LIB$FIND_FILE が,不明ファイルについて接頭辞の組み合わせをすべて探してから, "file not found" メッセージを表示するためです。リンカが LIB$FIND_FILE を呼び出した後は, Ctrl/Y を押してもリンカを終了させることはできません。

回避方法

LINK コマンドに SYS$INPUT:/OPTION を指定します。 Return を押すと,リンカはユーザがオプション・ファイルに情報を入力するのを待ちます。入力が終了したら,Ctrl/Z を押します。この問題を回避するには,オプション・ファイルに次の項目を入れます。

たとえば,次の LINK コマンドがあるとします。


$ LINK DSK:[TEST]A.OBJ, B.OBJ 

このコマンドを RMS_RELATED_CONTEXT=NO とともに指定したい場合は, /OPTION を指定してから,リンクするファイルの完全ファイル指定を,次のように入力します。


$  LINK SYS$INPUT:/OPTION
RMS_RELATED_CONTEXT=NO
DSK:[TEST]A.OBJ, DSK:[TEST]B.OBJ [Ctrl/Z]
$ 

RMS_RELATED_CONTEXT オプションについての詳細は,『OpenVMS Linker Utility Manual』を参照してください。


次の例では,リストに DOES_NOT_EXIST.OBJ ファイルが含まれていて, RMS_RELATED_CONTEXT オプションが指定されていない (デフォルトで YES が使用されます) 場合に,リンカがハングアップしたように見える様子を示しています。


$  DEFINE DSKD$ WORK4:[TEST.LINKER.OBJ.]
$  DEFINE RESD$ ROOT$, ROOT2$, ROOT3$, ROOT4$, ROOT5$, DISK_READ$:[SYS.] (1)
$  DEFINE ROOT$ WORK4:[TEST.PUBLIC.TEST]
$  DEFINE ROOT2$ WORK4:[TEST.LINKER.]
$  DEFINE ROOT3$ WORK4:[TEST.UTIL32.]
$  DEFINE ROOT4$ WORK4:[TEST.PUBLIC.]
$  DEFINE ROOT5$ WORK4:[TEST.PUBLIC.TMP]
$  LINK/MAP/FULL/CROSS/EXE=ALPHA.EXE  RESD$:[TMPOBJ] A.OBJ,-
_$  RESD$:[SRC]B.OBJ,C,DSKD$:[OBJ]D.OBJ,E,RESD$:[TMPSRC]F.OBJ,-
_$  RESD$:[TEST]G.OBJ,RESD$:[SRC.OBJ]H,RESD$:[COM]DOES_NOT_EXIST.OBJ
[Ctrl/T] NODE6::_FTA183: 15:49:46 LINK CPU=00:02:30.04 PF=5154 IO=254510 MEM=134 (2)
[Ctrl/T] NODE6::_FTA183: 15:49:46 LINK CPU=00:02:30.05 PF=5154 IO=254513 MEM=134
[Ctrl/T] NODE6::_FTA183: 15:50:02 LINK CPU=00:02:38.27 PF=5154 IO=268246 MEM=134
[Ctrl/T] NODE6::_FTA183: 15:50:02 LINK CPU=00:02:38.28 PF=5154 IO=268253 MEM=134
[Ctrl/T] NODE6::_FTA183: 15:50:14 LINK CPU=00:02:44.70 PF=5154 IO=278883 MEM=134

  1. このコマンドは,論理名と,それに対応する文字列を定義しています。

  2. Ctrl/T を押すたびに,CPU 値と IO 値が大きくなります。ただし,MEM 値と PF 値は大きくなりません。これは,LIB$FIND_FILE が呼び出されていることを示しています。

次の例のように,オプション・ファイルを使用して RMS_RELATED_CONTEXT に NO を設定すると,不明ファイルを見つけたときにリンク操作がすぐに終了します。


$  DEFINE DSKD$ WORK4:[TEST.LINKER.OBJ.]
$  DEFINE RESD$ ROOT$, ROOT2$, ROOT3$, ROOT4$, ROOT5$, DISK_READ$:[SYS.]
$  DEFINE ROOT$ WORK4:[TEST.PUBLIC.TEST.]
$  DEFINE ROOT2$ WORK4:[TEST.LINKER.]
$  DEFINE ROOT3$ WORK4:[TEST.UTIL32.]
$  DEFINE ROOT4$ WORK4:[TEST.PUBLIC.]
$  DEFINE ROOT5$ WORK4:[TEST.PUBLIC.TMP.]
$  LINK/MAP/FULL/ CROSS /EXE=ALPHA.EXE SYS$INPUT:/OPTION
RMS_RELATED_CONTEXT=NO
RESD$:[TMPOBJ]A.OBJ,RESD$:[SRC]B.OBJ,RESD$:[SRC]C,DSKD$:[OBJ]D.OBJ
DSKD$:[OBJ]E,RESD$:[TMPSRC]F.OBJ,RESD$:[TEST]G.OBJ
RESD$:[SRC.OBJ]H,RESD$:[COM]DOES_NOT_EXIST.OBJ [Ctrl/Z]
 
%LINK-F-OPENIN, error opening DISK_READ$:[SYS.][COM]DOES_NOT_EXIST.OBJ; as input
-RMS-E-FNF, file not found
$

5.24.3 ライブラリ・チェックにおける Linker のデフォルト動作の変更

V7.3-1

これまでの Linker では,ライブラリと共有イメージ間の一致条件が厳密に検証されていましたが ( 正確な日時を照合し,該当するものがない場合は, LINK-I-DATMISMCH シグナル通知を発行),このリリースでは,イメージ・アクティベータと同じ検証 (GSMATCH 条件を使用して互換性を検証) だけが実行されます。

以前の動作 (日時の照合) を実行する場合は, LINK$SHR_DATE_CHECK 論理名を設定してください。

5.24.4 スタックのエレメント数は最大 25 に制限

永続的な制限事項

オブジェクト・ファイルを作成する開発者は,Linker の内部スタックのエレメント数が最大 25 に制限されていることに注意しなければなりません。どのような計算も,この制限の範囲内で実行しなければなりません。

5.25 OpenVMS I64 用 Linker ユーティリティ

V8.2

ここでは,I64 Linker ユーティリティに関する注意事項について説明します。

Alpha Linker に関する注意事項は, 第 5.24 節 を参照してください。

Alpha Linker と I64 Linker に共通に適用される注意事項は, 第 5.24.1 項 を参照してください。

5.25.1 I64 リンカと Alpha リンカの違い

V8.2

OpenVMS I64 Linker と OpenVMS Alpha Linker の違いに関する詳細な説明については,『HP OpenVMS Version 8.2 新機能説明書』を参照してください。『HP OpenVMS Version 8.2 新機能説明書』には,OpenVMS I64 Linker の新機能についての説明もあります。

5.25.2 LINK_ORDER セクション・ヘッダ・フラグはサポートされていない

V8.2

Linker は, ELF セクション・ヘッダ・フラグ LINK_ORDER をサポートしていません。ただし,このフラグが設定されている unwind セクションは,正しい順序で配置されます。

このフラグは,セクションがイメージ・ファイル内の他のセクションと結合される場合,参照先のセクションが結合される順序と同じ順序で結合しなければならないことを示します。 unwind セクションは,特別なケースとして扱われ,正しい順序で現れます。

次の図に,この概念を図示します。


5.25.3 data-reduced ELF オブジェクト・ライブラリとのリンクは推奨できない

V8.2

DCX data-reduced ELF オブジェクト・ライブラリは,ライブラリ内の連続領域には格納されません。その結果,最初にデータの展開を行う必要があるため,モジュールをプロセスの P2 空間に直接マッピングすることはできません。 LBR$MAP_MODULE ライブラリ・サービスが,モジュールを展開しプロセスの P2 空間にコピーします。この動作により,結果としてできた P2 空間内のページが,プロセス・クォータとしてカウントされます。

LBR$UNMAP_MODULE ライブラリ・サービスは,これらのページを回復しますが,これらのページはヒープ領域解放リストに残り,プロセス・クォータとしてカウントされ続けます。そのため,Linker 操作の前に,あらかじめ DCX data-reduced ELF オブジェクト・ライブラリを展開することをお勧めします。

5.25.4 マップの Image Synopsis セクションの誤り

V8.2

マップの Image Synopsis セクションで,フィールド "Number of code references to shareable images:" と "Estimated map length:" の数値が正しくありません。この問題は,OpenVMS I64 の今後のリリースで修正される予定です。

5.25.5 DIFTYPE および RELODIFTYPE メッセージ

V8.2

OpenVMS I64 システムでは,あるモジュールでデータ (OBJECT) として定義した変数は,他のモジュールでもデータとして参照する必要があります。あるモジュールでプロシージャ (FUNC) として定義した変数は,他のモジュールでもプロシージャとして参照する必要があります。

データがプロシージャとして参照された場合,次のような情報メッセージが表示されます。


%ILINK-I-DIFTYPE, symbol symbol-name of type OBJECT cannot be 
referenced as type FUNC 

プロシージャがデータとして参照された場合,次のような情報メッセージが表示されます。


%ILINK-I-DIFTYPE, symbol symbol-name of type FUNC cannot be 
referenced as type OBJECT 

OpenVMS I64 では,リンカが関数記述子を生成するため,タイプのチェックはリンカで実施しています。 OpenVMS Alpha では,同等のプロシージャ記述子をコンパイラが生成しているため,上記の情報メッセージは OpenVMS I64 のリンカで新しく追加されました。

このメッセージは,通知のみなのでユーザ・アクションは必要としません。しかし,リンカは,データがプロシージャとして参照されたことを検出した場合, DIFTYPE メッセージに加えて,次のような警告メッセージを出力します。


%ILINK-W-RELODIFTYPE, relocation requests the linker to build a 
function descriptor for a non-function type of symbol 

下記の 2つのモジュールの例は,これらの誤りを修正する方法を示します。


TYPE1.C 
 
 #include <stdio> 
 
 int status ;   // Defines status as data. 
 extern int sub(); 
 
 main () 
 { 
     printf ("Hello World\n"); 
     sub(); 
 } 
 
TYPE2.C 
 
 extern int status (int x) ; 
 
 sub () 
 { 
 int x; 
         x = (int)status; 
         return status (x); 
 } 

これらのモジュールをリンクすると,次のような情報メッセージと警告メッセージが出力されます。


$ CC/EXTERN_MODEL=STRICT_REFDEF TYPE1 
$ CC/EXTERN_MODEL=STRICT_REFDEF TYPE2 
$ LINK TYPE1,TYPE2 
%ILINK-I-DIFTYPE, symbol STATUS of type OBJECT cannot be referenced as 
type FUNC 
        module: TYPE2 
        file: NODE1$:[SMITH]TYPE2.OBJ;6 
%ILINK-W-RELODIFTYPE, relocation requests the linker to build a 
function descriptor for a non-function type of symbol 
        symbol: STATUS 
        relocation section: .rela$CODE$ (section header entry: 18) 
        relocation type: RELA$K_R_IA_64_LTOFF_FPTR22 
        relocation entry: 0 
        module: TYPE2 
        file: NODE1$:[SMITH]TYPE2.OBJ;6 

問題を修正して,情報メッセージと警告メッセージが出力されないようにするには, TYPE1.C を修正して,status をプロシージャとして定義します。


TYPE1.C 
 
 #include <stdio> 
 
 int status (int x);  // Defines status as a procedure. 
 extern int sub(); 
 
 main () 
 { 
     printf ("Hello World\n"); 
     sub(); 
 } 
 
 int status (int x) { 
     return 1; 
 } 
 
$ CC/EXTERN_MODEL=STRICT_REFDEF TYPE1 
$ CC/EXTERN_MODEL=STRICT_REFDEF TYPE2 
$ LINK TYPE1,TYPE2 

5.26 LTDRIVER: CANCEL SELECTIVE の制限事項

永続的な制限事項

OpenVMS Version 6.1 より前のリリースでは,LTDRIVER は「拡張 DDT」ビットをセットしていませんでした。したがって,POSIX 関数 CANCEL SELECTIVE は LTDRIVER で動作しませんでした。この問題は解決されましたが,まだ制限事項が残っています。

この修正により,$QIO 読み込みと書き込みを選択的に取り消すことができるようになりましたが,ポート・ドライバに対して行った $QIO (つまり, LAT 接続 $QIO などのように IO$_TTY_PORT 関数修飾子を使用して行ったもの) は, CANCEL SELECTIVE によって取り消すことができません

5.27 Mail ユーティリティ: 呼び出し可能メールのスレッドの制限事項

V7.1

OpenVMS 呼び出し可能メール・ルーチンはスレッド・セーフでは ありません。スレッド化されたアプリケーション内での非スレッド・セーフ・ルーチンの呼び出しの詳細については,『Guide to the POSIX Threads Library』を参照してください。

呼び出し可能メールのコンテキスト情報は,プロセス単位(スレッド単位ではない) で管理されるので,コンテキスト・ベースの処理を実行する複数のスレッドは相互に同期をとり,特定のタイプのメール・コンテキストが一度に 1 つ だけアクティブになるようにしなければなりません。この条件が満たされないと,1 つのスレッドが他のスレッドのメール操作を妨害する可能性があります。

OpenVMS Alpha システムでは,マルチスレッド環境でカーネル・スレッドが有効に設定されている場合,この他にも追加制限事項があります。この環境では,呼び出し可能メールは初期スレッドでのみ使用しなければなりません。

5.28 OpenVMS Debugger

以降の注意事項では, OpenVMS Alpha システムと OpenVMS I64 システムでの, OpenVMS Debugger に固有の注意事項について説明しています。

Delta デバッガと XDelta デバッガの注意事項については, 第 5.13 節 を参照してください。 System Code Debugger (SCD) の注意事項については, 第 5.37 節 を参照してください。

5.28.1 全般的な問題点と回避方法 (I64 のみ)

V8.2

次に,確認されている全般的な状況と,ユーザの回避方法を示します。

問題点: 要素が境界にアラインされていない配列は,正しく表示されません。これは,プログラミング言語の構文を使用して,不自然なデータ・アラインメントを強制した場合に発生します (たとえば,C 言語での #pragma nomember_align, Pascal での PACKEDキーワード)。

回避方法: ありません。

問題点: 添字がスカラ (整数) の配列を調べるとき,デバッガは配列のインデックス値を10進数ではなく,現在定義されている基数で出力します。

回避方法: SET RADIX DECIMAL コマンドを実行します。

問題点: I64 システムの OpenVMS Debugger は,あたかもレジスタ・リネーム・ベース (CFM.rrb) とローテート・サイズ (CFM.sor) がいずれも 0 であるかのように,汎用レジスタ,浮動小数点レジスタ,およびプレディケート・レジスタを表示します。言い換えると,ローテートするレジスタを使用しているときは,ローテイションの効果は無視されます。この問題は,今後のリリースで修正される予定です。さらに詳細な説明は 第 5.9 節 を参照してください。

注意

この現象は,C++ およびアセンブラ言語のプログラムの,特殊な状況でまれに発生します。多くのプログラムは,この問題の影響を受けません。

回避方法: CFM レジスタを調べ,(ゼロでない) CFM.rrb フィールドと CFM.sor フィールドの値を考慮して,手作業で EXAMINE コマンドを調整します。

5.28.2 Basic 言語での問題 (I64 のみ)

V8.2

問題点: 多次元配列の範囲を調べるとき,デバッガは要素のアドレスを適切にシンボル化できません。つまり,配列の行と列の値が正しくありません。

回避方法: ありません。

5.28.3 C++ 言語での問題 (I64 のみ)

V8.2

問題点: SHOW CALLS コマンドが, C++ のマングル化されていない名前ではなく,マングル化された名前を表示することがあります。

回避方法: ありません。

5.28.4 COBOL 言語での問題 (I64 のみ)

V8.2

問題点: EDIT picture 節で宣言したデータは,部分的にしかサポートされません。 EXAMINE コマンドを使用して項目を調べると,位取りなどの調整なしに生データが表示されます。整数や 10 進数の定数を保存することで項目を変更しようとする (DEPOSIT コマンドを使用) とエラーになります。

回避方法: 適切な位取り因数を設定し,表示される値を手作業で調整します。値を変更する必要がある場合は,別の変数または引用符付きの文字列をソースとして DEPOSIT コマンドを実行します。

5.28.5 Fortran 言語での問題 (I64 のみ)

V8.2

問題点: REAL*16 型のデータ項目に値を保存すると,実際の値ではなく常にゼロが格納されます。

回避方法: ありません。

5.28.6 Pascal 言語での問題 (I64 のみ)

V8.2

問題点: 動的境界で宣言された配列 (たとえば "array [1..n]") が,正しく処理されないことがあります。配列を調べている際に,デバッガが INVARRDSC や IVALOUTBNDS のエラーを表示することがあり, SHOW SYMBOL/TYPE で配列境界が正しく表示されないことがあります。

回避方法: ありません。

5.28.7 SET SCOPE コマンド: 動作の変更

V8.2

SET SCOPE コマンドの動作は,このリリースで変更されました。 SET SCOPE では,デバッガの言語設定を,指定されたスコープの言語に変更するようになりました。以前は,SET SCOPE は言語設定に影響を与えませんでした。 SET LANGUAGE NODYNAMIC コマンドを実行することで,この機能を無効にできます。

5.28.8 SHOW IMAGE コマンドの変更

V8.2

SHOW IMAGE コマンドは,プロセスのイメージが占めるアドレス空間の概要を表示するようになりました。イメージ・セクション情報をすべて表示するには, SHOW IMAGE/FULL を使用するか,イメージ名を指定します (たとえば,SHOW IMAGE FOO)。

5.28.9 クライアント/サーバ・インタフェース: 以前のバージョンはサポートされない (Alpha のみ)

V7.3

OpenVMS Alpha Version 7.3 およびそれ以降の Debugger では,以前のバージョンのクライアント/サーバ・インタフェースをサポートしません。次の表に従って,配布メディアのキットにあるクライアント/サーバ・インタフェースをインストールしてください。

CPU オペレーティング・システム クライアント・キット
Intel Microsoft Windows 95,98,NT,Me,2000,XP [DEBUG_CLIENTS011.KIT]
DEBUGX86011.EXE
Alpha Microsoft Windows NT [DEBUG_CLIENTS011.KIT]
DEBUGALPHA011.EXE

これらのクライアント・キットは,自己解凍形式の .EXE ファイルです。

適切な実行形式ファイルを PC に転送したら,そのファイルを実行して, PC 上にデバッグ・クライアントをインストールすることができます。 InstallShield インストール・プロシージャのガイドに従ってインストールを行います。

5.29 OpenVMS のシステム・ダンプ・アナライザ (SDA)

ここでは,システム・ダンプ・アナライザ (SDA) に関する注意事項について説明します。

5.29.1 READ コマンドのデフォルトの変更

V8.2

SDA READ コマンドのデフォルトの動作は,/LOG から /NOLOG に変更されました。

5.29.2 CLUE コマンドは OpenVMS I64 に移植されていない

V8.2

次の CLUE コマンドは,OpenVMS I64 にはまだ移植されていないため,その旨のメッセージを返します。

CLUE CALL
CLUE ERRLOG
CLUE FRU
CLUE REGISTER

5.29.3 SHOW CALL_FRAME 機能の変更 (I64 のみ)

V8.2

OpenVMS I64 Version 8.2 で,次の機能変更が実施されました。


前へ 次へ 目次 索引