From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Namhyung Kim <namhyung@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <nick.desaulniers+lkml@gmail.com>,
Bill Wendling <morbo@google.com>,
Justin Stitt <justinstitt@google.com>,
Charlie Jenkins <charlie@rivosinc.com>,
"Masami Hiramatsu (Google)" <mhiramat@kernel.org>,
James Clark <james.clark@linaro.org>,
Collin Funk <collin.funk1@gmail.com>,
Dmitry Vyukov <dvyukov@google.com>,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
llvm@lists.linux.dev
Subject: Re: [PATCH v9 0/3] Capstone/llvm dlopen support
Date: Tue, 27 Jan 2026 14:12:45 -0300 [thread overview]
Message-ID: <aXjyDUjim64yqI4N@x1> (raw)
In-Reply-To: <20260127062302.544809-1-irogers@google.com>
On Mon, Jan 26, 2026 at 10:22:59PM -0800, Ian Rogers wrote:
> Linking against libcapstone and libLLVM can be a significant increase
> in dependencies and file size if building statically. The dependencies
> are also quite cumbersome if bringing perf into a distribution. For
> something like `perf record` the disassembler and addr2line
> functionality of libcapstone and libLLVM won't be used. These patches
> support dynamically loading these libraries using dlopen and then
> calling the appropriate functions found using dlsym. Using dlopen
> allows libcapstone and libLLVM to be installed separately to perf and
> when that's done the performance will improve as separate commands for
> objdump and addr2line won't be invoked.
>
> The patch series adds perf_ variants of the capstone/llvm functions
> that will either directly call the function or (NO_CAPSTONE=1 and
> NO_LIBLLVM=1 cases) use dlopen/dlsym to discover and then call the
> function. To support the function signatures when
> HAVE_LIBCAPSTONE_SUPPORT and HAVE_LIBLLVM_SUPPORT aren't defined
> prototypes generated using pahole are given. This avoids requiring
> libcapstone or libLLVM for the sake of the header files. It also
> avoids having a build where neither dlopen or dynamic linking against
> libcapstone or libLLVM is supported. There are other possibilities in
> how to organize this, but the chosen approach was done so for the
> simplicity and cleanliness of the code.
>
> The addr2line LLVM functionality is written in C++. To avoid linking
> against libLLVM for this, a new LIBLLVM_DYNAMIC option is added where
> the C++ code with the libLLVM dependency will be built into a
> libperf-llvm.so and that dlsym-ed and called against. Ideally LLVM
> would extend their C API to avoid this.
>
> v9: Rebase.
Thanks, applied locally, will test this after lunch.
- Arnaldo
> v8: Rebase down to 3 patches. Update commit and cover messages.
> v7: Refactor now the first 5 patches, that largely moved code around,
> have landed. Move the dlopen code to the end of the series so that
> the first 8 patches can be picked improving capstone/LLVM support
> without adding the dlopen code. Rename the cover letter and
> disassembler cleanup patches.
> v6: Refactor the libbfd along with capstone and LLVM, previous patch
> series had tried to avoid this by just removing the deprecated
> BUILD_NONDISTRO code. Remove the libtracefs removal into its own
> patch.
> v5: Rebase and comment typo fix.
> v4: Rebase and addition of a patch removing an unused struct variable.
> v3: Add srcline addr2line fallback trying LLVM first then forking a
> process. This came up in conversation with Steinar Gunderson
> <sesse@google.com>.
> Tweak the cover letter message to try to address Andi Kleen's
> <ak@linux.intel.com> feedback that the series doesn't really
> achieve anything.
> v2: Add mangling of the function names in libperf-llvm.so to avoid
> potential infinite recursion. Add BPF JIT disassembly support to
> LLVM and capstone. Add/rebase the BUILD_NONDISTRO cleanup onto the
> series from:
> https://lore.kernel.org/lkml/20250111202851.1075338-1-irogers@google.com/
> Some other minor additional clean up.
>
> Ian Rogers (3):
> perf capstone: Support for dlopen-ing libcapstone.so
> perf llvm: Support for dlopen-ing libLLVM.so
> perf llvm: Mangle libperf-llvm.so function names
>
> tools/perf/Makefile.config | 13 ++
> tools/perf/Makefile.perf | 24 ++-
> tools/perf/tests/make | 2 +
> tools/perf/util/Build | 2 +-
> tools/perf/util/capstone.c | 285 +++++++++++++++++++++++++----
> tools/perf/util/llvm-c-helpers.cpp | 120 +++++++++++-
> tools/perf/util/llvm-c-helpers.h | 24 ++-
> tools/perf/util/llvm.c | 273 ++++++++++++++++++++++++---
> 8 files changed, 660 insertions(+), 83 deletions(-)
>
> --
> 2.52.0.457.g6b5491de43-goog
>
prev parent reply other threads:[~2026-01-27 17:12 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-27 6:22 [PATCH v9 0/3] Capstone/llvm dlopen support Ian Rogers
2026-01-27 6:23 ` [PATCH v9 1/3] perf capstone: Support for dlopen-ing libcapstone.so Ian Rogers
2026-01-28 18:47 ` Arnaldo Carvalho de Melo
2026-01-30 18:59 ` Ian Rogers
2026-01-30 23:38 ` Ian Rogers
2026-01-27 6:23 ` [PATCH v9 2/3] perf llvm: Support for dlopen-ing libLLVM.so Ian Rogers
2026-01-27 6:23 ` [PATCH v9 3/3] perf llvm: Mangle libperf-llvm.so function names Ian Rogers
2026-01-27 17:12 ` Arnaldo Carvalho de Melo [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aXjyDUjim64yqI4N@x1 \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=charlie@rivosinc.com \
--cc=collin.funk1@gmail.com \
--cc=dvyukov@google.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=justinstitt@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=morbo@google.com \
--cc=namhyung@kernel.org \
--cc=nathan@kernel.org \
--cc=nick.desaulniers+lkml@gmail.com \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.