On 25/10/2024 17:51, Alexei Starovoitov wrote: > On Fri, Oct 25, 2024 at 9:49 AM Alexei Starovoitov > <alexei.starovoitov@xxxxxxxxx> wrote: >> >> On Fri, Oct 25, 2024 at 9:38 AM Alan Maguire <alan.maguire@xxxxxxxxxx> wrote: >>> >>> On 25/10/2024 17:19, Alexei Starovoitov wrote: >>>> On Fri, Oct 25, 2024 at 9:15 AM Alan Maguire <alan.maguire@xxxxxxxxxx> wrote: >>>>> >>>>> On 25/10/2024 17:09, Alexei Starovoitov wrote: >>>>>> On Thu, Oct 24, 2024 at 4:26 PM Andrii Nakryiko >>>>>> <andrii.nakryiko@xxxxxxxxx> wrote: >>>>>>> >>>>>>>> >>>>>>>> The good news is that already happens, provided you have the updated >>>>>>>> pahole to handle distilled base generation. After building selftests I see >>>>>>>> >>>>>>>> $ objdump -h bpf_testmod.ko |grep BTF >>>>>>>> 7 .BTF_ids 000001c8 0000000000000000 0000000000000000 00002c50 >>>>>>>> 2**0 >>>>>>>> 50 .BTF 000036f4 0000000000000000 0000000000000000 0006e048 >>>>>>>> 2**0 >>>>>>>> 51 .BTF.base 000004cc 0000000000000000 0000000000000000 0007173c >>>>>>>> 2**0 >>>>>>>> >>>>>>> >>>>>>> Indeed, after updating to the latest pahole master now I get >>>>>>> .BTF.base, very nice. >>>>>> >>>>>> I pulled the latest pahole, rebuilt everything, >>>>>> but still cannot get it to generate BTF.base. >>>>>> >>>>>> Any special trick needed? >>>>> >>>>> Hmm, should just work for bpf_testmod.ko as long as "pahole >>>>> --supported_btf_features" reports "distilled_base" among the set of >>>>> features. scripts/Makefile.btf should add that feature if KBUILD_EXTMOD >>>>> is set, as it should be in the case of building bpf_testmod.ko. I'll >>>>> double-check at my end with latest bpf-next, but it was working >>>>> yesterday for me. >>>> >>>> There must be something else necessary: >>>> >>>> pahole -J -j --btf_features=encode_force,var,float,enum64,decl_tag,type_tag,optimized_func,consistent_func,decl_tag_kfuncs >>>> --lang_exclude=rust --btf_features=distilled_base --btf_base vmlinux >>>> .../bpf/bpf_testmod/bpf_testmod.ko; .../resolve_btfids -b vmlinux >>>> .../selftests/bpf/bpf_testmod/bpf_testmod.ko; >>>> >>>> objdump -h .../testing/selftests/bpf/bpf_testmod/bpf_testmod.ko|grep BTF >>>> 7 .BTF_ids 000001c8 0000000000000000 0000000000000000 00001d94 2**0 >>>> 50 .BTF 00002ea7 0000000000000000 0000000000000000 00062e30 2**0 >>>> >>> >>> Not sure what's going on for you here to be honest. I just tried pulling >>> latest bpf-next and dwarves master branch, rebuilding pahole and >>> selftests. I see .BTF.base sections for each .ko in selftests/bpf. >>> Can you provide the output of >>> >>> pahole --supported_btf_features >>> >>> ? If it contains distilled_base things _should_ be working. The only >>> other reason I can think of that you might not get .BTF.base sections is >>> if dwarves was built against a local libbpf (rather than the git >>> submodule) >> >> That was it. >> I did 'git pull' in pahole instead of 'git pull --recurse-submodules'. >> >> Thanks for the tips. Now I see .BTF.base section. > > Forgot to add that even in this broken configuration: > before: > $ pahole --supported_btf_features > encode_force,var,float,decl_tag,type_tag,enum64,optimized_func,consistent_func,decl_tag_kfuncs,reproducible_build,distilled_base,global_var > after: > $ pahole --supported_btf_features > encode_force,var,float,decl_tag,type_tag,enum64,optimized_func,consistent_func,decl_tag_kfuncs,reproducible_build,distilled_base,global_var > > No difference :( > Both claim that distilled_base is working, but it didn't. > Before had older libbpf submodule. > Maybe it should print libbpf version or something ? Good point, this should be clearer. I'll send a patch for pahole which will ensure the feature isn't reported if libbpf is too old to support it; at least that way it would have been more obvious for you that distilled_base wasn't present when using an older libbpf to build pahole. An extended version description including the libbpf version might be helpful too, though we shouldn't mess with the format of the basic pahole version string since it is used so extensively. Thanks for catching this! Alan