summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Collingbourne <pcc@google.com>2026-03-03 15:00:54 -0800
committerNamhyung Kim <namhyung@kernel.org>2026-03-04 18:05:18 -0800
commitb1718b0367ba31e8db273e3896ebd1707bcbe59e (patch)
treed2e579a32704677a5e59d918378436a6b3d75055
parent6910944bf0b92fea63d5a7aeed69e4b9c14fd01b (diff)
perf annotate: Specify llvm features="+all" for aarch64
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@google.com> Reviewed-by: Ian Rogers <irogers@google.com> Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
-rw-r--r--tools/perf/util/llvm.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/tools/perf/util/llvm.c b/tools/perf/util/llvm.c
index 0d126d233c01..a0deb742a733 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)