Messages in this thread | | | From | Nick Desaulniers <> | Date | Mon, 16 Nov 2020 11:31:13 -0800 | Subject | Re: [PATCH] compiler.h: Fix barrier_data() on clang |
| |
On Mon, Nov 16, 2020 at 9:47 AM Andreas Schwab <schwab@linux-m68k.org> wrote: > > On Okt 14 2020, Arvind Sankar wrote: > > > Commit > > 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h mutually exclusive") > > > > neglected to copy barrier_data() from compiler-gcc.h into > > compiler-clang.h. The definition in compiler-gcc.h was really to work > > around clang's more aggressive optimization, so this broke > > barrier_data() on clang, and consequently memzero_explicit() as well. > > > > For example, this results in at least the memzero_explicit() call in > > lib/crypto/sha256.c:sha256_transform() being optimized away by clang. > > > > Fix this by moving the definition of barrier_data() into compiler.h. > > > > Also move the gcc/clang definition of barrier() into compiler.h, > > __memory_barrier() is icc-specific (and barrier() is already defined > > using it in compiler-intel.h) and doesn't belong in compiler.h. > > > > Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu> > > Fixes: 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h mutually exclusive") > > This breaks build on riscv: > > CC [M] drivers/net/ethernet/emulex/benet/be_main.o > In file included from ./include/vdso/processor.h:10, > from ./arch/riscv/include/asm/processor.h:11, > from ./include/linux/prefetch.h:15, > from drivers/net/ethernet/emulex/benet/be_main.c:14: > ./arch/riscv/include/asm/vdso/processor.h: In function 'cpu_relax': > ./arch/riscv/include/asm/vdso/processor.h:14:2: error: implicit declaration of function 'barrier' [-Werror=implicit-function-declaration] > 14 | barrier(); > | ^~~~~~~ > cc1: some warnings being treated as errors > make[5]: *** [scripts/Makefile.build:283: drivers/net/ethernet/emulex/benet/be_main.o] Error 1 > make[4]: *** [scripts/Makefile.build:500: drivers/net/ethernet/emulex/benet] Error 2 > make[3]: *** [scripts/Makefile.build:500: drivers/net/ethernet/emulex] Error 2 > make[2]: *** [scripts/Makefile.build:500: drivers/net/ethernet] Error 2 > make[1]: *** [scripts/Makefile.build:500: drivers/net] Error 2 > make: *** [Makefile:1799: drivers] Error 2 > > Andreas.
A lot of VDSO's reset KBUILD_CFLAGS or use a new variable for their compiler flags. As such, they're missing `-include` command line flag that injects include/linux/compiler_types.h, which `#includes` numerous other headers if `__KERNEL__` is defined (`-D__KERNEL__`). So the RISCV VDSO Makefile might need to `-include $(srctree)/include/linux/compiler_types.h -D__KERNEL__`, or `#include <linux/compiler.h>"` directly in arch/riscv/include/asm/vdso/processor.h. -- Thanks, ~Nick Desaulniers
| |