非 XPLINK アプリケーションにおける障害ルーチンの名前の検索方法

システム・ダンプをとる場合には、保管域チェーンに従い、障害ルーチンの名前と、IBM® がそのルーチンを所有しているかどうかを調べてください。エラーのあるルーチンの名前 (1 次エントリー・ポイント名) を検索する手順を次に示します。

  1. 現行保管域と関連したエントリー・ポイントを見つけます。変位 X'10' (10 進数 16) の以前の保管域にあるエントリー・ポイント・アドレス (EPA) が、このエントリー・ポイント・アドレスを指します。
  2. 次の 4 つの中からエントリー・ポイント・タイプを決定します。
    エントリー・ポイント・タイプ 条件
    Language Environment® 準拠 エントリー・ポイント + 4 が X'00C3C5C5'
    Language Environment 準拠 OPLINK エントリー・ポイント + 4 が X'01C3C5C5'。OPLINK リンケージ規約が適用されます。
    C/C++ エントリー・ポイント + 5 が X'CE'
    非準拠 エントリー・ポイントが上記のいずれでもない。非準拠エントリー・ポイントは、名前がルーチンの始めにあるというリンケージ規約に従うルーチ ンのためのものです。このルーチン名の前後での分岐を行うための命令は X'47F0Fxxx' です。

    Language Environment 準拠および C/C++ エントリー・ポイントをもつルーチンの場合には、Language Environment がプログラ ム・プロローグ域 (PPA) を提供します。PPA1 には、エントリー・ポイント名と PPA2 のアドレスがあり、PPA2 には、リリース・レベル・キーワードがあるタイム・スタンプを指すポインターと、ルーチンの 1 次エントリー・ポイントと関連付けられた PPA1 を指すポインターがありま す。

    • エラーのあるルーチンのエントリー・ポイント・タイプが Language Environment 準拠である場合には、ステップ 3 に進んでください。
    • エントリー・ポイント・タイプが C/C++ である場合には、ステップ 5 に進ん でください。
    • エントリー・ポイント・タイプが非準拠である場合には、ステップ 6 に進ん でください。
  3. エントリー・ポイント・タイプが Language Environment 準拠である場合には、Language Environment または COBOL プログラムの エントリー・ポイント名を見つけてください。
    1. エントリー・ポイントからのオフセット X'C' を使用して、PPA1 のアドレスを見つけます。
    2. PPA1 では、名前の長さまでのオフセットを見つけます。OPLINK の場合には、オフセットに 2 を乗じて、名前の長さまでの実際のオフ セットを見つけます。
      注: Enterprise COBOL V5.1 以降のリリースでは OPLINK を使用します。
    3. このオフセットを PPA1 アドレスに加えて、名前の長さを含むハーフワー ドとそのあとに続くエントリー・ポイント名を見つけます。

      エントリー・ポイント名は、システム・ダンプの右側のマージンに、変換されたバージョ ンと共に EBCDIC で表示されます。

  4. Language Environment または COBOL プログラム名を見つけます。
    1. PPA1 の先頭からの X'04' で PPA2 のアドレスを見つけます。Enterprise COBOL V5.1 またはそれ以降のリリースで、PPA1 の開始から X'04' で符号付きオフセットを見つけて、このオフセットをエントリー・ポイント・アドレスに追加し、PPA2 のアドレスを取得してください。
    2. PPA2 の X'10' でコンパイル単位の 1 次エントリー・ポイントのアドレスを見つけます。Enterprise COBOL V5.1 以降のリリースでは、PPA2 の X'10' で符号付きオフセットを見つけて、このオフセットを PPA2 のアドレスに追加し、コンパイル単位で 1 次エントリー・ポイントを取得してください。
    3. 上記の 1 次エントリー・ポイントと関連付けられたエントリー・ポイント名を見つけます。1 次エントリー・ポイント名はルーチン名です。
    以下の項目の詳細については、「z/OS Language Environment Vendor Interfaces 」を参照してください。
    • Language Environment 準拠の非 XPLINK 用の PPA1 および PPA2。
    • XPLINK Language Environment 準拠の PPA1 および XPLINK PPA1 オプション域フィールド。
    • 非 XPLINK Language Environment PPA2。
    • XPLINK の Language Environment PPA2: コンパイル単位ブロック。
    • PPA2 タイム・スタンプおよびバージョン情報。
  5. エントリー・ポイント・タイプが C/C++ である場合には、C/C++ ルーチン名を見 つけます。
    1. エントリー・ポイント + 4 を使用して、PPA1 のエントリー・ポイント名までのオフセットを見つけます (図 1 を参照)。
    2. このオフセットを使用して、名前の長さバイトとそのあとに続くルー チン名を見つけます。

      このルーチン名は、右側のマージンに、変換されたバージョンと共に EBCDIC で 表示されます。

    図 1. C 準拠の PPA1
    PPA1 トレース・テーブル形式
  6. エントリー・ポイント・タイプが非準拠である場合には、PL/I ルーチン名を見つけます。
    1. エントリー・ポイントの直前にある 1 バイト長のエリアを見つけます。これがルーチン名の長さです。
    2. 名前の長さに指定されたバイト数分戻ります。これがルーチン名の始めです。
  7. エントリー・ポイント・タイプが非準拠である場合には、PL/I 以外のルーチンの名前を 見つけます。
    1. エントリー・ポイント + 4 をエントリー・ポイント名の位置として使用します。
    2. 次のバイトを名前の長さとして使用します。名前は、名前の長さバイトの直後に続きます。エントリー・ポイント名は、右側のマージンに、変換されたバージョンと共に EBCDIC で 表示されます。

    図 2 は、非準拠エントリー・ポイント・タイプを示しています。 表示される非準拠エントリー・ポイントは、必ずしもリンケージ規約に従うとは限りません。これらの保管域におけるデータの位置は、予測できないことがあります。

    図 2. 非準拠エントリー・ポイント・タイプとサンプル・ダンプ
      020000  =  47F0F00C  06D3C9E2  E3C9E300  90ECD00C  E0B |.00..LISTIT.....|
      020010  =  18CF41B0  C29850BD  000850DB  000418DB      |....Bq&...&.....|
      020020  =  4510C052  E3E8D7D3  C9D54040  01020034      |....TYPLIN  ....|
      020030  =  C200001E  C5D5E3C5  D940D5E4  D4C2C5D9      |B...ENTER NUMBER|
      020040  =  40D6C640  D9C5C3D6  D9C4E240  D6D940C1      | OF RECORDS OR A|
      020050  =  D3D30ACA  00020058  4510C06C  E6C1C9E3      |LL.........%WAIT|
      020060  =  D9C44040  010202F0  E4000000  0ACA0002      |RD  ...0U.......|