xref: /linux/tools/perf/util/perf_regs.h (revision 79790b6818e96c58fe2bffee1b418c16e64e7b80)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
22bcd355bSJiri Olsa #ifndef __PERF_REGS_H
32bcd355bSJiri Olsa #define __PERF_REGS_H
42bcd355bSJiri Olsa 
5d944c4eeSBorislav Petkov #include <linux/types.h>
69fb47654SSukadev Bhattiprolu #include <linux/compiler.h>
70c4e774fSJiri Olsa 
80c4e774fSJiri Olsa struct regs_dump;
9c9b951c4SJiri Olsa 
10c5e991eeSStephane Eranian struct sample_reg {
11c5e991eeSStephane Eranian 	const char *name;
12c5e991eeSStephane Eranian 	uint64_t mask;
13c5e991eeSStephane Eranian };
14ffc60350SGerman Gomez 
15ffc60350SGerman Gomez #define SMPL_REG_MASK(b) (1ULL << (b))
16ffc60350SGerman Gomez #define SMPL_REG(n, b) { .name = #n, .mask = SMPL_REG_MASK(b) }
17ffc60350SGerman Gomez #define SMPL_REG2_MASK(b) (3ULL << (b))
18ffc60350SGerman Gomez #define SMPL_REG2(n, b) { .name = #n, .mask = SMPL_REG2_MASK(b) }
19af4aeaddSStephane Eranian #define SMPL_REG_END { .name = NULL }
20c5e991eeSStephane Eranian 
21d451a205SRavi Bangoria enum {
22d451a205SRavi Bangoria 	SDT_ARG_VALID = 0,
23d451a205SRavi Bangoria 	SDT_ARG_SKIP,
24d451a205SRavi Bangoria };
25d451a205SRavi Bangoria 
26d451a205SRavi Bangoria int arch_sdt_arg_parse_op(char *old_op, char **new_op);
27af785e75SKan Liang uint64_t arch__intr_reg_mask(void);
28af785e75SKan Liang uint64_t arch__user_reg_mask(void);
29*9a4e47efSLeo Yan const struct sample_reg *arch__sample_reg_masks(void);
3042466b9fSIan Rogers 
3183869019SGerman Gomez const char *perf_reg_name(int id, const char *arch);
32c9b951c4SJiri Olsa int perf_reg_value(u64 *valp, struct regs_dump *regs, int id);
3334af56afSLeo Yan uint64_t perf_arch_reg_ip(const char *arch);
3434af56afSLeo Yan uint64_t perf_arch_reg_sp(const char *arch);
355000e7f6SLeo Yan const char *__perf_reg_name_arm64(int id);
3634af56afSLeo Yan uint64_t __perf_reg_ip_arm64(void);
3734af56afSLeo Yan uint64_t __perf_reg_sp_arm64(void);
385000e7f6SLeo Yan const char *__perf_reg_name_arm(int id);
3934af56afSLeo Yan uint64_t __perf_reg_ip_arm(void);
4034af56afSLeo Yan uint64_t __perf_reg_sp_arm(void);
415000e7f6SLeo Yan const char *__perf_reg_name_csky(int id);
4234af56afSLeo Yan uint64_t __perf_reg_ip_csky(void);
4334af56afSLeo Yan uint64_t __perf_reg_sp_csky(void);
445000e7f6SLeo Yan const char *__perf_reg_name_loongarch(int id);
4534af56afSLeo Yan uint64_t __perf_reg_ip_loongarch(void);
4634af56afSLeo Yan uint64_t __perf_reg_sp_loongarch(void);
475000e7f6SLeo Yan const char *__perf_reg_name_mips(int id);
4834af56afSLeo Yan uint64_t __perf_reg_ip_mips(void);
4934af56afSLeo Yan uint64_t __perf_reg_sp_mips(void);
505000e7f6SLeo Yan const char *__perf_reg_name_powerpc(int id);
5134af56afSLeo Yan uint64_t __perf_reg_ip_powerpc(void);
5234af56afSLeo Yan uint64_t __perf_reg_sp_powerpc(void);
535000e7f6SLeo Yan const char *__perf_reg_name_riscv(int id);
5434af56afSLeo Yan uint64_t __perf_reg_ip_riscv(void);
5534af56afSLeo Yan uint64_t __perf_reg_sp_riscv(void);
565000e7f6SLeo Yan const char *__perf_reg_name_s390(int id);
5734af56afSLeo Yan uint64_t __perf_reg_ip_s390(void);
5834af56afSLeo Yan uint64_t __perf_reg_sp_s390(void);
595000e7f6SLeo Yan const char *__perf_reg_name_x86(int id);
6034af56afSLeo Yan uint64_t __perf_reg_ip_x86(void);
6134af56afSLeo Yan uint64_t __perf_reg_sp_x86(void);
6234af56afSLeo Yan 
DWARF_MINIMAL_REGS(const char * arch)6334af56afSLeo Yan static inline uint64_t DWARF_MINIMAL_REGS(const char *arch)
6434af56afSLeo Yan {
6534af56afSLeo Yan 	return (1ULL << perf_arch_reg_ip(arch)) | (1ULL << perf_arch_reg_sp(arch));
6634af56afSLeo Yan }
67c9b951c4SJiri Olsa 
682bcd355bSJiri Olsa #endif /* __PERF_REGS_H */
69