HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
ここでは, OpenVMS I64 用の Linker ユーティリティで修正された問題について説明します。
3.8.1 正しくないイメージ間デバッグ・フィックスアップをリンカがデバッグ・シンボル・ファイルに書き込む
状況によっては,リンカは OpenVMS デバッガ用のイメージ間フィックスアップを作成します。イメージ間デバッグ・フィックスアップは,リンカが解決できない,コンパイラが生成したデバッグ再配置の結果です。つまり,共用可能イメージに格納されている値を実行時に調べるために,デバッガはこれらのフィックスアップを必要とします。デバッガ用にイメージ間フィックスアップをリンカに作成させることが必要となる頻度は,コンパイラによって異なります。 C コンパイラはイメージ間デバッグ・フィックスアップをめったに使用しませんが, C++ コンパイラは頻繁に使用します。このようなイメージを /DEBUG 修飾子付きでリンクすると,リンカはデバッグ情報の後にイメージ間デバッグ・フィックスアップを書き込みます。 /NODSF 修飾子 (デフォルト) を使用すると,情報はイメージ・ファイルに正しく書き込まれますが,/DSF を指定すると,誤ってDSF ファイルに書き込まれることがあります。
たとえば,次の例の DEBUG 情報と DEBUG エラーは,リンカが誤ってDSF ファイルへ書き込んだために表示されます。
$ RUN/DEBUG MINIREF
%DEBUG-I-INFODWARF, error reading Dwarf info: Section 0a extends outside file
%DEBUG-I-INFODWARF, error reading Dwarf info: Section 0c extends outside file
%DEBUG-I-INFODWARF, error reading Dwarf info: SHT_VMS_FIXUP section 10 size 17eb
e0 not multiple of 18
%DEBUG-I-INFODWARF, error reading Dwarf info: SHT_VMS_FIXUP section 12 size 17ec
30 not multiple of 18
OpenVMS I64 Debug64 Version V8.3-003
%DEBUG-F-ACCVIO, access violation, reason mask=00, virtual address=000000000014A
000, PC=000000007BD73100, PS=0000001B
%DEBUG-I-INITIAL, Language: C, Module: MINIREF
DBG>
|
イメージ・ファイルには影響がなく, RUN コマンドを使用して問題なく実行できます。
$ RUN MINIREF |
この誤りは OpenVMS V8.3-1H1 の I64 Linker で修正されました。
3.8.2 /SELECTIVE_SEARCH がトランスファー・アドレスを誤って無視することがある
トランスファー・アドレスが含まれている I64 オブジェクト・モジュールがあり, /SELECTIVE_SEARCH 修飾子を指定したリンク操作にそのモジュールを含めると,リンカはそのトランスファー・アドレスを検出しませんでした。
次の例では,オブジェクト・モジュール (MAIN.OBJ) にトランスファー・アドレスが含まれていますが,/SELECTIVE_SEARCH によって無視されます。
$ LINK MAIN/SELECTIVE_SEARCH %ILINK-W-USRTFR, image USER:[JOE]MAIN.EXE;1 has no user transfer address |
この状態になるのは,プログラムのトランスファー・アドレスを提供することを意図した I64オブジェクト・モジュールが,SELECTIVE_SEARCH 属性を使用したリンク操作に含まれている場合だけです。次の例のように,LINK コマンドまたは LIBRARY コマンドでオブジェクト・モジュールに /SELECTIVE_SEARCH修飾子を指定すると, SELECTIVE_SEARCH 属性がオブジェクト・モジュールに与えられます。
$ LINK MAIN/SELECTIVE_SEARCH |
または
$ LIBRARY/INSERT LIB.OLB MAIN.OBJ/SELECTIVE_SEARCH |
このライブラリに含まれているモジュールを,リンク操作で参照を解決するために使用します。暗黙的に使用する例を次に示します。
$ LINK/EXECUTABLE=MAIN SUBROUTINES.OBJ, LIB.OLB/LIBRARY |
明示的に使用する例を次に示します。
$ LINK/EXECUTABLE=MAIN SUBROUTINES.OBJ, LIB.OLB/INCLUDE=MAIN |
この問題は,以下のどちらかの形で現れます。
65280 を超えるセクションに対しては,ELF 形式は拡張された番号付け方式を使用します。これは,OpenVMS V8.3 の I64 Linker では実装されていませんでした。そのため,単一の入力オブジェクト・モジュールまたは共用可能イメージが持つことのできるセクションの数が制限されていました。通常リンカは複数のセクションを持つ共用可能イメージを作成するため,この制限は共用可能イメージを作成する際にも適用されます。ここで,ELF セクションは,C++ テンプレートや共用セクションをエクスポートするために使用されます。つまり,共用可能イメージ中のそのようなインタフェースの数は 65280 未満でなければなりませんでした。
OpenVMSV8.3-1H1 I64 Linker では,この制限はなくなりました。入力ファイル,オブジェクト・モジュール,あるいは共用イメージは, 65280 を超えるセクションを持つことができます。
3.8.4 マップ・ファイル中の共用可能イメージの作成日が正しくない
OpenVMS I64 プラットフォームでは,リンカ・マップ中の共用可能イメージの作成日が正しくない場合がありました。誤った日付は,通常 3686 と表示されます。この状態になるのは,リンカが共用可能イメージを入力ファイルとして処理し,日付フィールドを抽出してマップに出力した場合です。 ANALYZE/IMAGE で表示されるイメージ自体の日付は正しい内容になっています。
この誤りは OpenVMS V8.3-1H1 で修正されました。
3.8.5 demangler 情報を検索するとアクセス違反になる
状況によっては,共用可能イメージ内に demangler 情報がないにもかかわらず,リンカでその情報の検索を試みると,リンカがアクセス違反で異常終了することがありました。
この問題は OpenVMS V8.3-1H1 で修正されました。
3.8.6 NOGLOSYM エラー・メッセージに対する誤った二次メッセージ
NOGLOSYM エラー・メッセージに対して,OpenVMS V8.3 I64 Linker は誤った再配置タイプを表示し,一部の情報を 2 度表示していました。
この問題は OpenVMS V8.3-1H1 で修正されました。
3.8.7 未定義シンボルについての誤った情報
未定義シンボルに対する USEUNDEF 操作によって,同一の参照についての情報が誤って 2 回表示されることがありました。この問題は,コンパイラが未定義シンボルへの参照について,再配置ペア (LTOFF22X/LDXMOV) を生成した場合に発生します。
この問題は OpenVMS V8.3-1H1 で修正されました。
3.8.8 誤った UNMAPFIL エラー
ELF でない入力ファイルがあると,リンカは INVLDHDR エラー・メッセージを表示していました。そして INVLDHDR エラーの後には,誤った UNMAPFIL エラー・メッセージを表示していました。
この問題は OpenVMS V8.3-1H1 で修正されました。
3.8.9 共用可能イメージ・マップ内の識別子の最大長の変更
リンカ・マップでは,リンカはオブジェクト・モジュールと共用可能イメージについて,最大で 14 文字の識別子をプリントしていました。本来は,オブジェクト・モジュールの識別子は無制限で,共用可能イメージの識別子は 15 文字です。
V8.3-1H1 Linker は,共用可能イメージの識別子として,最大で 15 文字プリントするようになりました。
3.8.10 共用可能イメージに対するリンケージ・タイプ・チェック
これまで,リンカは共用可能イメージのシンボルに対して,タイプとリンケージのチェックを行っていませんでした。
OpenVMS V8.3-1H1 では,このチェックを行うようになりました。
3.8.11 プログラム・セクションの ABS 属性が無視される
I64 システムでは,オフセットを定数に変換するためのラベルを持つプログラム・セクション (PSECT) には ABS 属性を設定できません。リンカにより次のようなエラー・メッセージが表示されます。
%ILINK-E-ILLABSPSC, absolute psect <psect-name> has non-zero length (not allowed) |
OpenVMS 8.3-1H1 Linker は ABS プログラム・セクション属性を無視し,次のような情報メッセージを表示します。
%ILINK-I-PSCATTIGN, psect attribute ABS is not supported for OpenVMS ELF sections, attribute ignored |
3.8.12 コマンド行に FP_MODE リテラルを指定していないとリンカはアクセス違反となる
OpenVMS V8.3では,コマンド行に FP_MODE リテラルを指定していないと, I64 Linker はアクセス違反になっていました。
この問題は OpenVMS V8.3-1H1 で修正されました。
3.9 OpenVMS の Analyze ユーティリティ
3.9.1 アンワインド・データ表示の問題を修正
OpenVMS V8.3 では,Analyze ユーティリティ(ANALYZE)はアンワインド・データを, 1 度目は生のデータとして,そして 2 度目はフォーマットされたデータとして,2 度表示していました。セグメント番号または ALL キーワードを使って,アンワインド・データを含むセグメントを選択すると,ANALYZE は生のデータを表示していました。ただし,セグメント番号と ALL または DYNAMIC のキーワードを使って,ダイナミック・セグメントを選択すると, ANALYZE はフォーマットされたデータだけを表示していました。
この問題は,OpenVMS V8.3-1H1 で修正されました。セグメントで,フォーマットされたアンワインド・データが表示されるようになりました。
同一データを 2 度フォーマッティングするのを避けるために, ANALYZE はダイナミック・セグメントではアンワインド情報を表示しなくなりました。アンワインド・データを簡単に選択できるようにするために, ANALYZE では /SEGMENT 修飾子に対して UNWIND キーワードが使用できるようになりました。
以前のコマンド
/SEGMENT=DYNAMICと同等のアンワインド情報の出力が必要な場合には,
/SEGMENT=(DYNAMIC,UNWIND)コマンドを使ってください。アンワインド・データを持ったセグメントが複数あるときには,
/SEGMENT=UNWINDコマンドによってすべてのアンワインド・データがフォーマットされることに注意してください。
3.9.2 フォーマットされたシンボル・ベクタがデータ・セグメントに正しく表示される
これまでは,シンボル・ベクタ要約情報には,シンボル・ベクタが存在するセグメントが表示されず,ダイナミック・セグメント内のシンボル・ベクタだけがフォーマットされていました。
この問題は,OpenVMS V8.3-1H1 で修正されました。シンボル・ベクタが存在するデータ・セグメントでは,フォーマットされたシンボル・ベクタが表示されるようになりました。フォーマットされたシンボル・ベクタはデータに埋め込まれ,データのダンプ内に表示されます。
同一データを 2 度フォーマッティングするのを避けるために,ダイナミック・セグメントではシンボル・ベクタは表示されなくなりました。シンボル・ベクタを簡単にフォーマットできるようにするために, /SEGMENT 修飾子に対して SYMBOL_VECTOR キーワードが使用できるようになりました。このキーワードを指定すると,結果の出力にはフォーマットされたシンボル・ベクタだけが表示されます。周りのデータは表示されません。すべてのデータをフォーマットして表示するには,番号を使ってセグメントを選択してください。
以前のコマンド /SEGMENT=DYNAMIC と同等のシンボル・ベクタの出力が必要な場合には, /SEGMENT=(DYNAMIC,SYMBOL_VECTOR) 修飾子を使ってください。
要約情報には,シンボル・ベクタが存在するデータ・セグメントの名前が表示されます。
3.9.3 トランスファー・アレイがデータ・セグメント内にフォーマットされるようになった
これまでは,セグメント番号または ALL キーワードのいずれかを使って,トランスファー・アレイが存在するデータ・セグメントを選択しても,トランスファー・アレイはフォーマットされませんでした。トランスファー・アレイについての情報は,要約にのみ表示されていました。
この問題は,OpenVMS Version 8.3-1H1 で修正されました。
フォーマットされたトランスファー・アレイがデータ・セグメント内に表示されるようになりました。
3.9.4 システム・バージョン・アレイがダイナミック・セグメント内にフォーマットされるようになった
システム・バージョン・データはダイナミック・セグメント内にあります。これまでは,セグメント番号,ALL または DYNAMIC のキーワードのいずれかを使って,ダイナミック・セグメントを選択しても,システム・バージョン・アレイは表示されませんでした。システム・バージョン・アレイについての情報は,要約にのみ表示されていました。
この問題は,OpenVMS Version 8.3-1H1 で修正されました。
フォーマットされたシステム・バージョン・アレイがダイナミック・セグメント内に表示されるようになりました。
3.9.5 /SEGMENT 修飾子の機能拡張
ダイナミック・セグメント用の /SEGMENT 修飾子が,機能拡張されました。 Analyze は,/SEGMENT=DYNAMIC 修飾子でキーワードを受け付けるようになり,カスタマイズされた情報が表示できるようになりました。選択可能な情報に対するキーワードは,以下のとおりです。
OpenVMS V8.3 では,Analyze ユーティリティは,65,280 を超えるセクションを持つオブジェクト・モジュールを解析すると,完了しませんでした。セクション・ヘッダ・テーブルの表示で,ループに陥っていました。
この問題は,OpenVMS V8.3-1H1 で修正されました。
3.10 OpenVMS の INSTALL ユーティリティ (S2 空間に常駐イメージをインストールする)
INSTALL ユーティリティは,常駐イメージのコード・セグメントを 64 ビット S2 アドレス空間へインストールする機能をサポートするようになりました。ただしすべてのコードが,完全な 64 ビット・アドレス空間 (P2 または S2) で実行できるわけではありません。たとえば,例外を処理するためには,コードは 64 ビット PC に対応していなければなりません。また,一部のコンパイラでは,64 ビット・アドレス空間用のコードを生成するときには,/POINTER_SIZE=64 コマンド修飾子を指定する必要があります。
対応していないコードを S2 空間にマッピングするのを避けるために, INSTALL ユーティリティは,省略時の指定では,コード・セグメントを S0/S1 空間にマッピングします。 INSTALL ユーティリティが常駐イメージのコード・セグメントを S2 空間にマッピングするのは,以下の 2 つの条件が満たされた場合だけです。
Librarian ユーティリティでは,以下の機能拡張が行われました。
3.11.1 セクション・エスケープ機能のサポート
これまでは,65,280 を超えるセクションを持つオブジェクト・モジュールは,オブジェクト・ライブラリに追加できませんでした。 Librarian は,次のようなエラー・メッセージで異常終了していました。
$ LIBRARIAN/CREATE MYLIB 64K_SECTIONS %LIBRAR-E-REPLACERR, error replacing USER$DISK:[JOE]64K_SECTIONS.OBJ;1 in USER$DISK:[JOE]MYLIB.OLB;1 $ |
この状況は,OpenVMS V8.3-1H1 で修正されています。セクション・エスケープ機能は,OpenVMS Version 8.3-1H1 で追加されています。
| 前へ | 次へ | 目次 | 索引 |