Em Tue, Mar 09, 2021 at 12:59:13AM +0100, Ilya Leoshkevich escreveu: > 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 libbpf compatibility level 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 and base_type.float_type is > set. > > - 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} --libbpf_compat=0.4.0 I'm testing it now, and added as a followup patch the man page entry, please check that the wording is appropriate. Thanks, - Arnaldo [acme@five pahole]$ vim man-pages/pahole.1 [acme@five pahole]$ git diff diff --git a/man-pages/pahole.1 b/man-pages/pahole.1 index 352bb5e45f319da4..787771753d1933b1 100644 --- a/man-pages/pahole.1 +++ b/man-pages/pahole.1 @@ -199,6 +199,12 @@ Path to the base BTF file, for instance: vmlinux when encoding kernel module BTF This may be inferred when asking for a /sys/kernel/btf/MODULE, when it will be autoconfigured to "/sys/kernel/btf/vmlinux". +.TP +.B \-\-libbpf_compat=LIBBPF_VERSION +Produce output compatible with this libbpf version. For instance, specifying 0.4.0 as +the version would encode BTF_KIND_FLOAT entries in systems where the vmlinux DWARF +information has float types. + .TP .B \-l, \-\-show_first_biggest_size_base_type_member Show first biggest size base_type member. [acme@five pahole]$