1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun #include <errno.h> 3*4882a593Smuzhiyun #include "perf_regs.h" 4*4882a593Smuzhiyun #include "event.h" 5*4882a593Smuzhiyun arch_sdt_arg_parse_op(char * old_op __maybe_unused,char ** new_op __maybe_unused)6*4882a593Smuzhiyunint __weak arch_sdt_arg_parse_op(char *old_op __maybe_unused, 7*4882a593Smuzhiyun char **new_op __maybe_unused) 8*4882a593Smuzhiyun { 9*4882a593Smuzhiyun return SDT_ARG_SKIP; 10*4882a593Smuzhiyun } 11*4882a593Smuzhiyun arch__intr_reg_mask(void)12*4882a593Smuzhiyunuint64_t __weak arch__intr_reg_mask(void) 13*4882a593Smuzhiyun { 14*4882a593Smuzhiyun return PERF_REGS_MASK; 15*4882a593Smuzhiyun } 16*4882a593Smuzhiyun arch__user_reg_mask(void)17*4882a593Smuzhiyunuint64_t __weak arch__user_reg_mask(void) 18*4882a593Smuzhiyun { 19*4882a593Smuzhiyun return PERF_REGS_MASK; 20*4882a593Smuzhiyun } 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #ifdef HAVE_PERF_REGS_SUPPORT perf_reg_value(u64 * valp,struct regs_dump * regs,int id)23*4882a593Smuzhiyunint perf_reg_value(u64 *valp, struct regs_dump *regs, int id) 24*4882a593Smuzhiyun { 25*4882a593Smuzhiyun int i, idx = 0; 26*4882a593Smuzhiyun u64 mask = regs->mask; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun if (regs->cache_mask & (1ULL << id)) 29*4882a593Smuzhiyun goto out; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun if (!(mask & (1ULL << id))) 32*4882a593Smuzhiyun return -EINVAL; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun for (i = 0; i < id; i++) { 35*4882a593Smuzhiyun if (mask & (1ULL << i)) 36*4882a593Smuzhiyun idx++; 37*4882a593Smuzhiyun } 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun regs->cache_mask |= (1ULL << id); 40*4882a593Smuzhiyun regs->cache_regs[id] = regs->regs[idx]; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun out: 43*4882a593Smuzhiyun *valp = regs->cache_regs[id]; 44*4882a593Smuzhiyun return 0; 45*4882a593Smuzhiyun } 46*4882a593Smuzhiyun #endif 47