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
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. 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? 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'. 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. - Eric

