[PATCH v3 bpf-next 0/7] kbuild, bpf: Support inline info in BTF
WARM1d
From: Alan Maguire <hidden>
Date: 2026-10-03 19:44:09
Also in:
bpf
If CONFIG_DEBUG_INFO_BTF_INLINE=y|m, add the "inline" BTF feature and encode inline site info in BTF alongside standard BTF data. resolve_btfids will then partition into non- and inline-related info and split BTF will be used to store inline info in a .BTF.inline section in vmlinux and modules. For CONFIG_DEBUG_INFO_BTF=m, vmlinux inline info will be stored in btf_vmlinux_inline.ko and will be loaded on-demand if used via /sys/kernel/btf/vmlinux.inline. A .BTF.inline.link section in vmlinux stores the module name, the SHA of the BTF and the size so that even without loading the kernel can size the sysfs representation correctly. This approach is based on [1] and the .BTF.inline.link section is modeled on .GNU_debuglink. Because a module can be built with .BTF.base to allow for BTF relocation, its inline info needs to be relocated also so a bit more work needs to be done to handle this. Patches 1, 2 add resolve_btfids support to partition BTF into .BTF and .BTF.inline and to support populating a BTF link section for BTF_INLINE=m. Patch 3 handles vmlinux.inline exposure in sysfs. Patch 4 does prep work for relocation needed in patch 5 prior to exposing relocated BTF in sysfs, and patches 6 and 7 test BTF sysfs representations and inline validity using bpf_testmod respectively. To generate inline info the latest pahole is needed [2]. Inline info for vmlinux can be quite large ~10Mb for over 600,000 inline sites in the kernel, so CONFIG_DEBUG_INFO_BTF_INLINE=m is recommended; this brings the on-disk size down below 4Mb. Changes since v2 [3] - Delivered the libbpf, bpftool parts are prerequisites - Switched to using Eduard's neater BTF partitioning approach which is fully in resolve_btfids instead of libbpf (Eduard, patch 1) - Supports mmap()ed vmlinux.inline (Alexei, patch 3, test patch 7) - Moved to using .BTF.inline.link to store inline BTF size which avoids need to switch to using kernfs; also allows us to SHA-verify BTF inline info [1] https://lore.kernel.org/bpf/20260925224229.1850-1-wanjay@amazon.com/ (local) [2] https://git.kernel.org/pub/scm/devel/pahole/pahole.git/ [3] https://lore.kernel.org/bpf/20260901165757.801449-1-alan.maguire@oracle.com/ (local) Alan Maguire (6): resolve_btfids: Populate BTF link section kbuild, btf: Expose vmlinux inline BTF through sysfs btf: Preserve string relocation maps for split BTF btf: Relocate and expose module inline BTF selftests/bpf: Test BTF sysfs inline representations selftests/bpf: Add a test verifying inline information Eduard Zingerman (1): resolve_btfids: Build separate main and inline BTF objects Makefile | 1 + include/asm-generic/vmlinux.lds.h | 27 ++ include/linux/btf.h | 42 +- include/linux/module.h | 4 + kernel/bpf/Makefile | 1 + kernel/bpf/btf.c | 386 ++++++++++++++---- kernel/bpf/btf_vmlinux_inline.c | 29 ++ kernel/bpf/sysfs_btf.c | 145 ++++++- kernel/module/main.c | 7 + lib/Kconfig.debug | 19 + scripts/Makefile.btf | 7 + scripts/gen-btf.sh | 31 +- scripts/link-vmlinux.sh | 8 +- scripts/package/kernel.spec | 10 +- tools/bpf/resolve_btfids/Build | 1 + tools/bpf/resolve_btfids/btf_colors.c | 145 +++++++ tools/bpf/resolve_btfids/btf_colors.h | 24 ++ tools/bpf/resolve_btfids/main.c | 352 +++++++++++++++- tools/lib/bpf/btf.c | 2 +- tools/lib/bpf/btf_relocate.c | 7 +- tools/lib/bpf/libbpf_internal.h | 3 +- tools/testing/selftests/bpf/Makefile | 4 +- .../selftests/bpf/prog_tests/btf_inline.c | 110 +++++ .../selftests/bpf/prog_tests/btf_sysfs.c | 76 ++++ .../selftests/bpf/test_kmods/bpf_testmod.c | 2 +- tools/testing/selftests/bpf/trace_helpers.c | 20 + tools/testing/selftests/bpf/trace_helpers.h | 1 + tools/testing/selftests/hid/Makefile | 2 + 28 files changed, 1362 insertions(+), 104 deletions(-) create mode 100644 kernel/bpf/btf_vmlinux_inline.c create mode 100644 tools/bpf/resolve_btfids/btf_colors.c create mode 100644 tools/bpf/resolve_btfids/btf_colors.h create mode 100644 tools/testing/selftests/bpf/prog_tests/btf_inline.c -- 2.43.5