[PATCH bpf-next v3 0/2] bpftool: Make the LLVM disassembler an optional runtime dependency
From: Mark Korenberg via B4 Relay
Date: Thu Oct 29 2026 - 09:06:02 EST
libLLVM (~140 MiB on Fedora) is a hard dependency of bpftool, although it
is only used by "bpftool prog dump jited". This series moves the LLVM
disassembler to a plugin that bpftool loads on demand, so that
distributions can make it optional. Patch 1 fixes a leak found on the way.
Changes in v3:
- Look for the plugin next to the bpftool binary before its install
directory, so that bpftool run from its build directory does not pick
an older installed plugin (Sashiko)
- Link to v2: https://lore.kernel.org/r/20261029-bpftool-plugin-v2-0-1a47b2391b0b@xxxxxxxxx
Changes in v2:
- Move the LLVMDisasmDispose() fix to a separate patch (Quentin)
- Look for the plugin next to the bpftool binary when it is not installed,
so that bpftool works from its build directory (Quentin, Sashiko). Not in
the current directory: bpftool usually runs as root.
- Export a single versioned structure of callbacks from the plugin (Quentin)
- Only report "llvm" in "bpftool version" if the plugin loads (Quentin)
- Handle dlerror() returning NULL (Quentin)
- Rebuild jit_disasm.o if libdir changes between "make" and
"make install" (Quentin)
- uninstall: use QUIET_UNINST, remove $(libdir)/bpftool (Quentin)
- With a static libLLVM, which a static bpftool requires, link the
disassembler into bpftool as before (Sashiko). This drops
LLVM_LINK_STATIC: static LLVM archives are never linked into a shared
object.
- Commit log and comment fixes (Quentin, Sashiko)
- Rebase on bpf-next
- Link to v1: https://lore.kernel.org/r/20260603-bpftool-plugin-v1-1-68c0ac91f5a3@xxxxxxxxx
Tested on Fedora 44 x86_64, LLVM 22: plugin, built-in and SKIP_LLVM
builds; plugin lookup (installed, build directory, missing, wrong ABI);
install/uninstall; "prog dump jited" (plain and JSON) on live programs,
and disassembly of aarch64 code through the plugin. Not tested: a fully
static build (no static libraries available).
The v2 changes were written with the help of an AI assistant (Claude),
from the review comments; I reviewed and tested them.
---
Mark Korenberg (2):
bpftool: Fix disposal of the LLVM disassembler context
bpftool: Make the LLVM disassembler an optional runtime dependency
tools/bpf/bpftool/Makefile | 38 +++++++++-
tools/bpf/bpftool/jit_disasm.c | 158 ++++++++++++++++++++++++++++------------
tools/bpf/bpftool/llvm_disasm.c | 84 +++++++++++++++++++++
tools/bpf/bpftool/llvm_disasm.h | 41 +++++++++++
tools/bpf/bpftool/main.c | 3 +-
tools/bpf/bpftool/main.h | 3 +
6 files changed, 276 insertions(+), 51 deletions(-)
---
base-commit: d80373a8e70d3193151232c3062abbbe367ff5ad
change-id: 20260603-bpftool-plugin-c994bc3e0643
Best regards,
--
Mark Korenberg <socketpair@xxxxxxxxx>