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 新機能説明書


前へ 次へ 目次 索引


7.1.5.3 PSECT_ATTRIBUTE オプションによるアラインメントの指定

コンパイラがセクションに割り当てたアラインメントより小さいセクション・アラインメントを PSECT_ATTRIBUTE で指定しないでください。

そのセクションに組み込まれたすべてのコントリビューションを元に,コンパイラが割り当てたアラインメントより小さいアラインメントをプログラム・セクションに指定すると, Linker は警告を出力するようになりました。例を以下に示します。


$ link hi,sys$input/opt 
psect_attr=$literal$,byte 
%ILINK-W-CONFALGN, PSECT option alignment (1) less than compiler 
assigned (16); 
alignment ignored 
        section: $LITERAL$ 
        module: HI 
        file: DISK$USER:[JOE]HI.OBJ;3 
 

VAX システムと Alpha システムでは, Linker は指定された境界 (上記のコード例では "byte") でプログラム・セクションを不適切にアラインし,コンパイラの指定とは異なる境界で,そのプログラム・セクションのすべてのコントリビューションを (上記の例では "hi" とリンクされている,他のモジュールから) 配置します。 Linker はエラー・メッセージは出力しません。

I64 システムでは,Linker は常にコンパイラが指定した境界以上の境界でセクションをアラインします。

PSECT_ATTRIBUTE オプションは,指定された境界が,コンパイラの指定以上のときに,セクションをアラインします。このオプションは,セクションの個々のコントリビューションをアラインするのではなく,セクション全体をアラインします。 PSECT_ATTRIBUTE オプションは,個々のコントリビューションをアラインする際には,コンパイラのアラインメント指定に従います。

7.1.5.4 存在しないファイルがあった場合の Linker の特別な処理

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

どれが存在しないファイル指定かを素早く見つけるには, LINK コマンドに /OPTION を指定します。 [Return] を押すと,Linker はオプション・ファイルへの情報の入力待ち状態になります。オプションの指定が終わったら,Ctrl/Z を入力します。 LIB$FIND_FILE に関連する問題を回避するには,次の項目をオプション・ファイルに含めます。

次の 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]
$ 


次の例は,Linker がハングしたように見える様子を示しています。ファイル 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
$

7.1.6 新しい OpenVMS I64 Linker マップ

Linker マップは拡張され,OpenVMS I64 Linker 用の新しい情報が追加されました。 Linker マップには,次の情報が表示されます。サンプル・マップを 図 7-1図 7-2図 7-3図 7-4図 7-5図 7-6図 7-7図 7-8 に示します。

Linker マップに新たに追加された部分と,変更された部分を示す,白抜きの黒丸数字部分についての説明は,Linker マップ例の後にあります。

図 7-1 オブジェクトとイメージの概要,クラスタの概要


図 7-2 イメージ・セグメントの概要


図 7-3 プログラム・セクションの概要


図 7-4 プログラム・セクションの概要(続き)


図 7-5 シンボルの相互参照


図 7-6 シンボル一覧 (値順)


図 7-7 イメージの概要


図 7-8 リンク処理の統計情報


