[PATCH] perf llvm: Clean up after a failed disassembly

From: Peter Collingbourne

Date: Tue Mar 03 2026 - 18:01:16 EST


An error returned from a failed backend will cause perf to call the next
backend. If the error happens mid-function, e.g. due to an unrecognized
instruction, we will end up with duplicated instructions in the output
unless the backend that failed deletes any instructions that it created
before failing. The capstone backend was already doing this but the LLVM
backend was not; fix it.

Link: https://linux-review.googlesource.com/id/I377eef3cd662ab98fbcd69e5004a259fa3d7aa06
Signed-off-by: Peter Collingbourne <pcc@xxxxxxxxxx>
---
tools/perf/util/llvm.c | 9 +++++++++
1 file changed, 9 insertions(+)

diff --git a/tools/perf/util/llvm.c b/tools/perf/util/llvm.c
index 0d126d233c019..87fceae8488a7 100644
--- a/tools/perf/util/llvm.c
+++ b/tools/perf/util/llvm.c
@@ -261,6 +261,15 @@ int symbol__disassemble_llvm(const char *filename, struct symbol *sym,
ret = 0;

err:
+ if (ret != 0) {
+ struct disasm_line *tmp;
+
+ list_for_each_entry_safe(dl, tmp, &notes->src->source,
+ al.node) {
+ list_del(&dl->al.node);
+ disasm_line__free(dl);
+ }
+ }
LLVMDisasmDispose(disasm);
free(code_buf);
free(line_storage);
--
2.53.0.473.g4a7958ca14-goog