x86_64 Linux ホストで 32 ビット (i386) Linux カーネルを構築しています。ホストとターゲットの両方のバージョンは 2.6.9 です。Linuxソースツリーから次のことを行っています:
make ARCH=i386 CFLAGS='-m32 -Iinclude/asm/mach-default' AFLAGS='--32' menuconfig
make ARCH=i386 CFLAGS='-m32 -Iinclude/asm/mach-default' AFLAGS='-m32 -Iinclude/asm/mach-default'
2回目のmakeから次のエラーが発生します。
AS arch/i386/kernel/entry.o
In file included from include/linux/bitops.h:4,
from include/asm/cpufeature.h:10,
from include/asm/processor.h:16,
from include/asm/thread_info.h:16,
from arch/i386/kernel/entry.S:45:
include/asm/bitops.h:42: detected recursion whilst expanding macro "inline"
bitops.h の 42 行目は次のようになっています。
static inline void set_bit(int nr, volatile unsigned long * addr)
gcc はインライン関数をサポートしているのに、なぜこの「インライン」がマクロとして扱われたのか、「インライン」を展開する再帰がなぜ存在するのかがわかりません。
私のgccバージョンは次のとおりです。
gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-11)
どんな洞察も高く評価されます。