*参照元 [#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]