xref: /openbmc/linux/arch/arm/include/asm/probes.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1  /* SPDX-License-Identifier: GPL-2.0-only */
2  /*
3   * arch/arm/include/asm/probes.h
4   *
5   * Original contents copied from arch/arm/include/asm/kprobes.h
6   * which contains the following notice...
7   *
8   * Copyright (C) 2006, 2007 Motorola Inc.
9   */
10  
11  #ifndef _ASM_PROBES_H
12  #define _ASM_PROBES_H
13  
14  #ifndef __ASSEMBLY__
15  
16  typedef u32 probes_opcode_t;
17  
18  struct arch_probes_insn;
19  typedef void (probes_insn_handler_t)(probes_opcode_t,
20  				     struct arch_probes_insn *,
21  				     struct pt_regs *);
22  typedef unsigned long (probes_check_cc)(unsigned long);
23  typedef void (probes_insn_singlestep_t)(probes_opcode_t,
24  					struct arch_probes_insn *,
25  					struct pt_regs *);
26  typedef void (probes_insn_fn_t)(void);
27  
28  /* Architecture specific copy of original instruction. */
29  struct arch_probes_insn {
30  	probes_opcode_t			*insn;
31  	probes_insn_handler_t		*insn_handler;
32  	probes_check_cc			*insn_check_cc;
33  	probes_insn_singlestep_t	*insn_singlestep;
34  	probes_insn_fn_t		*insn_fn;
35  	int				stack_space;
36  	unsigned long			register_usage_flags;
37  	bool				kprobe_direct_exec;
38  };
39  
40  #endif /* __ASSEMBLY__ */
41  
42  /*
43   * We assume one instruction can consume at most 64 bytes stack, which is
44   * 'push {r0-r15}'. Instructions consume more or unknown stack space like
45   * 'str r0, [sp, #-80]' and 'str r0, [sp, r1]' should be prohibit to probe.
46   */
47  #define MAX_STACK_SIZE			64
48  
49  #endif
50