From: Nathan Chancellor <nathan@kernel.org>
To: Yafang Shao <laoar.shao@gmail.com>
Cc: sashiko-reviews@lists.linux.dev, bpf@vger.kernel.org,
linux-kbuild@vger.kernel.org, Nicolas Schier <nsc@kernel.org>
Subject: Re: [PATCH v2] kbuild: rpm-pkg: Preserve .BTF section in kernel modules during debuginfo stripping
Date: Thu, 23 Jul 2026 17:00:15 -0700 [thread overview]
Message-ID: <20260724000015.GA2803569@ax162> (raw)
In-Reply-To: <CALOAHbBQhAsTMHMMZH5Sen0cDYg8GREZMmQcT4Njc9VW_WHe4Q@mail.gmail.com>
On Thu, Jul 16, 2026 at 05:11:05PM +0800, Yafang Shao wrote:
> On Thu, Jul 16, 2026 at 11:01 AM <sashiko-bot@kernel.org> wrote:
> >
> > Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> > - [Medium] The check for `find-debuginfo.sh` capabilities in `mkspec` hardcodes host properties into `kernel.spec`, breaking SRPM portability across distributions and failing silently when the tool is not in `$PATH`.
> > --
> >
> > --- Patch [1]: [PATCH v2] kbuild: rpm-pkg: Preserve .BTF section in kernel modules during debuginfo stripping ---
> > commit 99202060a54c32638e01a2bfdc4d23b190f3f77c
> > Author: Yafang Shao <laoar.shao@gmail.com>
> >
> > kbuild: rpm-pkg: Preserve .BTF section in kernel modules during debuginfo stripping
> >
> > This commit updates the RPM packaging scripts to pass --keep-section .BTF
> > to find-debuginfo.sh. This ensures that BTF information is preserved when
> > debuginfo is stripped from kernel modules.
> >
> > > diff --git a/scripts/package/mkspec b/scripts/package/mkspec
> > > index c604f8c174e2c..00acef348ba84 100755
> > > --- a/scripts/package/mkspec
> > > +++ b/scripts/package/mkspec
> > [ ... ]
> > > @@ -65,6 +65,11 @@ fi
> > > echo "%define with_debuginfo_manual $with_debuginfo_manual"
> > > echo "%define with_debuginfo_rpm $with_debuginfo_rpm"
> > >
> > > +# Detect if find-debuginfo.sh supports --keep-section (RHEL 9+)
> > > +if find-debuginfo.sh --help 2>&1 | grep -q keep-section; then
> > > + echo "%global with_keep_section 1"
> > > +fi
> >
> > [Severity: Medium]
> > Is it safe to assume find-debuginfo.sh is in the standard user $PATH?
> >
> > On many systems, this script resides in /usr/lib/rpm/, which isn't typically
> > in the $PATH. This could cause the check to silently fail and strip the .BTF
> > section during a local make rpm-pkg build.
> >
> > Also, since mkspec runs during SRPM generation (make srcrpm-pkg), doesn't
> > this statically bake the generation host's capabilities into the resulting
> > kernel.spec file?
> >
> > If the SRPM is rebuilt on an older distribution, rpmbuild might fail because
> > the older script rejects the --keep-section argument. If generated on an
> > older host and built on a newer one, BTF info would be silently stripped.
> > Could we dynamically query the target host's capabilities using something
> > like %(__find_debuginfo) inside the spec file itself?
> >
> > --
> > Sashiko AI review · https://sashiko.dev/#/patchset/20260716025342.42628-1-laoar.shao@gmail.com?part=1
>
> I believe we could use the builtin _rpmconfigdir to locate
> find-debuginfo.sh reliably. This avoids relying on $PATH.
> What do you think about the following change?
Just an FYI, this was not sent to anyone with authority to comment on
said change, as the Kbuild folks were not included in the AI review
thread. I just happened to find this when browsing the archives.
> diff --git a/scripts/package/kernel.spec b/scripts/package/kernel.spec
> index c732415662ef..4335e99f2aca 100644
> --- a/scripts/package/kernel.spec
> +++ b/scripts/package/kernel.spec
> @@ -67,7 +67,21 @@ This package provides debug information for the
> kernel image and modules from th
> %undefine _unique_debug_srcs
> %undefine _debugsource_packages
> %undefine _debuginfo_subpackages
> +
> +# Preserve .BTF section in kernel modules during debuginfo stripping
> +# find-debuginfo.sh (from debugedit) uses eu-strip which removes
> +# non-allocated ELF sections like .BTF by default.
> +# --keep-section .BTF preserves BPF Type Format information.
> +#
> +# Uses _rpmconfigdir for reliable script location instead of relying on $PATH.
> +%{!?with_keep_section:%global __fd %{_rpmconfigdir}/find-debuginfo.sh}
> +%{!?with_keep_section:%global with_keep_section %(%{__fd} --help 2>&1
> | grep -c keep-section)}
> +%if %{with_keep_section}
> +%global _find_debuginfo_opts -r --keep-section .BTF
> +%else
> %global _find_debuginfo_opts -r
> +%endif
> +
> %global _missing_build_ids_terminate_build 1
> %global _no_recompute_build_ids 1
> %{debug_package}
>
> Please let me know if this approach works or if there are any concerns.
/usr/lib/rpm/find-debuginfo.sh might not exist on certain distributions
that can build .rpm packages like Arch Linux:
$ ls -l /usr/lib/rpm/find-debuginfo.sh
"/usr/lib/rpm/find-debuginfo.sh": No such file or directory (os error 2)
Even on modern Fedora, this is a symlink:
$ ls -l /usr/lib/rpm/find-debuginfo.sh
lrwxrwxrwx@ - root 19 Jul 17:00 /usr/lib/rpm/find-debuginfo.sh -> ../../bin/find-debuginfo
I think we would be better off just using the __find_debuginfo rpm
macro:
$ rg -m 1 find-debuginfo /usr/lib/rpm/macros
69:%__find_debuginfo /usr/bin/find-debuginfo
This appears to work for me, it would be good if you can confirm this
works for you as well.
diff --git a/scripts/package/kernel.spec b/scripts/package/kernel.spec
index c732415662ef..590b5b2e1b40 100644
--- a/scripts/package/kernel.spec
+++ b/scripts/package/kernel.spec
@@ -67,7 +67,18 @@ This package provides debug information for the kernel image and modules from th
%undefine _unique_debug_srcs
%undefine _debugsource_packages
%undefine _debuginfo_subpackages
+
+# Preserve .BTF section in kernel modules during debuginfo stripping
+# find-debuginfo.sh (from debugedit) uses eu-strip which removes
+# non-allocated ELF sections like .BTF by default.
+%global with_keep_section %(%{__find_debuginfo} --help 2>&1 | grep -c keep-section)
+%if %{with_keep_section}
+%global _find_debuginfo_opts -r --keep-section .BTF
+%else
%global _find_debuginfo_opts -r
+%endif
+
%global _missing_build_ids_terminate_build 1
%global _no_recompute_build_ids 1
%{debug_package}
--
Cheers,
Nathan
next prev parent reply other threads:[~2026-07-24 0:00 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-16 2:53 [PATCH v2] kbuild: rpm-pkg: Preserve .BTF section in kernel modules during debuginfo stripping Yafang Shao
[not found] ` <20260716030116.C613E1F000E9@smtp.kernel.org>
[not found] ` <CALOAHbBQhAsTMHMMZH5Sen0cDYg8GREZMmQcT4Njc9VW_WHe4Q@mail.gmail.com>
2026-07-24 0:00 ` Nathan Chancellor [this message]
2026-07-24 2:49 ` Yafang Shao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260724000015.GA2803569@ax162 \
--to=nathan@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=laoar.shao@gmail.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=nsc@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox