マッピング・レイアウトの定義

注: マッピング・レイアウト DTD およびサンプル XML マッピング は、<product install directory>eclipsepluginscom.ibm.debug.memorymap_<version>sample にあります。

以下の例は、次の z/OS 上の C 言語構造体のレイアウトを定義しています。

typedef struct {
    char char_val;
    unsigned short ushort_val;
    short short_val;
    unsigned long ulong_val;
    long long_val;
    char string_val[32];
} _test;

レイアウト XML ファイルの作成

以下に示すように、XML ファイル・フォーマットは、layout.dtd 文書タイプ定義 (DTD) ファイルの中に定義されます。

<?xml version="1.0" encoding="ISO-8859-1"?>
    <!ELEMENT LAYOUT (FIELD)+>
    <!ATTLIST LAYOUT Header CDATA #REQUIRED length CDATA #REQUIRED>
  <!ELEMENT FIELD (FIELD)*>
    <!ATTLIST FIELD
          Header CDATA #REQUIRED
          Type (16_BIT_INT|16_BIT_UINT|16_BIT_HINT|32_BIT_INT|32_BIT_UINT|32_BIT_HINT|32_BIT_FLOAT|64_BIT_INT|64_BIT_FLOAT|CHARACTER|HEX|ASCII|EBCDIC|STRUCTURE|PADDING|BIT|BITMASK|MAP) #REQUIRED
     length CDATA #REQUIRED
          layout CDATA #IMPLIED>

これは、XML レイアウト・ファイルが最初にヘッダー (タイトル) およびレイアウトの全長を指定し、それに続いて、ヘッダー (名前)、長さ、ならびにそのサブエレメントのデフォルト表記を決めるのに使用する基本的なタイプによって記述された、サブエレメント (FIELD) のリストを指定することを意味します。

以下のような特殊なサブエレメント・タイプもあります。

_test 構造体のツリー・ビューを記述していて、このフォーマットに準拠している XML ファイルは次のとおりです。

<?xml version="1.0"?>
<!DOCTYPE LAYOUT SYSTEM "Layout.dtd" >
  <LAYOUT Header = "A Layout" length="17">
  <FIELD Header = "char_val" Type = "CHARACTER" length = "1"
> </FIELD>
  <FIELD Header = "ushort_val" Type = "16_BIT_UINT" length = "2"
> </FIELD>
  <FIELD Header = "short_val" Type = "16_BIT_INT" length = "2"
> </FIELD>
  <FIELD Header = "ulong_val" Type = "32_BIT_UINT" length = "4"
> </FIELD>
  <FIELD Header = "long_val" Type = "32_BIT_INT" length = "4"
> </FIELD>
  <FIELD Header = "string_val" Type = "ASCII" length = "32">
  </FIELD>
</LAYOUT>
注: <!DOCTYPE LAYOUT SYSTEM "Layout.dtd" > 行は、 このファイルの内容を構文解析するのに使用する DTD ファイルを指定します。 レイアウト DTD ファイルが異なるロケーションに置かれている場合は、そのロケーションへの絶対パスを指定する必要があります。

パディング・フィールドの定義

long_val フィールドは無視するが、レイアウトの中に string_val タイプは表示したいと決めた場合、XML ファイルは次のようになります。

  <FIELD Header = "short_val" Type = "16_BIT_INT" length = "2"
> </FIELD>
  <FIELD Header = "ulong_val" Type = "32_BIT_UINT" length = "4"
> </FIELD>
  <FIELD Header = "" Type = "PADDING" length = "4" >
  </FIELD>
  <FIELD Header = "string_val" Type = "ASCII" length = "32">
  </FIELD>

PADDING サブエレメントを定義する所期の目的は、バイト位置合わせ構造体を処理するためです。 しかしそれはまた、レイアウトの中で詳細化する必要のないデータ域をスキップするためにも使用できます。

構造体の定義

以下の XML の一例は、ネストされた構造体をマップするための STRUCTURE フィールドの使用法を示しています。 構造体トップ・エレメントは、関連付けられた値をもちません。 それは、そのサブエレメントを示すために展開できます。 STRUCTURE フィールドの長さは XML レイアウトの合計サイズに加えられますが、インクルードされたフィールド・サイズについては、表示のためだけを意図しています。 例えば、以下の構造体は合計レイアウト・サイズの中の 344 バイトのみを意味します。

<FIELD Header = "MACHINE CHECK LOG OUT AREA" Type = "STRUCTURE"
length = "344" >
    <FIELD  Header="reserved" Type="HEX"
length="16"></FIELD>
    <FIELD Header="FLCSID" Type="HEX"
length="4"></FIELD>
    <FIELD Header="FLCIOFP" Type="HEX"
