2019年10月19日土曜日

XOUTフォーマット 4

つづき

シンボルテーブル 12 byte

参照されるシンボルの情報(x_sym) の配列。

 x_sy_sg (1 byte)

 シンボルが含まれるセグメント番号(セグメント情報のインデックス)
 255の場合は、即値か外部参照を示している。

 x_sy_fl (1byte)

 シンボルのタイプ

 1 - ローカルシンボル (デバッグ用)
 2 - 未定義の外部シンボル (参照先が外部)
 3 - グルーバルシンボル (外部から参照可能なシンボル)
 4 - セグメント名

 x_sy_val (2 byte)
 
 シンボル値。セグメント番号とタイプによって、値の意味が変わる。
 
    セグメント番号 : 0-127, タイプが1, 3, 4の場合は、セグメント内でのオフセットアドレス
 セグメント番号 : 255, タイプ : 1 の場合は、16bit即値
 セグメント番号 : 255, タイプ : 2, 値 : 0 の場合は外部シンボル
 セグメント番号 : 255, タイプ : 2, 値 : 0 以外の場合は、BSSに確保するメモリースペース
 

 x_sy_name (8 byte)

 8文字のシンボル名
 8文字に満たない場合は、0で埋められる。8文字の場合は、0で終端されないので注意。

補足
コンスタントプール内のシンボルはローカルで、必ずしもシンボルテーブルに登録されない。
引数の文字列などはラベルがないので、リロケーション情報があるだけ。

セグメント番号がBSSを指すのは、明示的にBSSセクションを指定した場合のみらしい。
初期値のないグローバル変数は、セグメント番号 : 255, タイプ : 2 になっており、
複数のオブジェクトで定義されている場合は、その中から最大値がBSSに確保される。

0 件のコメント:

コメントを投稿