Support creation of module BTF along with base reference BTF; the latter is stored in a .BTF.base_ref ELF section and supplements split BTF references to base BTF with information about base types, allowing for later reconciliation of split BTF with a (possibly changed) base. resolve_btfids uses the "-r" option to specify that the BTF.ids section should be populated with split BTF relative to the added .BTF.base_ref section rather than relative to the vmlinux base. Modules using base reference BTF can be built via BTF_BASE_REF=1 make -C. -M=path2/module The default is still to use split BTF relative to vmlinux. Signed-off-by: Alan Maguire <alan.maguire@xxxxxxxxxx> --- scripts/Makefile.btf | 7 +++++++ scripts/Makefile.modfinal | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/scripts/Makefile.btf b/scripts/Makefile.btf index 9694ca3c5252..c8212b2ab7ca 100644 --- a/scripts/Makefile.btf +++ b/scripts/Makefile.btf @@ -19,4 +19,11 @@ pahole-flags-$(call test-ge, $(pahole-ver), 126) = -j --btf_features=encode_forc pahole-flags-$(CONFIG_PAHOLE_HAS_LANG_EXCLUDE) += --lang_exclude=rust +ifeq ($(BTF_BASE_REF),1) +module-pahole-flags-$(call test-ge, $(pahole-ver), 126) += --btf_features=base_ref +module-resolve-btfids-flags-$(call test-ge, $(pahole-ver), 126) = -r +endif + export PAHOLE_FLAGS := $(pahole-flags-y) +export MODULE_PAHOLE_FLAGS := $(module-pahole-flags-y) +export MODULE_RESOLVE_BTFIDS_FLAGS := $(module-resolve-btfids-flags-y) diff --git a/scripts/Makefile.modfinal b/scripts/Makefile.modfinal index 8568d256d6fb..22f5bb0a60a6 100644 --- a/scripts/Makefile.modfinal +++ b/scripts/Makefile.modfinal @@ -39,8 +39,8 @@ quiet_cmd_btf_ko = BTF [M] $@ if [ ! -f vmlinux ]; then \ printf "Skipping BTF generation for %s due to unavailability of vmlinux\n" $@ 1>&2; \ else \ - LLVM_OBJCOPY="$(OBJCOPY)" $(PAHOLE) -J $(PAHOLE_FLAGS) --btf_base vmlinux $@; \ - $(RESOLVE_BTFIDS) -b vmlinux $@; \ + LLVM_OBJCOPY="$(OBJCOPY)" $(PAHOLE) -J $(PAHOLE_FLAGS) $(MODULE_PAHOLE_FLAGS) --btf_base vmlinux $@; \ + $(RESOLVE_BTFIDS) $(MODULE_RESOLVE_BTFIDS_FLAGS) -b vmlinux $@; \ fi; # Same as newer-prereqs, but allows to exclude specified extra dependencies -- 2.39.3