History

kbuild: Skip module BTF generation for out-of-tree external modules

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

Andrii Nakryiko committed 5 years ago

Commit e732b531 parent 1c26ac61 file · +7 −2Browse files

Unified · Split

scripts/Makefile.modfinal+7−2
@@ -38,7 +38,12 @@ quiet_cmd_ld_ko_o = LD [M] $@ · 37 unmodified lines
3838 $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
3939
4040 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;
4247
4348 # Same as newer-prereqs, but allows to exclude specified extra dependencies
4449 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
4954 printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
5055
5156 # 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
5358 +$(call if_changed_except,ld_ko_o,vmlinux)
5459 ifdef CONFIG_DEBUG_INFO_BTF_MODULES
5560 +$(if $(newer-prereqs),$(call cmd,btf_ko))