51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| #ifndef _LINUX_PERF_REGS_H
 | |
| #define _LINUX_PERF_REGS_H
 | |
| 
 | |
| #include <linux/sched/task_stack.h>
 | |
| 
 | |
| struct perf_regs {
 | |
| 	__u64		abi;
 | |
| 	struct pt_regs	*regs;
 | |
| };
 | |
| 
 | |
| #ifdef CONFIG_HAVE_PERF_REGS
 | |
| #include <asm/perf_regs.h>
 | |
| 
 | |
| #ifndef PERF_REG_EXTENDED_MASK
 | |
| #define PERF_REG_EXTENDED_MASK	0
 | |
| #endif
 | |
| 
 | |
| u64 perf_reg_value(struct pt_regs *regs, int idx);
 | |
| int perf_reg_validate(u64 mask);
 | |
| u64 perf_reg_abi(struct task_struct *task);
 | |
| void perf_get_regs_user(struct perf_regs *regs_user,
 | |
| 			struct pt_regs *regs);
 | |
| #else
 | |
| 
 | |
| #define PERF_REG_EXTENDED_MASK	0
 | |
| 
 | |
| static inline u64 perf_reg_value(struct pt_regs *regs, int idx)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| static inline int perf_reg_validate(u64 mask)
 | |
| {
 | |
| 	return mask ? -ENOSYS : 0;
 | |
| }
 | |
| 
 | |
| static inline u64 perf_reg_abi(struct task_struct *task)
 | |
| {
 | |
| 	return PERF_SAMPLE_REGS_ABI_NONE;
 | |
| }
 | |
| 
 | |
| static inline void perf_get_regs_user(struct perf_regs *regs_user,
 | |
| 				      struct pt_regs *regs)
 | |
| {
 | |
| 	regs_user->regs = task_pt_regs(current);
 | |
| 	regs_user->abi = perf_reg_abi(current);
 | |
| }
 | |
| #endif /* CONFIG_HAVE_PERF_REGS */
 | |
| #endif /* _LINUX_PERF_REGS_H */
 |