On 2026-03-10 14:36:06-0700, Eric Biggers wrote: > On Tue, Jan 13, 2026 at 01:28:50PM +0100, Thomas Weißschuh wrote: > > The upcoming module hashes functionality will build the modules in > > between the generation of the BTF data and the final link of vmlinux. > > Having a dependency from the modules on vmlinux would make this > > impossible as it would mean having a cyclic dependency. > > Break this cyclic dependency by introducing a new target. > > > > Signed-off-by: Thomas Weißschuh <[email protected]> > > --- > > scripts/Makefile.modfinal | 4 ++-- > > scripts/link-vmlinux.sh | 6 ++++++ > > 2 files changed, 8 insertions(+), 2 deletions(-) > > > > diff --git a/scripts/Makefile.modfinal b/scripts/Makefile.modfinal > > index 149e12ff5700..adfef1e002a9 100644 > > --- a/scripts/Makefile.modfinal > > +++ b/scripts/Makefile.modfinal > > @@ -56,8 +56,8 @@ if_changed_except = $(if $(call > > newer_prereqs_except,$(2))$(cmd-check), \ > > printf '%s\n' 'savedcmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:) > > > > # Re-generate module BTFs if either module's .ko or vmlinux changed > > -%.ko: %.o %.mod.o .module-common.o $(objtree)/scripts/module.lds $(and > > $(CONFIG_DEBUG_INFO_BTF_MODULES),$(KBUILD_BUILTIN),$(objtree)/vmlinux) FORCE > > - +$(call if_changed_except,ld_ko_o,$(objtree)/vmlinux) > > +%.ko: %.o %.mod.o .module-common.o $(objtree)/scripts/module.lds $(and > > $(CONFIG_DEBUG_INFO_BTF_MODULES),$(KBUILD_BUILTIN),$(objtree)/.tmp_vmlinux_btf.stamp) > > FORCE > > + +$(call if_changed_except,ld_ko_o,$(objtree)/.tmp_vmlinux_btf.stamp) > > ifdef CONFIG_DEBUG_INFO_BTF_MODULES > > +$(if $(newer-prereqs),$(call cmd,btf_ko)) > > endif > > diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh > > index 4ab44c73da4d..8c98f8645a5c 100755 > > --- a/scripts/link-vmlinux.sh > > +++ b/scripts/link-vmlinux.sh > > @@ -111,6 +111,7 @@ vmlinux_link() > > gen_btf() > > { > > local btf_data=${1}.btf.o > > + local btf_stamp=.tmp_vmlinux_btf.stamp > > > > info BTF "${btf_data}" > > LLVM_OBJCOPY="${OBJCOPY}" ${PAHOLE} -J ${PAHOLE_FLAGS} ${1} > > @@ -131,6 +132,11 @@ gen_btf() > > fi > > printf "${et_rel}" | dd of="${btf_data}" conv=notrunc bs=1 seek=16 > > status=none > > > > + info STAMP $btf_stamp > > + if ! cmp --silent $btf_data $btf_stamp; then > > + cp $btf_data $btf_stamp > > + fi
This patch will be gone from the next revision of the series. Making use of the recently introduced vmlinux.unstripped, as suggested by Petr, removes any modifications to link-vmlinux.sh and the issue that this patch tried to address. > A "stamp file" is traditionally an empty file that is written when some > build step has completed. The above code is instead copying the entire > .tmp_vmlinux1.btf.o file (megabytes in size) to .tmp_vmlinux_btf.stamp. The goal here was not to only have a reference timestamp, but specifically the reference file contents. Note: The duplicated vmlinux.unstripped in its current form is by far larger than .tmp_vmlinux1.btf.o. > So, it's not clear to me why the stamp file is needed at all, versus > depending directly on .tmp_vmlinux1.btf.o. > > I guess 'make' doesn't know about the dependencies of > .tmp_vmlinux1.btf.o. But the same is true of the stamp file, right? So > either way, how would 'make' know to finish rebuilding the file before > starting to execute the "Re-generate module BTFs" rule? The problem was not the ordering, this is handled within link-vmlinux.sh. IIRC originally without this patch even no-op rebuilds would end up rebuilding the modules. Using .tmp_vmlinux1.btf.o may have worked too. But in v4, the patch "kbuild: generate module BTF based on vmlinux.unstripped" was added, which also solves this problem. > Also, passing the long option '--silent' to 'cmp' creates a dependency > on the GNU implementation of 'cmp', which isn't documented as a kernel > build dependency. Probably better to use the short option '-s'. Ack. > Also, the stamp file isn't being deleted by 'make clean'. It looks like > it would need to be added to cleanup() in link-vmlinux.sh. Ack. Thomas

