mbox series

[bpf-next,v4,0/8] bpftool: Add LLVM as default library for disassembling JIT-ed programs

Message ID 20221025150329.97371-1-quentin@isovalent.com (mailing list archive)
Headers show
Series bpftool: Add LLVM as default library for disassembling JIT-ed programs | expand

Message

Quentin Monnet Oct. 25, 2022, 3:03 p.m. UTC
To disassemble instructions for JIT-ed programs, bpftool has relied on the
libbfd library. This has been problematic in the past: libbfd's interface
is not meant to be stable and has changed several times, hence the
detection of the two related features from the Makefile
(disassembler-four-args and disassembler-init-styled). When it comes to
shipping bpftool, this has also caused issues with several distribution
maintainers unwilling to support the feature (for example, Debian's page
for binutils-dev, libbfd's package, says: "Note that building Debian
packages which depend on the shared libbfd is Not Allowed.").

This patchset adds support for LLVM as the primary library for
disassembling instructions for JIT-ed programs.

We keep libbfd as a fallback. One reason for this is that currently it
works well, we have all we need in terms of features detection in the
Makefile, so it provides a fallback for disassembling JIT-ed programs if
libbfd is installed but LLVM is not. The other reason is that libbfd
supports nfp instruction for Netronome's SmartNICs and can be used to
disassemble offloaded programs, something that LLVM cannot do (Niklas
confirmed that the feature is still in use). However, if libbfd's interface
breaks again in the future, we might reconsider keeping support for it.

v4:
  - Rebase to address a conflict with commit 2c76238eaddd ("bpftool: Add
    "bootstrap" feature to version output").

v3:
  - Extend commit description (patch 6) with notes on llvm-dev and LLVM's
    disassembler stability.

v2:
  - Pass callback when creating the LLVM disassembler, so that the
    branch targets are printed as addresses (instead of byte offsets).
  - Add last commit to "support" other arch with LLVM, although we don't
    know any supported triple yet.
  - Use $(LLVM_CONFIG) instead of llvm-config in Makefile.
  - Pass components to llvm-config --libs to limit the number of
    libraries to pass on the command line, in Makefile.
  - Rebase split of FEATURE_TESTS and FEATURE_DISPLAY in Makefile.

Quentin Monnet (8):
  bpftool: Define _GNU_SOURCE only once
  bpftool: Remove asserts from JIT disassembler
  bpftool: Split FEATURE_TESTS/FEATURE_DISPLAY definitions in Makefile
  bpftool: Group libbfd defs in Makefile, only pass them if we use
    libbfd
  bpftool: Refactor disassembler for JIT-ed programs
  bpftool: Add LLVM as default library for disassembling JIT-ed programs
  bpftool: Support setting alternative arch for JIT disasm with LLVM
  bpftool: Add llvm feature to "bpftool version"

 .../bpftool/Documentation/common_options.rst  |   8 +-
 tools/bpf/bpftool/Makefile                    |  72 +++--
 tools/bpf/bpftool/common.c                    |  12 +-
 tools/bpf/bpftool/iter.c                      |   2 +
 tools/bpf/bpftool/jit_disasm.c                | 261 +++++++++++++++---
 tools/bpf/bpftool/main.c                      |   7 +
 tools/bpf/bpftool/main.h                      |  32 +--
 tools/bpf/bpftool/map.c                       |   1 -
 tools/bpf/bpftool/net.c                       |   2 +
 tools/bpf/bpftool/perf.c                      |   2 +
 tools/bpf/bpftool/prog.c                      |  23 +-
 tools/bpf/bpftool/xlated_dumper.c             |   2 +
 12 files changed, 319 insertions(+), 105 deletions(-)

Comments

patchwork-bot+netdevbpf@kernel.org Oct. 25, 2022, 5:20 p.m. UTC | #1
Hello:

This series was applied to bpf/bpf-next.git (master)
by Alexei Starovoitov <ast@kernel.org>:

On Tue, 25 Oct 2022 16:03:21 +0100 you wrote:
> To disassemble instructions for JIT-ed programs, bpftool has relied on the
> libbfd library. This has been problematic in the past: libbfd's interface
> is not meant to be stable and has changed several times, hence the
> detection of the two related features from the Makefile
> (disassembler-four-args and disassembler-init-styled). When it comes to
> shipping bpftool, this has also caused issues with several distribution
> maintainers unwilling to support the feature (for example, Debian's page
> for binutils-dev, libbfd's package, says: "Note that building Debian
> packages which depend on the shared libbfd is Not Allowed.").
> 
> [...]

Here is the summary with links:
  - [bpf-next,v4,1/8] bpftool: Define _GNU_SOURCE only once
    https://git.kernel.org/bpf/bpf-next/c/b3d84af7cdfc
  - [bpf-next,v4,2/8] bpftool: Remove asserts from JIT disassembler
    https://git.kernel.org/bpf/bpf-next/c/55b4de58d0e2
  - [bpf-next,v4,3/8] bpftool: Split FEATURE_TESTS/FEATURE_DISPLAY definitions in Makefile
    https://git.kernel.org/bpf/bpf-next/c/108326d6fa6c
  - [bpf-next,v4,4/8] bpftool: Group libbfd defs in Makefile, only pass them if we use libbfd
    https://git.kernel.org/bpf/bpf-next/c/2ea4d86a5093
  - [bpf-next,v4,5/8] bpftool: Refactor disassembler for JIT-ed programs
    https://git.kernel.org/bpf/bpf-next/c/e1947c750ffe
  - [bpf-next,v4,6/8] bpftool: Add LLVM as default library for disassembling JIT-ed programs
    https://git.kernel.org/bpf/bpf-next/c/eb9d1acf634b
  - [bpf-next,v4,7/8] bpftool: Support setting alternative arch for JIT disasm with LLVM
    https://git.kernel.org/bpf/bpf-next/c/ce4f66086235
  - [bpf-next,v4,8/8] bpftool: Add llvm feature to "bpftool version"
    https://git.kernel.org/bpf/bpf-next/c/08b8191ba7f9

You are awesome, thank you!