Show page source of TAG詳細(その09) #90723

[[PageNavi(SideBar)]] 目次に戻る:[DWARFファイルフォーマット]
= TAG詳細(その09) 配列編 ※array_type、subrange_type、enumeration_type

== 配列 (DW_TAG_array_type)
ということで、配列です。配列は「DW_TAG_array_type」で表現されます。[[BR]]
こいつも、相応のAttributeを持っていてですね、以下となりますです。[[BR]]
|| No. || Attribute名 || 意味 ||
|| 1 || DW_AT_name || (もしソース上で配列に名前を授けられている場合)NULL終りの配列名 ||
|| 2 || DW_AT_ordering || (多次元配列のDIEの場合)[[BR]] 配列要素の並び順を示す値を持ちます。以下参照 ||
|| 3 || DW_AT_type || 配列の要素それぞれの型(のDIEへの参照) ||
|| 4 || DW_AT_bit_stride[[BR]](DW_AT_stride_size) || 配列の各要素のサイズが、その各要素の型が単体で存在した場合のサイズと異なる場合もつAttributeで、[[BR]]配列のそれぞれの要素のビットサイズ(ビット幅)を持ってます。[[BR]] ※DWARF2では、DW_AT_stride_sizeとしてこの内容の値を持っているですが、DWARF3ではDW_AT_bit_strideに変わったらしいです。[[BR]](DWARF3でも)DW_AT_stride_sizeはDW_AT_bit_strideの別名として使われるけど、推奨はしないそーです。 ||
|| 5 || DW_AT_byte_size || 配列型の総和のサイズをByte単位で持ってます。[[BR]] ※なお、コンパイル時に固定的に配列サイズを決定できるようなケースでは、配列の要素のサイズと要素数のかけ算でもサイズを求めることができます、[[BR]]  って注釈あるけど、ま、これはあたりまーえね。 ||
|| 6 || DW_AT_allocated || ★後日作成★ ||
|| 7 || DW_AT_associated || ★後日書くよ★ ||
|| 8 || DW_AT_data_location || ★後日きっと書くってば★ ||
|| 9 || DW_AT_start_scope || この基本型が有効になるのが、DW_TAG_base_typeのスコープとなるTAG(一般に、親TAG)のDW_AT_low_pcからでなく、途中から始まる場合、有効となる最初のコードアドレスです。[[BR]]これは「[TAG詳細(その06)] 変数/関数の引数/定数編」を参照です。 ||
[[BR]]

なお、配列の次元は、「DW_TAG_subrange_type」「DW_TAG_enumeration_type」で示されます。[[BR]]
こいつらのTAGは、配列のDIE(DW_TAG_array_type)の子分DIEとなり、んで、ソース上の次元の表示通りの順番で並べられるです。[[BR]]
(つまり、一番左に現れる次元(多分配列表記での![閉じカッコ!]の左から1つめ、という意味)が最初で、左から2番目の次元が次で。。。の順)[[BR]]
 ※注釈: ”複数次元配列”という概念のない、C言語などでは、以下の様な配列の配列が複数次元配列として扱われますです。[[BR]]
{{{
  int array[5][10];
}}}

[[BR]]

=== (No.2) DW_AT_orderingの値
このAttributeは、多次元配列においての、各次元の順番を示すモンです。[[BR]]
この値は、以下の表の2つのうちのどっちかになります。[[BR]]
|| 名称 || Value || 意味 ||
|| DW_ORD_col_major || 0x00 || 列優先(つまり、一般に右の要素から順。C言語の標準はこれですね) ||
|| DW_ORD_row_major || 0x01 || 行優先(つまり、左の要素から。C言語の標準とは逆の並び) ||
なお、多次元配列なのにこのAttributeが存在しなかったら、そのCompilation Unit(オブジェクトファイル)のTAG内のDW_AT_languageで指定されるプログラミング言語の「標準的な並び」と仮定されることになってます。[[BR]]
また、一次元配列なのにこのAttributeが存在してしまったら、そいつは単なるおまけです。無視してOK(と原文にも明記しているんです)[[BR]]

[[BR]]
(2013/09/16 作成中でごんす。)

[[PageNavi(SideBar)]] 目次に戻る:[DWARFファイルフォーマット]