Re: [BUG] Build error for 4.15-rc3 kernel caused by patch "kbuild: Add a cache for generated variables"

From: Yang Shi
Date: Mon Dec 18 2017 - 12:19:41 EST




On 12/18/17 7:50 AM, Masahiro Yamada wrote:
2017-12-18 23:56 GMT+09:00 Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>:
2017-12-17 7:35 GMT+09:00 Yang Shi <yang.s@xxxxxxxxxxxxxxx>:
Hi folks,

I just upgraded gcc to 6.4 on my centos 7 machine by Arnd's suggestion. But,
I ran into the below compile error with 4.15-rc3 kernel:

In file included from ./include/uapi/linux/uuid.h:21:0,
from ./include/linux/uuid.h:19,
from ./include/linux/mod_devicetable.h:12,
from scripts/mod/devicetable-offsets.c:2:
./include/linux/string.h:8:20: fatal error: stdarg.h: No such file or
directory
#include <stdarg.h>

I bisected to commit 3298b690b21cdbe6b2ae8076d9147027f396f2b1 ("kbuild: Add
a cache for generated variables"). Once I revert this commit, kernel build
is fine.

gcc 4.8.5 is fine to build kernel with this commit.

I'm not quite sure if this is a bug or my gcc install is skewed although it
can build kernel without that commit since that commit might exacerbate the
case.

Any hint is appreciated


Today, I was also hit with the same error
when I was compiling linux-next.
I am not so sure why this error happens, but
"make clean" will probably fix the problem.

You need to do "make clean" to blow .cache.mk
when you upgrade your compiler.
This is nasty, though...



I got it.

The following line in the top-level Makefile.

NOSTDINC_FLAGS += -nostdinc -isystem $(call shell-cached,$(CC)
-print-file-name=include)


If the stale result of -print-file-name is stored in the cache file,
the compiler fails to find <stdarg.h>

Thanks for figuring it out.

"make clean" does help. I'm supposed it is an interim approach, right?

Regards,
Yang