以下の説明は,上記の Linker マップの例の中の数字のついた項目に対応しています。

  1. Object and Image Synopsis。 Alpha システムで Object Module Synopsis というタイトルが付いていたセクションは,I64 システムでは Object and Image Synopsis というタイトルに変更されました。

  2. Module/Image。 Alpha システムで Module Name というタイトルが付いていた欄は, I64 システムでは Module/Image というタイトルに変更されました。

  3. Attributes。 4 つの欄で構成される Attributes というタイトルが付いた新しい情報が追加されました。最初の欄には,モジュールの検索が選択型 (selective) かどうかが示されます。選択型の場合には,「Sel」が表示されます。選択型でない場合には,この欄は空白です。
    2 番目の欄は,モジュールに呼び出しリンケージ情報が含まれているかどうかが示されます。モジュールにリンケージ情報が含まれている場合には,「Lkg」が表示されます。リンケージ情報が含まれていない場合には,この欄は空白です。
    3 番目の欄には,モジュールが縮小浮動小数点モデルでコンパイルされたかどうかが示されます。縮小浮動小数点モデルでコンパイルされた場合には,「RFP」が表示されます。縮小浮動小数点モデルでコンパイルされなかった場合には,この欄は空白です。共有イメージの場合には,この欄は表示されません。
    4 番目の欄には,全体のプログラム・モードが表示されます。この欄では,Key for Attributes セクションにリストされているいくつかの省略文字が使われます。次に示す例では,Key for Attributes セクションにリストされる可能性があるすべての省略文字を示します。ただし,この例では Creation Date and Creator 欄は省略されています。 Object and Image Synopsis 全体については,以下のマップの例を参照してください。


    Module/Image    File           Ident             Attributes        Bytes 
    ------------    ----           -----          ----------------     ----- 
    NONE                            V1.0               Lkg               568   
                    DISK1:[JOE]NONE.OBJ;1 
    DNORM_CASE                                         Lkg RFP Dnrm      504   
                    DISK1:[JOE]DENORM_W.OBJ;1 
    FAST _CASE                                         Lkg RFP Fast      504   
                    DISK1:[JOE]FAST_W.OBJ;1 
    NEPCT_CASE                                         Lkg RFP Inex      504 
                    DISK1:[JOE]INEXACT_W.OBJ;1 
    SPCL _CASE                                         Lkg RFP Spcl      504 
                    DISK1:[JOE]SPECIAL_W.OBJ;1 
    UNDER_CASE                                         Lkg RFP Undr      504 
                    DISK1:[JOE]UNDERFLOW_W.OBJ;1 
    DG_FL_CASE                                         Lkg RFP VXfl      504 
                    DISK1:[JOE]VAXFLOAT_W.OBJ;1 
    DECC$SHR                        V8.2-00            Lkg                 0 
                    RESD$:[SYSLIB]DECC$SHR.EXE;1 
    SYS$PUBLIC_VECTORS              X-2            Sel Lkg                 0 
                    RESD$:[SYSLIB]SYS$PUBLIC_VECTORS.EXE;1 
     
     
                     Key for Attributes 
                    +------------------------------------------+ 
                    ! Sel  - Module was selectively searched   ! 
                    ! Lkg  - Contains call linkage information ! 
                    ! RFP  - Conforms to the reduced FP model  ! 
                    ! VXfl - VAX Float FP model                ! 
                    ! Dnrm - Denormal IEEE FP model            ! 
                    ! Fast - Fast IEEE FP model                ! 
                    ! Inex - Inexact IEEE FP model             ! 
                    ! Undr - Underflow-to-zero IEEE FP model   ! 
                    ! Spcl - Special FP model                  ! 
                    +------------------------------------------+ 
     
     
    

  4. Cluster Synopsis。 Alpha システムで Image Section Synopsis というタイトルが付いていたセクションは,I64 システムでは 2 つのセクション,Cluster Synopsis と Image Segment Synopsis に分割されました。 Cluster Synopsis セクションには,イメージ・セクションが含まれなくなりました。これは,I64 システムでは セグメント と呼ばれます。また,共有イメージのイメージ・セクションも表示されなくなりました。これは,VAX マップ・ファイルでは,ベース付きの共有イメージを持つ可能性がある場合には,必ず表示されていました (ベース付きの共有イメージは, Alpha システムや I64 システムでは許されていません)。

  5. Cluster。この欄には,Linker によって作成され,使用されるクラスタが,処理された順番で表示されます。

  6. Match, Majorid, Minorid。この欄には,バージョン基準が表示されます (存在する場合)。

  7. Image Segment Synopsis。このセクションには,作成されたイメージ・セグメントが表示されます。ここには,OpenVMS Alpha の Image Section Synopsis の残りの欄も含まれます。最初の欄 Seg # には,イメージ・セグメントの番号が表示されます。この番号はそのセグメントに適用される再配置で使用されます (再配置でのセグメント番号の表示については,イメージの解析データを参照してください)。 Alpha システムで Protection and Paging というタイトルが付いていたセクションは, I64 システムでは 2 つの欄,Protection と Attributes に分割されました。 Global Section Name 欄は廃止されました。

  8. モジュールが /TIE でコンパイルされ,イメージが /NONATIVE だけでリンクされており,イメージに非標準の署名が含まれている場合には,(SHORT で示される) ショート・データ・セグメントの直後に非標準の署名を含む独立したセグメントが表示されます。

  9. セクション属性 PIC と NOPIC は I64 システムでは有効な属性ではないので,削除されました。

  10. Linker は,共通シンボル,または緩やかな refdef シンボルに記憶域を割り当てます。これは Module/Image ヘッダの下で <Linker> とマークされます。セクション名は常にシンボルの後に付けられます。 (このモジュールは,デフォルトのスイッチ /EXTERN=RELAXED でコンパイルされており,変数 ITMLST,FILLEN, FILLIM,および IOSB は緩やかな refdef シンボルです。)

  11. Linker は,属性 OVR,REL,および GBL を持つセクションの初期化を行なうモジュールがあれば,それに "Initializing Contribution" を付けて表示します。初期化を行なうモジュールを複数指定したエラーの場合には,Linker は複数のセクションに "Initializing Contribution" を付けるので,初期化を行うモジュールが複数あるインスタンスのデバッグが容易になります。

  12. Linker は,トランポリン (遠くへ分岐する命令) または別のセグメント (イメージの中または外) へ分岐するコードを含むコード・セグメントへのコントリビューションにマークを付加します。その場合には,Module/Image ヘッダの下に <Linker> を表示します。

  13. 外部シンボルの表示が Alpha マップとは異なる表示になりました。 Alpha システムでは,再配置可能と外部を意味した,プレフィックスまたはサフィックス RX が使われましたが,I64 システムの Linker では外部シンボルが再配置可能かどうかがわからないため,プレフィックスまたはサフィックスは X (外部) に変更されました。

  14. Keys for Special Characters。特殊文字のキーが,次のように変更されました。

  15. Quota Usage。 I64 Linker によって使われる制限値を追跡できるように Link Run Statistics セクションに,Quota Usage というタイトルの新しいセクションが追加されました。制限値の問題が発生した場合,Linker はそれを回避できます。ただし,その場合には Linker は Quota Usage セクションに特殊なメッセージを表示し,性能を向上させるための最適な制限値の増加方法を示します。例を次に示します。


    Performance of this link operation could be improved by increasing quotas 
       Quota related to status return:  %SYSTEM-SECTBLFUL, process or global 
       section table is full 
    2688 extra file I/O operations performed due to current process quota(s) 
    36 performed on object files; 2652 performed on library files 
     
    


前へ 次へ 目次 索引