18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * arch/arm/include/asm/probes.h
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Original contents copied from arch/arm/include/asm/kprobes.h
68c2ecf20Sopenharmony_ci * which contains the following notice...
78c2ecf20Sopenharmony_ci *
88c2ecf20Sopenharmony_ci * Copyright (C) 2006, 2007 Motorola Inc.
98c2ecf20Sopenharmony_ci */
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#ifndef _ASM_PROBES_H
128c2ecf20Sopenharmony_ci#define _ASM_PROBES_H
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#ifndef __ASSEMBLY__
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_citypedef u32 probes_opcode_t;
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_cistruct arch_probes_insn;
198c2ecf20Sopenharmony_citypedef void (probes_insn_handler_t)(probes_opcode_t,
208c2ecf20Sopenharmony_ci				     struct arch_probes_insn *,
218c2ecf20Sopenharmony_ci				     struct pt_regs *);
228c2ecf20Sopenharmony_citypedef unsigned long (probes_check_cc)(unsigned long);
238c2ecf20Sopenharmony_citypedef void (probes_insn_singlestep_t)(probes_opcode_t,
248c2ecf20Sopenharmony_ci					struct arch_probes_insn *,
258c2ecf20Sopenharmony_ci					struct pt_regs *);
268c2ecf20Sopenharmony_citypedef void (probes_insn_fn_t)(void);
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci/* Architecture specific copy of original instruction. */
298c2ecf20Sopenharmony_cistruct arch_probes_insn {
308c2ecf20Sopenharmony_ci	probes_opcode_t			*insn;
318c2ecf20Sopenharmony_ci	probes_insn_handler_t		*insn_handler;
328c2ecf20Sopenharmony_ci	probes_check_cc			*insn_check_cc;
338c2ecf20Sopenharmony_ci	probes_insn_singlestep_t	*insn_singlestep;
348c2ecf20Sopenharmony_ci	probes_insn_fn_t		*insn_fn;
358c2ecf20Sopenharmony_ci	int				stack_space;
368c2ecf20Sopenharmony_ci	unsigned long			register_usage_flags;
378c2ecf20Sopenharmony_ci	bool				kprobe_direct_exec;
388c2ecf20Sopenharmony_ci};
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci#endif /* __ASSEMBLY__ */
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci/*
438c2ecf20Sopenharmony_ci * We assume one instruction can consume at most 64 bytes stack, which is
448c2ecf20Sopenharmony_ci * 'push {r0-r15}'. Instructions consume more or unknown stack space like
458c2ecf20Sopenharmony_ci * 'str r0, [sp, #-80]' and 'str r0, [sp, r1]' should be prohibit to probe.
468c2ecf20Sopenharmony_ci */
478c2ecf20Sopenharmony_ci#define MAX_STACK_SIZE			64
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci#endif
50