*参照元 [#t9383d9a]
#backlinks

*説明 [#lae723bc]
-パス: [[linux-2.6.33/include/linux/kbuild.h]]

-Kbuild と連携して定数を定義するヘッダファイルを生成するための命令。
--例: asm-offsets.h(x86) の場合
 ファイル生成の流れ: 
   arch/x86/kernel/asm-offsets.c --(Kbuild で実行する cpp)--> 
   arch/x86/kernel/asm-offset.s  --(Kbuild で実行する sed)--> 
   include/generated/asm-offset.h
 ----------
 まず Kbuild の依存関係定義から、
 asm-offsets.c をプリプロセッサで処理する。
 gcc (引数略) -S -o arch/x86/kernel/asm-offsets.s \
   arch/x86/kernel/asm-offsets.c
 すると、
   DEFINE(PAGE_SIZE_asm, PAGE_SIZE)
 は、
   ->PAGE_SIZE_asm $4096 PAGE_SIZE #
 のようなコードになる。
 
 下記のような sed で置換する。
 sed -ne '/^->/{s:->#\(.*\):/* \1 */:; \
 s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
 s:->::; p;}' arch/x86/kernel/asm-offsets.s
 すると、
   ->PAGE_SIZE_asm $4096 PAGE_SIZE #
 は、
   #define PAGE_SIZE_asm 4096 /* PAGE_SIZE # */
 のようなコードになる。


--引数省略しないバージョン
 gcc -Wp,-MD,arch/x86/kernel/.asm-offsets.s.d  \
 -nostdinc -isystem /usr/lib/gcc/i486-linux-gnu/4.3.2/include \
 -I/usr/src/linux-2.6.33/arch/x86/include -Iinclude  \
 -include include/generated/autoconf.h -D__KERNEL__ \
 -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
 -fno-strict-aliasing -fno-common \
 -Werror-implicit-function-declaration \
 -Wno-format-security -fno-delete-null-pointer-checks \
 -Os -m32 -msoft-float -mregparm=3 -freg-struct-return \
 -mpreferred-stack-boundary=2 -march=i686 -mtune=core2 \
 -Wa,-mtune=generic32 -ffreestanding -DCONFIG_AS_CFI=1 \
 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -pipe -Wno-sign-compare \
 -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 \
 -mno-3dnow -fno-stack-protector -fno-omit-frame-pointer \
 -fno-optimize-sibling-calls -Wdeclaration-after-statement \
 -Wno-pointer-sign -fno-strict-overflow   \
 -D"KBUILD_STR(s)=#s" \
 -D"KBUILD_BASENAME=KBUILD_STR(asm_offsets)"  \
 -D"KBUILD_MODNAME=KBUILD_STR(asm_offsets)"  \
 -fverbose-asm \
 -S -o arch/x86/kernel/asm-offsets.s \
 arch/x86/kernel/asm-offsets.c


**引数 [#id8ca000]
-sym
--定義するシンボル名
-sym
-val
--定義する値
--最終的に .h には、
 #define sym    val
のような定義が生成される。
詳細は DEFINE() の説明を参照してください。


**返り値 [#qb422d28]
-なし、関数ではない


**参考 [#e8af904a]
-DEFINE() の他にも下記関数がある。
--[[linux-2.6.33/BLANK()]]
--[[linux-2.6.33/OFFSET()]]
--[[linux-2.6.33/COMMENT()]]


*実装 [#w34dab9e]
 #define DEFINE(sym, val) \
         asm volatile("\n->" #sym " %0 " #val : : "i" (val))


*コメント [#i720f898]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS