Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, プログラミング・ガイド

STATIC 変数の検出

RENT オプションを指定してコードをコンパイルした場合、 静的変数は、現行のロード・モジュールの WSA (書き込み可能静的区域) に配置されます。 WSA 内での変数のオフセットは、MAP オプションを指定した出力から検出することができ、WSA は CAA という言語環境プログラム制御ブロックの中に保持されます。 WSA の値は、言語環境プログラム・ダンプにもリストされます。

ただし、NORENT オプションを指定してコードをコンパイルした場合、EXTERNAL STATIC は通常どおり (リンカー・リストおよびコンパイラーの MAP オプションの出力を使用して) 検出されます。 INTERNAL STATIC は、言語環境プログラム・ダンプの一部としてダンプされます (PLIDUMP が B オプションを指定して呼び出された場合)。

旧 PL/I コンパイラーと異なり、STATIC のアドレスは、いずれか 1 つのレジスターを占有することは ありません。

例えば、上記のプログラムで、変数を STATIC に変更したとします。

Compiler Source
  Line.File
     2.0      test: proc options(main);
     3.0
     4.0        dcl a fixed bin(31) static;
     5.0        dcl b fixed bin(31) static;
     6.0
     7.0        on error
     8.0          begin;
     9.0            call plidump('TFBC');
    10.0          end;
    11.0
    12.0        a = 0;
    13.0        b = 29;
    14.0        b = 17 / a;

NORENT オプションを指定してコンパイルすると、このプログラムに対するコンパイラー MAP オプションの結果は、実際には右側にもう 1 つ列 があること、列の間のスペースはもっと離れていることを除き、以下のようになります。

* * * * *   S T O R A G E   O F F S E T   L I S T I N G   * * * * *
 IDENTIFIER DEFINITION ATTRIBUTES

 A          1-0:4      Class = static,  Location = 0 : 0x0 + CSECT ***TEST2
 B          1-0:5      Class = static,  Location = 4 : 0x4 + CSECT ***TEST2

したがって、A はコンパイル単位 TEST の静的 CSECT の中の 16 進オフセット 00 の位置にあり、B は 16 進オフセット 04 の位置にあることになります。

このプログラムでは PLIDUMP が B オプションを指定して呼び出されているため、 現行の呼び出しチェーン内のそれぞれのコンパイルごとに、静的ストレージ の 16 進ダンプが含まれています。 これは、以下のようになります(これも、右側の列が 省略されています)。

Static for procedure TEST    Timestamp: 2004.08.12
      +000000 0FC00AA0  00000000 0000001D 0FC00DC8 0FC00AC0
      +000020 0FC00AC0  0FC00AA8 00444042 00A3AE01 0FC009C8
      +000040 0FC00AE0  6E3BFFE0 00000000 00000000 00000000
      +000060 0FC00B00  00000000 00000000 00000000 00000000
      +000000 0AD963C8  10000000 0AD96188 00000000 00000000

したがって、16 進オフセット 00 にある A は (予想通りの) 16 進値 00000000 を持ち、16 進オフセット 04 にある B は (これも予想通りの) 16 進値 0000001D、つまり 10 進値 29 を持つことになります。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)