]> www.infradead.org Git - users/hch/misc.git/commitdiff
perf llvm: Reduce LLVM initialization
authorIan Rogers <irogers@google.com>
Sun, 5 Oct 2025 21:22:03 +0000 (14:22 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 6 Oct 2025 19:27:07 +0000 (16:27 -0300)
Move the 3 LLVM initialization routines to be called in a single
init_llvm function that has its own bool to avoid repeated
initialization.

Reduce the scope of triplet and avoid copying strings for x86.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexandre Ghiti <alexghiti@rivosinc.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.ibm.com>
Cc: Bill Wendling <morbo@google.com>
Cc: Charlie Jenkins <charlie@rivosinc.com>
Cc: Collin Funk <collin.funk1@gmail.com>
Cc: Dmitriy Vyukov <dvyukov@google.com>
Cc: Dr. David Alan Gilbert <linux@treblig.org>
Cc: Eric Biggers <ebiggers@kernel.org>
Cc: Haibo Xu <haibo1.xu@intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Justin Stitt <justinstitt@google.com>
Cc: Li Huafei <lihuafei1@huawei.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Song Liu <song@kernel.org>
Cc: Stephen Brennan <stephen.s.brennan@oracle.com>
[ Move init_llvm() under HAVE_LIBLLVM_SUPPORT to fix the build ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/llvm.c

index ddc737194692f507219ed15885f1939dae33cd84..b71649d616e3aae9ed19012b0191a0dd691173d7 100644 (file)
@@ -74,8 +74,19 @@ void dso__free_a2l_llvm(struct dso *dso __maybe_unused)
        /* Nothing to free. */
 }
 
+#ifdef HAVE_LIBLLVM_SUPPORT
+static void init_llvm(void)
+{
+       static bool init;
+
+       if (!init) {
+               LLVMInitializeAllTargetInfos();
+               LLVMInitializeAllTargetMCs();
+               LLVMInitializeAllDisassemblers();
+               init = true;
+       }
+}
 
-#if defined(HAVE_LIBLLVM_SUPPORT)
 struct find_file_offset_data {
        u64 ip;
        u64 offset;
@@ -184,7 +195,6 @@ int symbol__disassemble_llvm(const char *filename, struct symbol *sym,
        u64 len;
        u64 pc;
        bool is_64bit;
-       char triplet[64];
        char disasm_buf[2048];
        size_t disasm_len;
        struct disasm_line *dl;
@@ -197,26 +207,25 @@ int symbol__disassemble_llvm(const char *filename, struct symbol *sym,
        if (args->options->objdump_path)
                return -1;
 
-       LLVMInitializeAllTargetInfos();
-       LLVMInitializeAllTargetMCs();
-       LLVMInitializeAllDisassemblers();
-
        buf = read_symbol(filename, map, sym, &len, &is_64bit);
        if (buf == NULL)
                return -1;
 
+       init_llvm();
        if (arch__is(args->arch, "x86")) {
-               if (is_64bit)
-                       scnprintf(triplet, sizeof(triplet), "x86_64-pc-linux");
-               else
-                       scnprintf(triplet, sizeof(triplet), "i686-pc-linux");
+               const char *triplet = is_64bit ? "x86_64-pc-linux" : "i686-pc-linux";
+
+               disasm = LLVMCreateDisasm(triplet, &storage, /*tag_type=*/0,
+                                         /*get_op_info=*/NULL, symbol_lookup_callback);
        } else {
+               char triplet[64];
+
                scnprintf(triplet, sizeof(triplet), "%s-linux-gnu",
                          args->arch->name);
+               disasm = LLVMCreateDisasm(triplet, &storage, /*tag_type=*/0,
+                                         /*get_op_info=*/NULL, symbol_lookup_callback);
        }
 
-       disasm = LLVMCreateDisasm(triplet, &storage, 0, NULL,
-                                 symbol_lookup_callback);
        if (disasm == NULL)
                goto err;