diff options
Diffstat (limited to 'tools/perf/util/perf_regs.h')
-rw-r--r-- | tools/perf/util/perf_regs.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tools/perf/util/perf_regs.h b/tools/perf/util/perf_regs.h new file mode 100644 index 000000000..ce1127af0 --- /dev/null +++ b/tools/perf/util/perf_regs.h @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __PERF_REGS_H +#define __PERF_REGS_H + +#include <linux/types.h> +#include <linux/compiler.h> + +struct regs_dump; + +struct sample_reg { + const char *name; + uint64_t mask; +}; + +#define SMPL_REG_MASK(b) (1ULL << (b)) +#define SMPL_REG(n, b) { .name = #n, .mask = SMPL_REG_MASK(b) } +#define SMPL_REG2_MASK(b) (3ULL << (b)) +#define SMPL_REG2(n, b) { .name = #n, .mask = SMPL_REG2_MASK(b) } +#define SMPL_REG_END { .name = NULL } + +enum { + SDT_ARG_VALID = 0, + SDT_ARG_SKIP, +}; + +int arch_sdt_arg_parse_op(char *old_op, char **new_op); +uint64_t arch__intr_reg_mask(void); +uint64_t arch__user_reg_mask(void); + +#ifdef HAVE_PERF_REGS_SUPPORT +extern const struct sample_reg sample_reg_masks[]; + +#include <perf_regs.h> + +#define DWARF_MINIMAL_REGS ((1ULL << PERF_REG_IP) | (1ULL << PERF_REG_SP)) + +const char *perf_reg_name(int id, const char *arch); +int perf_reg_value(u64 *valp, struct regs_dump *regs, int id); + +#else +#define PERF_REGS_MASK 0 +#define PERF_REGS_MAX 0 + +#define DWARF_MINIMAL_REGS PERF_REGS_MASK + +static inline const char *perf_reg_name(int id __maybe_unused, const char *arch __maybe_unused) +{ + return "unknown"; +} + +static inline int perf_reg_value(u64 *valp __maybe_unused, + struct regs_dump *regs __maybe_unused, + int id __maybe_unused) +{ + return 0; +} +#endif /* HAVE_PERF_REGS_SUPPORT */ +#endif /* __PERF_REGS_H */ |