*参照元 [#w870d165] #backlinks *説明 [#y80720bb] -パス: [[linux-2.6.33/include/asm-generic/bug.h]] -指定した条件が成立したときに、バグ警告を表示させるマクロである。 **引数 [#j8b3733b] -condition --真理値として評価されうる式を指定する。 式の結果が真と評価されれば BUG() が実行される。 **返り値 [#z4a9c643] -なし **参考 [#s94f9480] -独自の BUG_ON を定義しているアーキテクチャ $ grep -r HAVE_ARCH_BUG_ON . ./arch/mips/include/asm/bug.h:#define HAVE_ARCH_BUG_ON ./arch/powerpc/include/asm/bug.h:#define HAVE_ARCH_BUG_ON *実装 [#m0b933e3] ***CONFIG_BUG が定義されている場合 [#v0461832] #ifdef CONFIG_BUG (...略...) #ifndef HAVE_ARCH_BUG_ON -アーキテクチャ固有の BUG_ON がなければ共通の BUG_ON を使う。 --今のところ PowerPC と MIPS が独自の BUG_ON を定義している。 #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while(0) -条件 condition が成立していたらバグ警告する。 --[[linux-2.6.33/unlikely()]] --[[linux-2.6.33/BUG()]] #endif (...略...) ***CONFIG_BUG が定義されていない場合 [#y01cc5da] #else /* !CONFIG_BUG */ (...略...) #ifndef HAVE_ARCH_BUG_ON #define BUG_ON(condition) do { if (condition) ; } while(0) -condition を一度評価する以外は何もしない。 --BUG_ON() を #define BUG_ON(condition) do { } while(0) としても良いように思えるが、condition に指定された式が副作用を持つ式 (例: i-- など)であると、CONFIG_BUG の有無で動作が変わってしまう。 このため condition 式の評価だけは行う。 (...略...) #endif *コメント [#p27db5f3]