*参照元 [#u6ede88a] #backlinks *説明 [#abb8e537] -パス: [[linux-2.6.25/include/asm-generic/vmlinux.lds.h]] -__bug_table セクションを定義するリンカスクリプトである。 -まだ仕組みがよくわかっていないです。 **参考 [#c5728bb8] -以下のシンボルも同時に定義される。 --__start___bug_table: __bug_table セクションの開始アドレス。 --__stop___bug_table: __bug_table セクションの末尾アドレス + 1。 *実装 [#df597568] #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 のアドレスを持つ。 } *コメント [#v86b412b]