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
#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

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
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)

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?