Re: [PATCH] perf llvm: Specify features="+all" for aarch64

From: Ian Rogers

Date: Tue Mar 03 2026 - 18:32:08 EST


On Tue, Mar 3, 2026 at 3:01 PM Peter Collingbourne <pcc@xxxxxxxxxx> wrote:
>
> This is consistent with what llvm-objdump does (see [1]) and allows
> the LLVM disassembler to disassemble instructions not in the base
> instruction set.
>
> [1] https://reviews.llvm.org/D127741
>
> Link: https://linux-review.googlesource.com/id/I52e4fef18d2e12b45f875231fa9d3efff2538fd4
> Signed-off-by: Peter Collingbourne <pcc@xxxxxxxxxx>

Reviewed-by: Ian Rogers <irogers@xxxxxxxxxx>

Thanks,
Ian

> ---
> tools/perf/util/llvm.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/tools/perf/util/llvm.c b/tools/perf/util/llvm.c
> index 87fceae8488a7..44eff99970fe2 100644
> --- a/tools/perf/util/llvm.c
> +++ b/tools/perf/util/llvm.c
> @@ -153,11 +153,17 @@ int symbol__disassemble_llvm(const char *filename, struct symbol *sym,
> /*get_op_info=*/NULL, symbol_lookup_callback);
> } else {
> char triplet[64];
> + const char *features = NULL;
>
> scnprintf(triplet, sizeof(triplet), "%s-linux-gnu",
> args->arch->name);
> - disasm = LLVMCreateDisasm(triplet, &storage, /*tag_type=*/0,
> - /*get_op_info=*/NULL, symbol_lookup_callback);
> + if (args->arch->id.e_machine == EM_AARCH64)
> + features = "+all";
> + disasm = LLVMCreateDisasmCPUFeatures(triplet, /*cpu=*/"",
> + features, &storage,
> + /*tag_type=*/0,
> + /*get_op_info=*/NULL,
> + symbol_lookup_callback);
> }
>
> if (disasm == NULL)
> --
> 2.53.0.473.g4a7958ca14-goog
>