linux/scripts
Yafang Shao e5a259d988
kbuild: rpm-pkg: Preserve BTF sections in kernel modules during debuginfo stripping
After switching to the kernel's default package scripts for our local
kernel RPM builds, we noticed that module BTF entries were missing:

  $ ls /sys/kernel/btf/
  vmlinux    <<<< only vmlinux, no module BTF

Root cause: find-debuginfo.sh (from the debugedit package) prefers
eu-strip over strip when elfutils is installed, which is the common
case on RHEL 9. eu-strip removes non-allocated ELF sections, including
the .BTF section that contains BPF Type Format information for kernel
modules. Without .BTF, BPF tools (bpftool, bcc, bpftrace) cannot resolve
kernel types at runtime, and /sys/kernel/btf/<module> entries are not
created when modules are loaded.

Additionally, since commit 8646db2389 ("libbpf,bpf: Share BTF
relocate-related code with kernel"), modules contain a .BTF.base section
that maps distilled type IDs to vmlinux types. If .BTF.base is stripped,
btf_parse_module() falls back to vmlinux BTF directly, causing type ID
mismatches and rejecting the module's BTF entirely.

Fix by passing --keep-section .BTF and --keep-section .BTF.base via
_find_debuginfo_opts, which adds -K .BTF and -K .BTF.base to the
eu-strip/strip command, preserving both sections while allowing normal
debuginfo extraction to proceed.

After this change, all module BTF files are properly generated:

  $ ls /sys/kernel/btf/
  aesni_intel         drm                 i2c_i801            mfd_core
  ahci                drm_client_lib      i2c_mux             net_failover
  backlight           drm_kms_helper      i2c_smbus           pcspkr
  ccp                 drm_shmem_helper    input_leds          qemu_fw_cfg
  dm_log              failover            intel_rapl_common   sch_fq_codel
  dm_mirror           fat                 intel_rapl_msr      serio_raw
  dm_mod              fuse                irqbypass           sunrpc
  dm_region_hash      gf128mul            iTCO_wdt            vfat
  virtio_balloon      virtio_console      virtio_dma_buf      virtio_gpu
  virtio_net          virtio_rng          virtio_blk          vmlinux
  xfs

Suggested-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
Cc: Alan Maguire <alan.maguire@oracle.com>
Link: https://patch.msgid.link/20260728024950.44946-1-laoar.shao@gmail.com
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
2026-07-29 16:21:42 -07:00
..
atomic rust: helpers: Move #define __rust_helper out of atomic.c 2026-01-09 19:01:42 +08:00
bash-completion kbuild: add Kbuild bash completion 2025-03-15 21:22:52 +09:00
basic integer-wrap: Force full rebuild when .scl file changes 2025-05-08 09:42:06 -07:00
clang-tools linux_kselftest-kunit-7.2-rc1 2026-06-16 16:33:57 +05:30
coccinelle coccinelle: kmalloc_obj: Remove default GFP_KERNEL arg 2026-03-20 10:52:52 -07:00
crypto lib/crypto: tests: Add KUnit tests for SM3 2026-03-23 17:50:59 -07:00
dtc dt-bindings: add self-test fixtures for style checker 2026-06-10 13:37:06 -05:00
dummy-tools kbuild: dummy-tools: Add python3 2026-01-29 17:12:13 -07:00
gcc-plugins gcc-plugins: Always define CONST_CAST_GIMPLE and CONST_CAST_TREE 2026-05-14 09:24:32 -07:00
gdb Updates for the NOHZ subsystem: 2026-06-15 13:48:52 +05:30
gendwarfksyms gendwarfksyms: Fix build on 32-bit hosts 2025-12-22 16:35:54 +00:00
genksyms genksyms: Fix parsing a declarator with a preceding attribute 2026-02-26 11:53:05 -07:00
include scripts: import more list macros 2024-10-07 02:12:27 +09:00
ipe scripts: ipe: polgen: remove redundant close and error exit path 2024-11-19 13:57:03 -08:00
kconfig Second round of Kbuild changes for 7.2 2026-06-25 09:06:12 -07:00
ksymoops
livepatch klp-build: Validate short-circuit prerequisites 2026-05-04 21:16:06 -07:00
mod Second round of Kbuild changes for 7.2 2026-06-25 09:06:12 -07:00
package kbuild: rpm-pkg: Preserve BTF sections in kernel modules during debuginfo stripping 2026-07-29 16:21:42 -07:00
sbom scripts/sbom: add unit tests for SPDX-License-Identifier parsing 2026-05-22 13:14:41 +02:00
selinux docs: Remove remainders of reiserfs 2025-08-18 10:45:43 -06:00
tracing scripts/tracing: Remove scripts/tracing/draw_functrace.py 2025-03-20 07:02:21 -04:00
.gitignore scripts: add tracepoint-update to the list of ignores files 2025-10-29 08:46:05 -04:00
as-version.sh
asn1_compiler.c
bloat-o-meter scripts/bloat-o-meter: ignore _sdata 2026-05-28 21:24:48 -07:00
bootgraph.pl
bpf_doc.py bpf: Finish constification of 1st parameter of bpf_d_path() 2025-10-04 09:05:23 -07:00
build-version kbuild: move init/build-version to scripts/ 2024-07-16 01:08:37 +09:00
cc-can-link.sh kbuild: Fix CC_CAN_LINK detection 2026-02-13 14:23:06 -05:00
cc-version.sh
check_extable.sh
check-function-names.sh kbuild: prefer ${NM} in check-function-names.sh 2026-01-14 14:13:41 +01:00
check-git
check-sysctl-docs docs: Replace spaces with tabs in check-sysctl-docs 2025-07-23 11:57:05 +02:00
check-uapi.sh check-uapi: use dummy libc includes 2026-03-20 21:43:56 +01:00
checkdeclares.pl
checker-valid.sh compiler: Use __typeof_unqual__() for __unqual_scalar_typeof() 2026-01-18 10:32:03 +01:00
checkincludes.pl
checkkconfigsymbols.py
checkpatch.pl mm.git review status for mm-hotfixes-stable..mm-nonmm-stable 2026-06-21 13:20:19 -07:00
checkstack.pl
checksyscalls.sh checksyscalls: only run when necessary 2026-04-05 09:21:31 +02:00
checkversion.pl
cleanfile
cleanpatch
coccicheck scripts: coccicheck: warn on unset debug file 2026-02-21 17:22:30 +01:00
config kbuild: fix argument parsing in scripts/config 2025-03-15 21:22:42 +09:00
const_structs.checkpatch const_structs.checkpatch: add bin_attribute 2025-06-17 10:44:07 +02:00
container scripts: add tool to run containerized builds 2026-01-22 15:30:48 -07:00
context-analysis-suppression.txt locking/rtmutex: Add context analysis 2026-03-08 11:06:53 +01:00
decode_stacktrace.sh decode_stacktrace: decode caller address 2026-03-27 21:19:45 -07:00
decodecode scripts/decodecode: return 0 on success 2026-03-27 21:19:48 -07:00
depmod.sh kbuild: add $(objtree)/ prefix to some in-kernel build artifacts 2024-11-27 09:38:27 +09:00
dev-needs.sh
diffconfig
elf-parse.c sorttable: Move ELF parsing into scripts/elf-parse.[ch] 2025-10-24 16:43:14 -04:00
elf-parse.h sorttable: Move ELF parsing into scripts/elf-parse.[ch] 2025-10-24 16:43:14 -04:00
extract_xc3028.pl
extract-fwblobs scripts: add script to extract built-in firmware blobs 2025-03-16 22:30:46 -07:00
extract-ikconfig
extract-module-sig.pl
extract-sys-certs.pl
extract-vmlinux extract-vmlinux: Output used decompression method 2025-08-28 15:25:48 -07:00
faddr2line scripts/faddr2line: Fix "Argument list too long" error 2025-10-14 14:45:20 -07:00
file-size.sh
gen_packed_field_checks.c lib: packing: add pack_fields() and unpack_fields() 2024-12-11 20:13:00 -08:00
gen-btf.sh scripts/gen-btf.sh: Use CONFIG_SHELL for execution 2026-01-21 12:36:32 -08:00
gen-crc-consts.py riscv/crc: add "template" for Zbc optimized CRC functions 2025-03-10 09:29:08 -07:00
gen-randstruct-seed.sh
generate_builtin_ranges.awk kbuild: exclude .rodata.(cst|str)* when building ranges 2025-03-15 21:22:52 +09:00
generate_initcall_order.pl
generate_rust_analyzer.py rust: zerocopy-derive: enable support in kbuild 2026-06-09 04:13:23 +02:00
generate_rust_target.rs s390 updates for 7.2 merge window 2026-06-16 05:08:13 +05:30
get_dvb_firmware
get_maintainer.pl get_maintainer: add --json output mode 2026-05-28 21:24:42 -07:00
gfp-translate scripts: fix gfp-translate after ___GFP_*_BITS conversion to an enum 2024-09-01 17:59:01 -07:00
git-resolve.sh git-resolve: add SPDX and copyright line 2025-04-25 15:54:24 +02:00
git.orderFile
head-object-list.txt openrisc: place exception table at the head of vmlinux 2024-12-10 12:04:19 +00:00
headerdep.pl
headers_install.sh scripts: headers_install.sh: Remove config leak ignore machinery 2026-01-30 16:46:17 +01:00
insert-sys-cert.c
install.sh kbuild: Create INSTALL_PATH directory if it does not exist 2024-07-20 13:34:54 +09:00
integer-wrap-ignore.scl ubsan/overflow: Enable ignorelist parsing and add type filter 2025-03-07 19:58:05 -08:00
jobserver-exec scripts/jobserver-exec: propagate child exit status 2026-06-10 13:37:05 -05:00
kallsyms.c kallsyms: Get rid of kallsyms relative base 2026-01-22 15:58:22 -07:00
Kbuild.include kbuild: add $(objtree)/ prefix to some in-kernel build artifacts 2024-11-27 09:38:27 +09:00
Kconfig.include rust: kconfig: Don't require RUST_IS_AVAILABLE for rustc-option 2026-02-03 15:29:17 -07:00
kernel-doc docs: add a scripts/kernel-doc symbolic link 2026-01-20 15:57:06 -07:00
ld-version.sh kbuild: Make ld-version.sh more robust against version string changes 2024-07-15 03:13:32 +09:00
leaking_addresses.pl
Lindent
link-vmlinux.sh Kbuild/Kconfig updates for 7.0 2026-02-11 13:40:35 -08:00
macro_checker.py scripts: add macro_checker script to check unused parameters in macros 2024-09-01 20:43:28 -07:00
make_fit.py scripts/make_fit.py: Drop explicit LZMA parallel compression 2026-02-13 14:24:01 -05:00
Makefile sign-file: use 'struct module_signature' from the UAPI headers 2026-03-24 21:42:37 +00:00
Makefile.asm-headers kbuild: fix rebuild of generic syscall headers 2024-07-18 10:01:55 -07:00
Makefile.autofdo kbuild: rust: rename flag to -Zdebuginfo-for-profiling for Rust >= 1.98 2026-06-04 09:26:57 +02:00
Makefile.btf kbuild, bpf: Specify "layout" optional feature 2026-03-26 13:53:57 -07:00
Makefile.build rust: zerocopy-derive: enable support in kbuild 2026-06-09 04:13:23 +02:00
Makefile.clang kbuild: clang: Support building UM with SUBARCH=i386 2025-03-04 09:40:13 -08:00
Makefile.clean kbuild: change working directory to external module directory with M= 2024-11-28 08:10:23 +09:00
Makefile.compiler rust: kasan/kbuild: fix rustc-option when cross-compiling 2026-05-26 09:44:54 +02:00
Makefile.context-analysis compiler-context-analysis: Introduce header suppressions 2026-01-05 16:43:33 +01:00
Makefile.debug kbuild: rust: use -Zdebuginfo-compression 2024-04-02 17:41:22 +02:00
Makefile.defconf kbuild: suppress stdout from merge_config for silent builds 2025-01-10 23:01:21 +09:00
Makefile.dtbinst kbuild: Install dtb files as 0644 in Makefile.dtbinst 2024-06-26 00:18:57 +09:00
Makefile.dtbs scripts/dtc: Update to upstream version v1.7.2-62-ga26ef6400bd8 2026-02-03 20:58:12 -06:00
Makefile.gcc-plugins stackleak: Split KSTACK_ERASE_CFLAGS from GCC_PLUGINS_CFLAGS 2025-07-21 21:40:57 -07:00
Makefile.headersinst
Makefile.host kbuild: support building external modules in a separate build directory 2024-11-28 08:11:55 +09:00
Makefile.kasan rust: kasan: add support for Software Tag-Based KASAN 2026-05-27 01:54:22 +02:00
Makefile.kcov - The 2 patch series "zram: support algorithm-specific parameters" from 2025-06-02 16:00:26 -07:00
Makefile.kcsan
Makefile.kmsan
Makefile.kstack_erase kstack_erase: Fix missed export of renamed KSTACK_ERASE_CFLAGS 2025-07-29 17:17:46 -07:00
Makefile.lib Objtool updates for v7.2: 2026-06-15 14:31:58 +05:30
Makefile.modfinal kbuild/btf: Remove broken module relinking exclusion 2026-04-29 18:03:49 -07:00
Makefile.modinst kbuild: Use objtree for module signing key path 2025-11-08 12:17:58 +01:00
Makefile.modpost modpost: Allow extended modversions without basic MODVERSIONS 2025-01-11 02:36:32 +09:00
Makefile.package kbuild: modules-cpio-pkg: Respect INSTALL_MOD_PATH 2026-03-30 07:38:26 +02:00
Makefile.propeller kbuild: Fix Propeller build option 2024-11-27 09:38:27 +09:00
Makefile.randstruct
Makefile.thinlto kbuild: distributed build support for Clang ThinLTO 2026-05-29 13:44:29 -07:00
Makefile.ubsan ARM: 2025-05-29 08:10:01 -07:00
Makefile.userprogs
Makefile.vdsoinst kbuild: vdso_install: drop build ID architecture allow-list 2026-04-02 17:50:40 +02:00
Makefile.vmlinux bpf-next-7.0 2026-02-10 11:26:21 -08:00
Makefile.vmlinux_a kbuild: Remove unnecessary 'T' modifier in cmd_ar_builtin_fixup 2026-06-02 18:41:50 -07:00
Makefile.vmlinux_o kbuild: Check for functions with ambiguous -ffunction-sections section names 2025-11-21 10:04:10 +01:00
Makefile.warn scripts/Makefile.warn: Drop -Wformat handling for clang < 16 2026-05-27 15:20:05 -07:00
makelst
markup_oops.pl
min-tool-version.sh s390 updates for 7.2 merge window 2026-06-16 05:08:13 +05:30
misc-check scripts/misc-check: update export checks for EXPORT_SYMBOL_FOR_MODULES() 2025-08-26 12:00:17 -07:00
mkcompile_h
mksysmap modpost: Create modalias for builtin modules 2025-09-24 09:10:45 -07:00
mkuboot.sh
module-common.c kbuild: compile constant module information only once 2024-09-07 17:24:08 +09:00
module.lds.S module.lds.S: Fix modules on 32-bit parisc architecture 2026-04-17 15:46:46 +02:00
modules-check.sh
nsdeps scripts/nsdeps: get 'make nsdeps' working again 2024-12-03 08:22:25 -08:00
objdiff
objdump-func
orc_hash.sh
pahole-version.sh
parse-maintainers.pl
patch-kernel
profile2linkerlist.pl
prune-kernel
recordmcount.c
recordmcount.h
recordmcount.pl tracing: Remove redundant config HAVE_FTRACE_MCOUNT_RECORD 2025-07-22 20:15:56 -04:00
relocs_check.sh
remove-stale-files selinux: move genheaders to security/selinux/ 2024-10-03 16:07:51 -04:00
rust_is_available_bindgen_libclang.h
rust_is_available_test.py rust: rust_is_available: remove warning for bindgen < 0.69.5 && libclang >= 19.1 2026-04-07 10:00:24 +02:00
rust_is_available.sh rust: kbuild: remove "dummy parameter" workaround for bindgen < 0.71.1 2026-04-07 10:00:24 +02:00
rustc-llvm-version.sh kbuild: rust: avoid errors with old rustcs without LLVM patch version 2024-10-28 00:27:16 +01:00
rustc-version.sh kbuild: rust: add CONFIG_RUSTC_VERSION 2024-09-05 22:44:18 +02:00
rustdoc_test_builder.rs rust: doctest: fix incorrect pattern in replacement 2026-06-19 09:39:50 +02:00
rustdoc_test_gen.rs Rust changes for v6.20 / v7.0 2026-02-10 11:53:01 -08:00
setlocalversion setlocalversion: add -e option 2024-11-28 08:11:56 +09:00
show_delta scripts: make python shebangs specific about desired version 2025-03-15 21:19:44 +09:00
sign-file.c sign-file: use 'struct module_signature' from the UAPI headers 2026-03-24 21:42:37 +00:00
sorttable.c scripts/sorttable: Handle RISC-V patchable ftrace entries 2026-06-25 13:15:03 -06:00
spdxcheck-test.sh
spdxcheck.py treewide: Update email address 2026-01-11 06:09:11 -10:00
spdxexclude
spelling.txt treewide: fix transposed "sign" typos and update spelling.txt 2026-06-17 15:37:47 -07:00
ssl-common.h sign-file,extract-cert: avoid using deprecated ERR_get_error_line() 2024-09-20 19:49:52 +03:00
stackdelta
stackusage
subarch.include scripts: subarch.include: fix SUBARCH on macOS hosts 2024-09-10 13:56:37 +09:00
syscall.tbl rseq: Implement sys_rseq_slice_yield() 2026-01-22 11:11:17 +01:00
syscallhdr.sh
syscallnr.sh
syscalltbl.sh x86/syscall: Mark exit[_group] syscall handlers __noreturn 2024-06-28 15:23:38 +02:00
tags.sh tags: Add regex for context_lock_struct 2026-01-05 16:43:37 +01:00
timer_migration_tree.py scripts/timers: Add timer_migration_tree.py 2026-05-06 08:33:07 +02:00
tools-support-relr.sh
tracepoint-update.c scripts/tracepoint-update: Fix memory leak in add_string() on failure 2026-01-23 13:34:45 -05:00
unifdef.c scripts/unifdef: avoid constexpr keyword 2024-04-23 00:09:41 +09:00
update-intel-ucode-defs.py scripts/x86/intel: Add a script to update the old microcode list 2026-04-29 15:53:19 -07:00
ver_linux docs: changes.rst and ver_linux: sort the lists 2026-03-30 10:36:11 -06:00
verify_builtin_ranges.awk scripts: add verifier script for builtin module range data 2024-09-20 09:21:52 +09:00
xen-hypercalls.sh
xz_wrap.sh xz: adjust arch-specific options for better kernel compression 2024-09-01 20:43:27 -07:00