On Wed, Mar 10, 2021 at 1:02 PM Ilya Leoshkevich <iii@xxxxxxxxxxxxx> wrote: > > On Wed, 2021-03-10 at 12:25 -0800, Andrii Nakryiko wrote: > > On Wed, Mar 10, 2021 at 12:16 PM Ilya Leoshkevich <iii@xxxxxxxxxxxxx> > > wrote: > > > > > > Some BPF programs compiled on s390 fail to load, because s390 > > > arch-specific linux headers contain float and double types. > > > > > > Fix as follows: > > > > > > - Make the DWARF loader fill base_type.float_type. > > > > > > - Introduce the --btf_gen_floats command-line parameter, so that > > > pahole could be used to build both the older and the newer > > > kernels. > > > > > > - libbpf introduced the support for the floating-point types in > > > commit > > > 986962fade5, so update the libbpf submodule to that version and > > > use > > > the new btf__add_float() function in order to emit the floating- > > > point > > > types when not in the compatibility mode. > > > > > > - Make the BTF loader recognize the new BTF kind. > > > > > > Example of the resulting entry in the vmlinux BTF: > > > > > > [7164] FLOAT 'double' size=8 > > > > > > when building with: > > > > > > LLVM_OBJCOPY=${OBJCOPY} ${PAHOLE} -J ${1} --btf_gen_floats > > > > > > Signed-off-by: Ilya Leoshkevich <iii@xxxxxxxxxxxxx> > > > --- > > > > So it looks good to me overall, but here's the question about using > > this --btf-gen-floats flag from link-vmlinux.sh script. If you > > specify > > that flag for an old pahole, it will probably error out, right? So > > that means we'll need to do feature detection for pahole supported > > features, right?.. > > I was planning to just bump the version in this check: > > if [ "${pahole_ver}" -lt "116" ]; then No-no-no, we can't just arbitrarily say that the minimal pahole version is now 1.21, while 1.16 would work just fine in almost all cases on almost all architectures. > > But we could also keep allowing 1.16-1.20 and pass the new flag on > 1.21+ only. > > What do you think? I think we'll have to do the extra check. I'd also add something like --btf-gen-all, that would turn on all the supported BTF features. So that people that generate BTF for kernels externally (e.g., for old kernels to support BPF CO-RE), could just do --btf-gen-all, instead of potentially longer list of all the BTF optional subsets (--btf-gen-floats --btf-gen-somemore --btf-gen-morecool etc). That doesn't have to happen in this patch, of course. So with what we have now: Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> >