length="4"></FIELD>
    <FIELD Header="reserved" Type="HEX"
length="20"></FIELD>
    <FIELD Header="FLCESAR" Type="HEX"
length="4"></FIELD>
    <FIELD Header="FLCCTSA" Type="HEX"
length="8"></FIELD>
    <FIELD Header="FLCCCSA" Type="HEX"
length="8"></FIELD>
    <FIELD Header="FLCMCIC" Type="HEX"
length="8"></FIELD>
    <FIELD Header="reserved" Type="HEX"
length="8"></FIELD>
    <FIELD Header="FLCFSA" Type="HEX"
length="4"></FIELD>
    <FIELD Header="reserved" Type="HEX"
length="4"></FIELD>
    <FIELD Header="FLCFLA" Type="HEX"
length="16"></FIELD>
    <FIELD Header="FLCRV110" Type="HEX"
length="16"></FIELD>
    <FIELD Header="FLCARSAV" Type="STRUCTURE"length="64">
        <FIELD Header="AR0" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR1" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR2" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR3" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR4" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR5" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR6" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR7" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR8" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR9" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR10" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR11" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR12" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR13" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR14" Type="HEX"
length="4"></FIELD>
        <FIELD Header="AR15" Type="HEX"
length="4"></FIELD>
    </FIELD>
  <FIELD Header="FLCFPSAV" Type="HEX"
length="32"></FIELD>
  <FIELD Header="" Type="PADDING" length="64"></FIELD>
  <FIELD Header="" Type="PADDING" length="64"></FIELD>
  </FIELD>

ビット・マスク・フィールドの定義

以下の XML の一例は、BITMASK フィールドを記述しているサンプルです。 BITMASK の長さはバイト数で指定されます。 それには、長さがビット数で指定される BIT フィールドのセットが含まれます。 BIT フィールドに対して表示されるオフセットは、BITMASK フィールド内のビット・オフセットです。 ビット・マスク・フィールドの長さは XML レイアウトの合計サイズに加えられるが、個別の BIT フィールド・サイズについては、表示のためだけを意図しています。

<FIELD Header="byte_field" Type="BITMASK"length="2">
  <FIELD Header="hi_byte" Type="BIT"
length="8"></FIELD>
  <FIELD Header="lo_byte" Type="BIT"
length="8"></FIELD>
  </FIELD>

ネストされたレイアウトの定義

MAP フィールド・タイプおよびオプション・レイアウト・フィールドを一緒に使用すれば、以下の z/OS DSA レイアウトの例のように、ネストされたレイアウトを記述できます。

<?xml version="1.0"?>
<!DOCTYPE LAYOUT SYSTEM "Layout.dtd" >
<LAYOUT Header = "DSA" length="72">
<FIELD Header = "FLAGS" Type = "HEX" length =
"2"></FIELD>
<FIELD Header = "junk" Type = "HEX" length =
"2"></FIELD>
<FIELD Header = "Back Chain" Type = "MAP" length =
"4"layout="dsa.xml" ></FIELD>
<FIELD Header = "Forward Chain" Type = "MAP" length ="4"
layout="dsa.xml" ></FIELD>
<FIELD Header = "R14" Type = "HEX" length =
"4"></FIELD>
<FIELD Header = "R15" Type = "HEX" length =
"4"></FIELD>
<FIELD Header = "R0" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R1" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R2" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R3" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R4" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R5" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R6" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R7" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R8" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R9" Type = "HEX" length = "4"></FIELD>
<FIELD Header = "R10" Type = "HEX" length =
"4"></FIELD>
<FIELD Header = "R11" Type = "HEX" length =
"4"></FIELD>
<FIELD Header = "R12" Type = "HEX" length =
"4"></FIELD>
</LAYOUT>

この適格な XML レイアウトは、DSA.XML と呼ばれるファイルに保管されます。 お気付きのように、フィールド 3 および 4 には異なる DSA 構造体を指すポインターが入っているので、2 つのネストされたレイアウト定義を追加することになります。

注: そのレイアウトの実際のストレージ・マッピングが実際に実行されるのは、 再帰的なレイアウト展開を防ぐために、 初めてレイアウト・エレメントを展開するときです。
関連タスク
メモリーのマッピング
「メモリー・レンダリング」ビューのマップ・レイアウトによるメモリーの表示
メモリー・マップのロケーションの設定
式または変数のメモリーのマッピング
レジスターのメモリーのマッピング
「メモリー・レンダリング」ビューでのマップされたメモリーの編集
「メモリー・レンダリング」ビューでのマップされたメモリーの除去
複数のストレージ・マップの追加
ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2004, 2005. All Rights Reserved.