0001
0002 #ifndef _LINUX_PERF_REGS_H
0003 #define _LINUX_PERF_REGS_H
0004
0005 #include <linux/sched/task_stack.h>
0006
0007 struct perf_regs {
0008 __u64 abi;
0009 struct pt_regs *regs;
0010 };
0011
0012 #ifdef CONFIG_HAVE_PERF_REGS
0013 #include <asm/perf_regs.h>
0014
0015 #ifndef PERF_REG_EXTENDED_MASK
0016 #define PERF_REG_EXTENDED_MASK 0
0017 #endif
0018
0019 u64 perf_reg_value(struct pt_regs *regs, int idx);
0020 int perf_reg_validate(u64 mask);
0021 u64 perf_reg_abi(struct task_struct *task);
0022 void perf_get_regs_user(struct perf_regs *regs_user,
0023 struct pt_regs *regs);
0024 #else
0025
0026 #define PERF_REG_EXTENDED_MASK 0
0027
0028 static inline u64 perf_reg_value(struct pt_regs *regs, int idx)
0029 {
0030 return 0;
0031 }
0032
0033 static inline int perf_reg_validate(u64 mask)
0034 {
0035 return mask ? -ENOSYS : 0;
0036 }
0037
0038 static inline u64 perf_reg_abi(struct task_struct *task)
0039 {
0040 return PERF_SAMPLE_REGS_ABI_NONE;
0041 }
0042
0043 static inline void perf_get_regs_user(struct perf_regs *regs_user,
0044 struct pt_regs *regs)
0045 {
0046 regs_user->regs = task_pt_regs(current);
0047 regs_user->abi = perf_reg_abi(current);
0048 }
0049 #endif
0050 #endif