URL: <https://savannah.gnu.org/bugs/?63818>
Summary: V=1 stopped working for Linux kernel module builds with make-4.4 Group: make Submitter: mdorey Submitted: Sun 19 Feb 2023 11:59:36 AM PST Severity: 3 - Normal Item Group: Documentation Status: None Privacy: Public Assigned to: None Open/Closed: Open Discussion Lock: Any Component Version: 4.4 Operating System: POSIX-Based Fixed Release: None Triage Status: None _______________________________________________________ Follow-up Comments: ------------------------------------------------------- Date: Sun 19 Feb 2023 11:59:36 AM PST By: Martin Dorey <mdorey> As reported by Jan Palus in https://lists.gnu.org/archive/html/bug-make/2022-11/msg00185.html with the diagnosis polished by Paul in reply, the Linux kernel build system goes into silent mode, stopping V=1 from telling you eg about the compiler commands, with make-4.4 (but not earlier), if an s is present in certain parts of the command line. When compiling modules, this is more likely than it might seem, because an argument of the form M=$(CURDIR) is given to make and s is common in directory names. This was fixed in the Linux kernel build system by Dmitry with help from Masahiro Yamada for v6.2-rc1 (https://github.com/torvalds/linux/commit/4bf73588165ba7d32131a043775557a54b6e1db5). I think the problem arrived with v4.13-rc1 (https://github.com/torvalds/linux/commit/6f0fa58e459642b16901521cc58ac474b787ec5b). To put that in Debian terms, that means that Buster, Bullseye and (likely) Bookworm are afflicted. Here's a complete example, derived from https://sysprog21.github.io/lkmpg/ but with the Makefile simplified the way I would have written it and a stray quote left deliberately at the end of the .c file: martind@pizzagate:~/tmp/make-kernel-MAKEFLAGS-with-an-s$ cat Makefile obj-m += hello-1.o KVERSION ?= $(shell uname -r) KVERSION := $(KVERSION) TARGETS = modules clean .PHONY: $(TARGETS) $(TARGETS): %:; $(MAKE) -C /lib/modules/$(KVERSION)/build M=$(CURDIR) $@ martind@pizzagate:~/tmp/make-kernel-MAKEFLAGS-with-an-s$ cat hello-1.c /* * hello-1.c - The simplest kernel module. */ #include <linux/kernel.h> /* Needed for pr_info() */ #include <linux/module.h> /* Needed by all modules */ int init_module(void) { pr_info("Hello world 1.\n"); /* A non 0 return means init_module failed; module can't be loaded. */ return 0; } void cleanup_module(void) { pr_info("Goodbye world 1.\n"); } MODULE_LICENSE("GPL"); " martind@pizzagate:~/tmp/make-kernel-MAKEFLAGS-with-an-s$ This is what the problem looks like: martind@pizzagate:~/tmp/make-kernel-MAKEFLAGS-with-an-s$ ~/download/make-4.4/make V=1 /home/martind/download/make-4.4/make -C /lib/modules/4.19.0-21-amd64/build M=/home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s modules make[1]: Entering directory '/usr/src/linux-headers-4.19.0-21-amd64' /home/martind/download/make-4.4/make -C /usr/src/linux-headers-4.19.0-21-amd64 KBUILD_SRC=/usr/src/linux-headers-4.19.0-21-common \ -f /usr/src/linux-headers-4.19.0-21-common/Makefile modules mkdir -p /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/.tmp_versions ; rm -f /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/.tmp_versions/* /home/martind/download/make-4.4/make -f /usr/src/linux-headers-4.19.0-21-common/scripts/Makefile.build obj=/home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s (cat /dev/null; echo kernel//home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/hello-1.ko;) > /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/modules.order /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/hello-1.c:21:1: warning: missing terminating " character " ^ /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/hello-1.c:21:1: error: missing terminating " character make[4]: *** [/usr/src/linux-headers-4.19.0-21-common/scripts/Makefile.build:315: /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/hello-1.o] Error 1 make[3]: *** [/usr/src/linux-headers-4.19.0-21-common/Makefile:1561: _module_/home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s] Error 2 make[2]: *** [Makefile:146: sub-make] Error 2 make[1]: *** [Makefile:8: all] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.19.0-21-amd64' make: *** [Makefile:8: modules] Error 2 martind@pizzagate:~/tmp/make-kernel-MAKEFLAGS-with-an-s$ The one new piece of information I want to present with this not-really-a-bug report is the work around of adding quiet= to the command line, which then adds the gcc line to the output: martind@pizzagate:~/tmp/make-kernel-MAKEFLAGS-with-an-s$ ~/download/make-4.4/make V=1 quiet= /home/martind/download/make-4.4/make -C /lib/modules/4.19.0-21-amd64/build M=/home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s modules make[1]: Entering directory '/usr/src/linux-headers-4.19.0-21-amd64' /home/martind/download/make-4.4/make -C /usr/src/linux-headers-4.19.0-21-amd64 KBUILD_SRC=/usr/src/linux-headers-4.19.0-21-common \ -f /usr/src/linux-headers-4.19.0-21-common/Makefile modules mkdir -p /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/.tmp_versions ; rm -f /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/.tmp_versions/* /home/martind/download/make-4.4/make -f /usr/src/linux-headers-4.19.0-21-common/scripts/Makefile.build obj=/home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s (cat /dev/null; echo kernel//home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/hello-1.ko;) > /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/modules.order gcc-8 -Wp,-MD,/home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/.hello-1.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/src/linux-headers-4.19.0-21-common/arch/x86/include -I./arch/x86/include/generated -I/usr/src/linux-headers-4.19.0-21-common/include -I./include -I/usr/src/linux-headers-4.19.0-21-common/arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I/usr/src/linux-headers-4.19.0-21-common/include/uapi -I./include/generated/uapi -include /usr/src/linux-headers-4.19.0-21-common/include/linux/kconfig.h -include /usr/src/linux-headers-4.19.0-21-common/include/linux/compiler_types.h -I/home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s -I/home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -Werror-implicit-function-declaration -Werror=return-type -Wno-format-security -std=gnu89 -fno-PIE -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fcf-protection=none -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -DCONFIG_AS_AVX512=1 -DCONFIG_AS_SHA1_NI=1 -DCONFIG_AS_SHA256_NI=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -fno-jump-tables -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-int-in-bool-context -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -Wno-unused-const-variable -fno-var-tracking-assignments -g -pg -mrecord-mcount -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -Wno-stringop-truncation -Wno-array-bounds -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -fmacro-prefix-map=/usr/src/linux-heade /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/hello-1.c:21:1: warning: missing terminating " character " ^ /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/hello-1.c:21:1: error: missing terminating " character make[4]: *** [/usr/src/linux-headers-4.19.0-21-common/scripts/Makefile.build:315: /home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s/hello-1.o] Error 1 make[3]: *** [/usr/src/linux-headers-4.19.0-21-common/Makefile:1561: _module_/home/martind/tmp/make-kernel-MAKEFLAGS-with-an-s] Error 2 make[2]: *** [Makefile:146: sub-make] Error 2 make[1]: *** [Makefile:8: all] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.19.0-21-amd64' make: *** [Makefile:8: modules] Error 2 martind@pizzagate:~/tmp/make-kernel-MAKEFLAGS-with-an-s$ This was accepted as a Linux kernel build system bug rather than a Make bug, so there's nothing to do here, but I for one will likely have to compile modules for the afflicted kernels for years yet, so I thought the work around was worth sharing. Bug #63347 didn't seem like the ideal place. I guess the mailing list archives are sufficiently durable and I could probably have replied to the old thread without spamming the wrong bug. _______________________________________________________ Reply to this item at: <https://savannah.gnu.org/bugs/?63818> _______________________________________________ Message sent via Savannah https://savannah.gnu.org/