Re: [PATCH bpf-next v2] bpf_encoder: Fix a verbose output issue
Alan Maguire <[email protected]>
| Newsgroups | org.kernel.vger.dwarves,org.kernel.vger.bpf |
|---|---|
| Message-ID | <[email protected]> |
On 16/01/2026 02:02, Yonghong Song wrote:
> For the following test.c:
> $ cat test.c
> unsigned tar(int a);
> __attribute__((noinline)) static int foo(int a, int b)
> {
> return tar(a) + tar(a + 1);
> }
> __attribute__((noinline)) int bar(int a)
> {
> foo(a, 1);
> return 0;
> }
> The llvm compilation:
> $ clang -O2 -g -c test.c
> And then
> $ pahole -JV test.o
> btf_encoder__new: 'test.o' doesn't have '.data..percpu' sectio n
> File test.o:
> [1] INT unsigned int size=4 nr_bits=32 encoding=(none)
> [2] INT int size=4 nr_bits=32 encoding=SIGNED
> search cu 'test.c' for percpu global variables.
> [3] FUNC_PROTO (anon) return=2 args=(2 a, [4] FUNC bar type_id=3
> [5] FUNC_PROTO (anon) return=2 args=(2 a, 2 b, [6] FUNC foo type_id=5
>
> The above confused format is due to btf_encoder__add_func_proto_for_state().
> The "is_last = param_idx == nr_params" is always false since param_idx
> starts from 0. The below change fixed the issue:
> is_last = param_idx == (nr_params - 1)
>
> With the fix, 'pahole -JV test.o' will produce the following:
> ...
> [3] FUNC_PROTO (anon) return=2 args=(2 a)
> [4] FUNC bar type_id=3
> [5] FUNC_PROTO (anon) return=2 args=(2 a, 2 b)
> [6] FUNC foo type_id=5
> ...
>
> In addition, in btf_encoder__add_func_proto_for_ftype(), we have
> ++param_idx;
> if (ftype->unspec_parms) { ... }
> This is correct but it is misleading since '++param_idx' is only needed
> inside the above 'if' condition. So put '++param_idx' inside the
> 'if' condition to make code cleaner.
>
> Signed-off-by: Yonghong Song <[email protected]>
applied, thanks!
Alan