In some modes of operation, Kbuild allows to build modules without having vmlinux image around. In such case, generation of module BTF is impossible. This patch changes the behavior to emit a warning about impossibility of generating kernel module BTF, instead of breaking the build. This is especially important for out-of-tree external module builds. In vmlinux-less mode: $ make clean $ make modules_prepare $ touch drivers/acpi/button.c $ make M=drivers/acpi ... CC [M] drivers/acpi/button.o MODPOST drivers/acpi/Module.symvers LD [M] drivers/acpi/button.ko BTF [M] drivers/acpi/button.ko Skipping BTF generation for drivers/acpi/button.ko due to unavailability of vmlinux ... $ readelf -S ~/linux-build/default/drivers/acpi/button.ko | grep BTF -A1 ... empty ... Now with normal build: $ make all ... LD [M] drivers/acpi/button.ko BTF [M] drivers/acpi/button.ko ... $ readelf -S ~/linux-build/default/drivers/acpi/button.ko | grep BTF -A1 [60] .BTF PROGBITS 0000000000000000 00029310 000000000000ab3f 0000000000000000 0 0 1
Unified · Split
| @@ -38,7 +38,12 @@ quiet_cmd_ld_ko_o = LD [M] $@ · 37 unmodified lines | ||
| 38 | 38 | $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) |
| 39 | 39 | |
| 40 | 40 | quiet_cmd_btf_ko = BTF [M] $@ |
| 41 | − cmd_btf_ko = LLVM_OBJCOPY=$(OBJCOPY) $(PAHOLE) -J --btf_base vmlinux $@ | |
| 41 | + cmd_btf_ko = \ | |
| 42 | + if [ -f vmlinux ]; then \ | |
| 43 | + LLVM_OBJCOPY=$(OBJCOPY) $(PAHOLE) -J --btf_base vmlinux $@; \ | |
| 44 | + else \ | |
| 45 | + printf "Skipping BTF generation for %s due to unavailability of vmlinux\n" $@ 1>&2; \ | |
| 46 | + fi; | |
| 42 | 47 | |
| 43 | 48 | # Same as newer-prereqs, but allows to exclude specified extra dependencies |
| 44 | 49 | newer_prereqs_except = $(filter-out $(PHONY) $(1),$?) |
| @@ -49,7 +54,7 @@ if_changed_except = $(if $(call newer_prereqs_except,$(2))$(cmd-check), \ · 4 unmodified lines | ||
| 49 | 54 | printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:) |
| 50 | 55 | |
| 51 | 56 | # Re-generate module BTFs if either module's .ko or vmlinux changed |
| 52 | −$(modules): %.ko: %.o %.mod.o scripts/module.lds vmlinux FORCE | |
| 57 | +$(modules): %.ko: %.o %.mod.o scripts/module.lds $(if $(KBUILD_BUILTIN),vmlinux) FORCE | |
| 53 | 58 | +$(call if_changed_except,ld_ko_o,vmlinux) |
| 54 | 59 | ifdef CONFIG_DEBUG_INFO_BTF_MODULES |
| 55 | 60 | +$(if $(newer-prereqs),$(call cmd,btf_ko)) |