mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
If perf is built with LIBCAPSTONE_DLOPEN=1, support dlopen-ing libcapstone.so and then calling the necessary functions by looking them up using dlsym. The types come from capstone.h which means the libcapstone feature check needs to pass, and NO_CAPSTONE=1 hasn't been defined. This will cause the definition of HAVE_LIBCAPSTONE_SUPPORT. Earlier versions of this code tried to declare the necessary capstone.h constants and structs, but they weren't stable and caused breakages across libcapstone releases. Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.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: 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: 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> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
58 lines
1.7 KiB
C
58 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __PERF_CAPSTONE_H
|
|
#define __PERF_CAPSTONE_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <linux/compiler.h>
|
|
#include <linux/types.h>
|
|
|
|
struct annotate_args;
|
|
struct machine;
|
|
struct symbol;
|
|
struct thread;
|
|
|
|
#ifdef HAVE_LIBCAPSTONE_SUPPORT
|
|
ssize_t capstone__fprintf_insn_asm(struct machine *machine, struct thread *thread, u8 cpumode,
|
|
bool is64bit, const uint8_t *code, size_t code_size,
|
|
uint64_t ip, int *lenp, int print_opts, FILE *fp);
|
|
int symbol__disassemble_capstone(const char *filename, struct symbol *sym,
|
|
struct annotate_args *args);
|
|
int symbol__disassemble_capstone_powerpc(const char *filename, struct symbol *sym,
|
|
struct annotate_args *args);
|
|
|
|
#else /* !HAVE_LIBCAPSTONE_SUPPORT */
|
|
static inline ssize_t capstone__fprintf_insn_asm(struct machine *machine __maybe_unused,
|
|
struct thread *thread __maybe_unused,
|
|
u8 cpumode __maybe_unused,
|
|
bool is64bit __maybe_unused,
|
|
const uint8_t *code __maybe_unused,
|
|
size_t code_size __maybe_unused,
|
|
uint64_t ip __maybe_unused,
|
|
int *lenp __maybe_unused,
|
|
int print_opts __maybe_unused,
|
|
FILE *fp __maybe_unused)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
static inline int symbol__disassemble_capstone(const char *filename __maybe_unused,
|
|
struct symbol *sym __maybe_unused,
|
|
struct annotate_args *args __maybe_unused)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
static inline int symbol__disassemble_capstone_powerpc(const char *filename __maybe_unused,
|
|
struct symbol *sym __maybe_unused,
|
|
struct annotate_args *args __maybe_unused)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
#endif /* HAVE_LIBCAPSTONE_SUPPORT */
|
|
|
|
#endif /* __PERF_CAPSTONE_H */
|