マップ・ファイルについて
このトピックでは、マップ・ファイルとそのフォーマットについて説明します。
バインダー・マップ・ファイルは、アドレス順フォーマットのシンボル・マップです。 マップ・ファイルにリストされる各シンボルには、ストレージ・クラス (CL) とそれに関連付けられたタイプ (TY) があります。
ストレージ・クラスは、 syms.h ファイルに定義されている XMC_TY 変数に対応します。 各ストレージ・クラスは、以下のいずれかのセクション・タイプに属します。
- .text
- 読み取り専用データ (命令) が入っています。 このセクションにリストされているアドレスは、 .text セクションの先頭を起点として使用します。 .text セクションには、以下のいずれかのストレージ・クラス (
CL) 値を含めることができます。- DB
- デバッグ・テーブル。 読み取り専用データと同じ特性を持つセクションのクラスを識別します。
- GL
- グルー・コード プログラム・コードと同じ特性を持つセクションを識別します。 このタイプのセクションには、別のモジュール内のルーチンとのインターフェースとなるコードがあります。 インターフェース・コード要件の一部は、呼び出し全体で目次データ構造 (TOC) のアドレス可能度を維持することです。
- 購買要求書
- プログラム・コード。 モジュールの実行可能命令を提供するセクションを識別します。
- R0
- 読み取り専用データ。 プログラムの実行中に変更されない定数を含むセクションを識別します。
- TB
- 将来のために予約されています。
- TI
- 将来のために予約されています。
- XO
- 拡張操作コード。 疑似マシン・インストラクションとして扱われるコードのセクションを識別します。
- .data
- 読み取り/書き込みで初期化されたデータを含みます。 このセクションにリストされているアドレスは、 .data セクションの先頭を起点として使用します。 .data セクションには、以下のいずれかのストレージ・クラス (
CL) 値タイプを含めることができます。- DS
- 記述子。 関数記述子を識別します。 この情報は、C や Fortranなどの言語で関数ポインターを記述するために使用されます。
- RW
- 読み取り/書き込みデータ。 プログラムの実行中に変更が必要であることが分かっているデータが入っているセクションを識別します。
- SV
- SVC。 監視呼び出しとして扱われるコードのセクションを識別します。
- T0
- TOC アンカー。 事前定義 TOC シンボルによってのみ使用されます。 TOC ヘッダーによってのみ使用される TOC 特殊シンボルを識別します。
- TC
- TOC エントリー。 TOC に常駐するアドレス・データを識別します。
- TD
- TOC データ項目。 TOC に常駐するデータを識別します。
- UA
- 分類されていません。 不明なストレージ・クラスのデータを含むデータを識別します。
- .bss
- 初期化されていない読み取り/書き込みデータが入っています。 このセクションにリストされているアドレスは、 .data セクションの先頭を起点として使用します。 .bss セクションには、以下のいずれかのストレージ・クラス (
CL) 値が含まれます。- BS
- BSS クラス。 初期化されていないデータを含むセクションを識別します。
- UC
- 名前なし Fortran 共通。 読み取り/書き込みデータを含むセクションを識別します。
タイプは、 syms.h ファイルに定義されている XTY_TY 変数に対応します。 タイプ (TY) 以下のいずれかの値になります。
| 項目 | 説明 |
|---|---|
| ER | 外部参照 |
| LD | ラベル定義 |
| SD | セクション定義 |
| CM | BSS 共通定義 |
以下は、デモンストレーション・カーネル・エクステンションのマップ・ファイルです。 このファイルは、 ld コマンドの -bmap:demokext.map オプションのために作成されました。
1 ADDRESS MAP FOR demokext SOURCE-FILE(OBJECT) or
2 *IE ADDRESS LENGTH AL CL TY Sym# NAME IMPORT-FILE{SHARED-OBJECT}
3 --- -------- ------ -- -- -- ----- --------------------- ---------------------------
4 I ER S1 _system_configuration /lib/syscalls.exp{/unix}
5 I ER S2 fp_open /lib/kernex.exp{/unix}
6 I ER S3 fp_close /lib/kernex.exp{/unix}
7 I ER S4 fp_write /lib/kernex.exp{/unix}
8 I ER S5 sprintf /lib/kernex.exp{/unix}
9 00000000 000360 2 PR SD S6 <> demokext.c(demokext.o)
10 00000000 PR LD S7 .demokext
11 00000210 PR LD S8 .close_log
12 00000264 PR LD S9 .write_log
13 000002F4 PR LD S10 .open_log
14 00000360 000108 5 PR SD S11 .strcpy strcpy.s(/usr/lib/libcsys.a[strcpy.o])
15 00000468 000028 2 GL SD S12 <.sprintf> glink.s(/usr/lib/glink.o)
16 00000468 GL LD S13 .sprintf
17 00000490 000028 2 GL SD S14 <.fp_close> glink.s(/usr/lib/glink.o)
18 00000490 GL LD S15 .fp_close
19 000004C0 0000F8 5 PR SD S16 .strlen strlen.s(/usr/lib/libcsys.a[strlen.o])
20 000005B8 000028 2 GL SD S17 <.fp_write> glink.s(/usr/lib/glink.o)
21 000005B8 GL LD S18 .fp_write
22 000005E0 000028 2 GL SD S19 <.fp_open> glink.s(/usr/lib/glink.o)
23 000005E0 GL LD S20 .fp_open
24 00000000 0000F9 3 RW SD S21 <_$STATIC> demokext.c(demokext.o)
25 E 000000FC 000004 2 RW SD S22 demokext_j demokext.c(demokext.o)
26 * 00000100 00000C 2 DS SD S23 demokext demokext.c(demokext.o)
27 0000010C 000000 2 T0 SD S24 <TOC>
28 0000010C 000004 2 TC SD S25 <_$STATIC>
29 00000110 000004 2 TC SD S26 <_system_configuration>
30 00000114 000004 2 TC SD S27 <demokext_j>
31 00000118 000004 2 TC SD S28 <sprintf>
32 0000011C 000004 2 TC SD S29 <fp_close>
33 00000120 000004 2 TC SD S30 <fp_write>
34 00000124 000004 2 TC SD S31 <fp_open>上記のマップ・ファイルでは、 .data セクションは 24 行目のステートメントから始まります。
24 00000000 0000F9 3 RW SD S21 <_$STATIC> demokext.c(demokext.o)TOC (目次) は、27 行目のステートメントから始まります。
27 0000010C 000000 2 T0 SD S24 <TOC>