0

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)

どんな洞察も高く評価されます。

4

0 に答える 0