perf llvm: Reduce LLVM initialization

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>
This commit is contained in:
Ian Rogers 2025-10-05 14:22:03 -07:00 committed by Arnaldo Carvalho de Melo
parent e444c2d4a2
commit 0e52f3f9f1

View 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;