参照元†
- __bug_table セクションを定義するリンカスクリプトである。
- 以下のシンボルも同時に定義される。
- __start___bug_table: __bug_table セクションの開始アドレス。
- __stop___bug_table: __bug_table セクションの末尾アドレス + 1。
#ifndef LOAD_OFFSET
#define LOAD_OFFSET 0
#endif
- LOAD_OFFSET: 特に定義されなければ 0 である。
(...略...)
#define BUG_TABLE \
. = ALIGN(8); \
- 現在のカウンタ値(アドレス?)を 8バイト境界に
アライメントした値にする。
__bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \
- 出力セクション名: __bug_table
- もし LOAD_OFFSET が定義されていれば、アライメントのずれた位置に
__bug_table をロードすることが出来る?
- AT: セクションの LMA(ロードアドレス)を
AT に指定した VMA(仮想アドレス)と等しくする。
- LMA: セクションがロードされるときのアドレスである。
- VMA: コードを実行するときのセクションのアドレスである。
- ADDR: セクションの絶対アドレス(VMA、仮想アドレス)を返す。
- LOAD_OFFSET: 特に定義されなければ 0 である。
__start___bug_table = .; \
- シンボル __start__bug_table に現在のカウンタ値を代入する。
- このシンボルは __bug_table の先頭アドレスを持つ。
*(__bug_table) \
- 全入力オブジェクトファイルの __bug_table セクションを
出力ファイルの __bug_table セクションに出力する。
__stop___bug_table = .; \
- シンボル __stop__bug_table に現在のカウンタ値を代入する。
- このシンボルは __bug_table 末尾 + 1 のアドレスを持つ。
}
コメント†