From: Ihor Solodrai <ihor.solodrai@linux.dev>
To: Donglin Peng <dolinux.peng@gmail.com>
Cc: Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>,
Martin KaFai Lau <martin.lau@linux.dev>,
Eduard Zingerman <eddyz87@gmail.com>, Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@fomichev.me>, Hao Luo <haoluo@google.com>,
Jiri Olsa <jolsa@kernel.org>,
Nathan Chancellor <nathan@kernel.org>,
Nicolas Schier <nicolas.schier@linux.dev>,
Nick Desaulniers <nick.desaulniers+lkml@gmail.com>,
Bill Wendling <morbo@google.com>,
Justin Stitt <justinstitt@google.com>,
Alan Maguire <alan.maguire@oracle.com>,
bpf@vger.kernel.org, dwarves@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org
Subject: Re: [PATCH bpf-next v2 4/4] resolve_btfids: change in-place update with raw binary output
Date: Thu, 27 Nov 2025 21:52:33 -0800 [thread overview]
Message-ID: <bba5017e-a590-480b-ae48-17ae45e44e48@linux.dev> (raw)
In-Reply-To: <CAErzpmvsgSDe-QcWH8SFFErL6y3p3zrqNri5-UHJ9iK2ChyiBw@mail.gmail.com>
On 11/27/25 7:20 PM, Donglin Peng wrote:
> On Fri, Nov 28, 2025 at 2:53 AM Ihor Solodrai <ihor.solodrai@linux.dev> wrote:
>>
>> [...]
>>
>> diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
>> index bac22265e7ff..ec7e2a7721c7 100644
>> --- a/tools/testing/selftests/bpf/Makefile
>> +++ b/tools/testing/selftests/bpf/Makefile
>> @@ -4,6 +4,7 @@ include ../../../scripts/Makefile.arch
>> include ../../../scripts/Makefile.include
>>
>> CXX ?= $(CROSS_COMPILE)g++
>> +OBJCOPY ?= $(CROSS_COMPILE)objcopy
>>
>> CURDIR := $(abspath .)
>> TOOLSDIR := $(abspath ../../..)
>> @@ -716,6 +717,10 @@ $(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS) \
>> $$(call msg,BINARY,,$$@)
>> $(Q)$$(CC) $$(CFLAGS) $$(filter %.a %.o,$$^) $$(LDLIBS) $$(LLVM_LDLIBS) $$(LDFLAGS) $$(LLVM_LDFLAGS) -o $$@
>> $(Q)$(RESOLVE_BTFIDS) --btf $(TRUNNER_OUTPUT)/btf_data.bpf.o $$@
>> + $(Q)if [ -f $$@.btf_ids ]; then \
>> + $(OBJCOPY) --update-section .BTF_ids=$$@.btf_ids $$@; \
>
> I encountered a resolve_btfids self-test failure when enabling the
> BTF sorting feature, with the following error output:
>
> All error logs:
> resolve_symbols:PASS:resolve 0 nsec
> test_resolve_btfids:PASS:id_check 0 nsec
> test_resolve_btfids:PASS:id_check 0 nsec
> test_resolve_btfids:FAIL:id_check wrong ID for T (7 != 5)
> #369 resolve_btfids:FAIL
>
> The root cause is that prog_tests/resolve_btfids.c retrieves type IDs
> from btf_data.bpf.o and compares them against the IDs in test_progs.
> However, while the IDs in test_progs are sorted, those in btf_data.bpf.o
> remain in their original unsorted state, causing the validation to fail.
>
> This presents two potential solutions:
> 1. Update the relevant .BTF.* section datas in btf_data.bpf.o, including
> the .BTF and .BTF.ext sections
> 2. Modify prog_tests/resolve_btfids.c to retrieve IDs from test_progs.btf
> instead. However, I discovered that test_progs.btf is deleted in the
> subsequent code section.
>
> What do you think of it?
Within resolve_btfids it's clear that we have to update (sort in this
case) BTF first, and then resolve the ids based on the changed BTF.
As for the test, we should probably change it to become closer to an
actual resolve_btfids use-case. Maybe even replace or remove it.
resolve_btfids operates on BTF generated by pahole for
kernel/module. And the .BTF_ids section makes sense only in kernel
space AFAIU (might be wrong, let me know if I am).
And in this test we are using BTF produced by LLVM for a BPF program,
and then create a .BTF_ids section in a user-space app (test_progs /
resolve_btfids.test.o), although using proper kernel macros.
By the way, the test was written more than 5y ago [1], so it might be
outdated too.
I think the behavior that we care about is already indirectly tested
by bpf_testmod module tests, with custom BPF kfuncs and BTF_ID_*
declarations etc. If resolve_btfids is broken, those tests will fail.
But it's also reasonable to have some tests targeting resolve_btfids
app itself, of course. This one doesn't fit though IMO.
I'll try to think of something.
[1] https://lore.kernel.org/bpf/20200703095111.3268961-10-jolsa@kernel.org/
>
> Thanks,
> Donglin
>
>> + fi
>> + $(Q)rm -f $$@.btf_ids $$@.btf
>> $(Q)ln -sf $(if $2,..,.)/tools/build/bpftool/$(USE_BOOTSTRAP)bpftool \
>> $(OUTPUT)/$(if $2,$2/)bpftool
>>
>> --
>> 2.52.0
>>
next prev parent reply other threads:[~2025-11-28 5:53 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-27 18:52 [PATCH bpf-next v2 0/4] resolve_btfids: Support for BTF modifications Ihor Solodrai
2025-11-27 18:52 ` [PATCH bpf-next v2 1/4] resolve_btfids: rename object btf field to btf_path Ihor Solodrai
2025-11-27 18:52 ` [PATCH bpf-next v2 2/4] resolve_btfids: factor out load_btf() Ihor Solodrai
2025-11-27 18:52 ` [PATCH bpf-next v2 3/4] resolve_btfids: introduce enum btf_id_kind Ihor Solodrai
2025-12-01 17:27 ` Andrii Nakryiko
2025-12-02 19:08 ` Ihor Solodrai
2025-12-04 0:42 ` Andrii Nakryiko
2025-12-04 4:35 ` Ihor Solodrai
2025-12-01 18:27 ` Eduard Zingerman
2025-11-27 18:52 ` [PATCH bpf-next v2 4/4] resolve_btfids: change in-place update with raw binary output Ihor Solodrai
2025-11-28 3:20 ` Donglin Peng
2025-11-28 5:52 ` Ihor Solodrai [this message]
2025-12-01 19:46 ` Ihor Solodrai
2025-12-02 2:01 ` Donglin Peng
2025-12-02 19:00 ` Ihor Solodrai
2025-12-03 9:14 ` Donglin Peng
2025-12-03 10:42 ` Donglin Peng
2025-12-04 0:46 ` Andrii Nakryiko
2025-12-04 3:28 ` Donglin Peng
2025-12-01 19:55 ` Eduard Zingerman
2025-12-04 5:13 ` Ihor Solodrai
2025-12-04 16:57 ` Eduard Zingerman
2025-12-04 17:29 ` Ihor Solodrai
2025-12-04 18:06 ` Eduard Zingerman
2025-12-04 19:04 ` Ihor Solodrai
2025-12-04 19:14 ` Eduard Zingerman
2025-12-01 22:16 ` Andrii Nakryiko
2025-12-03 18:48 ` Alan Maguire
2025-12-04 4:42 ` Ihor Solodrai
2025-12-06 5:08 ` kernel test robot
2025-12-16 20:41 ` Ihor Solodrai
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=bba5017e-a590-480b-ae48-17ae45e44e48@linux.dev \
--to=ihor.solodrai@linux.dev \
--cc=alan.maguire@oracle.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=dolinux.peng@gmail.com \
--cc=dwarves@vger.kernel.org \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=justinstitt@google.com \
--cc=kpsingh@kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=nick.desaulniers+lkml@gmail.com \
--cc=nicolas.schier@linux.dev \
--cc=sdf@fomichev.me \
--cc=song@kernel.org \
--cc=yonghong.song@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