Re: [PATCH] btf: Add support for the floating-point types

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Em Sun, Mar 07, 2021 at 10:44:21AM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Sun, Mar 07, 2021 at 10:16:31AM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Sat, Mar 06, 2021 at 07:16:08PM -0800, Andrii Nakryiko escreveu:
> > > On Fri, Mar 5, 2021 at 6:22 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 DWARF loader fill base_type.float_type.
> > > >
> > > > - libbpf introduced 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 base_type.float_type is set.
> > > >
> > > > Example of the resulting entry in the vmlinux BTF:
> > > >
> > > >     [7164] FLOAT 'double' size=8
> 
> > > [PATCH dwarves] would make it a bit clearer that this is pahole patch.
> 
> > > But LGTM.
>  
> > So older versions of bpftool will fail with a .BTF section having this
> > new float? I thought it would just skip it emitting a warning? Probably
> > not possible as we don't have the record size encoded in a header,
> > right?
>  
> > [acme@five pahole]$ bpftool btf dump file vmlinux | grep -w FLOAT
> > [acme@five pahole]$ type pahole
> > pahole is /home/acme/bin/pahole
> > [acme@five pahole]$ ls -la ~/bin/pahole
> > lrwxrwxrwx. 1 acme acme 34 Jan 29 11:00 /home/acme/bin/pahole -> /home/acme/git/pahole/build/pahole
> > [acme@five pahole]$ pahole -J vmlinux
> > [acme@five pahole]$ bpftool btf dump file vmlinux | grep -w FLOAT | head
> > Error: failed to load BTF from vmlinux: Invalid argument
> > [acme@five pahole]$
> > 
> > Perhaps the warning emitted by bpftool should suggest updating the tool
> > as it found a record type it doesn't know about?
> > 
> > /me goes to update bpftool...
> 
> Works with the bpftool in bpf-next:
> 
> [acme@five pahole]$ bpftool btf dump file vmlinux | grep -w FLOAT | head
> [8006] FLOAT 'double' size=8
> [acme@five pahole]$

Applied, with this committer notes:

Committer testing:

  $ rm -rf build  # To update the libbpf git submodule
  $ mkdir build
  $ cd build
  $ cmake ..
  $ cd ..
  $ make -C build
  # No BTF_KIND_FLOAT before:
  $ bpftool btf dump file vmlinux | grep -w FLOAT
  $ type pahole
  pahole is /home/acme/bin/pahole
  $ ls -la ~/bin/pahole
  lrwxrwxrwx. 1 acme acme 34 Jan 29 11:00 /home/acme/bin/pahole -> /home/acme/git/pahole/build/pahole
  # Encode BTF:
  $ pahole -J vmlinux
  $ bpftool btf dump file vmlinux | grep -w FLOAT | head
  Error: failed to load BTF from vmlinux: Invalid argument
  $
  # Update bpftool to what is in bpf-next, then try again:
  $ bpftool btf dump file vmlinux | grep -w FLOAT
  [8006] FLOAT 'double' size=8
  $
  # Now check that pahole works well, i.e. that the BTF loader works
  $ pahole -F btf vmlinux -C sk_buff_head
  struct sk_buff_head {
        struct sk_buff *           next;                 /*     0     8 */
        struct sk_buff *           prev;                 /*     8     8 */
        __u32                      qlen;                 /*    16     4 */
        spinlock_t                 lock;                 /*    20     4 */

        /* size: 24, cachelines: 1, members: 4 */
        /* last cacheline: 24 bytes */
  };
  $
  $ pahole -F btf vmlinux  | wc -l
  122676
  $

Now will build a kernel with this new version, reboot, then push
publicly.

- Arnaldo



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux