162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * arch/arm/include/asm/probes.h 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Original contents copied from arch/arm/include/asm/kprobes.h 662306a36Sopenharmony_ci * which contains the following notice... 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Copyright (C) 2006, 2007 Motorola Inc. 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#ifndef _ASM_PROBES_H 1262306a36Sopenharmony_ci#define _ASM_PROBES_H 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_citypedef u32 probes_opcode_t; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistruct arch_probes_insn; 1962306a36Sopenharmony_citypedef void (probes_insn_handler_t)(probes_opcode_t, 2062306a36Sopenharmony_ci struct arch_probes_insn *, 2162306a36Sopenharmony_ci struct pt_regs *); 2262306a36Sopenharmony_citypedef unsigned long (probes_check_cc)(unsigned long); 2362306a36Sopenharmony_citypedef void (probes_insn_singlestep_t)(probes_opcode_t, 2462306a36Sopenharmony_ci struct arch_probes_insn *, 2562306a36Sopenharmony_ci struct pt_regs *); 2662306a36Sopenharmony_citypedef void (probes_insn_fn_t)(void); 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci/* Architecture specific copy of original instruction. */ 2962306a36Sopenharmony_cistruct arch_probes_insn { 3062306a36Sopenharmony_ci probes_opcode_t *insn; 3162306a36Sopenharmony_ci probes_insn_handler_t *insn_handler; 3262306a36Sopenharmony_ci probes_check_cc *insn_check_cc; 3362306a36Sopenharmony_ci probes_insn_singlestep_t *insn_singlestep; 3462306a36Sopenharmony_ci probes_insn_fn_t *insn_fn; 3562306a36Sopenharmony_ci int stack_space; 3662306a36Sopenharmony_ci unsigned long register_usage_flags; 3762306a36Sopenharmony_ci bool kprobe_direct_exec; 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci#endif /* __ASSEMBLY__ */ 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci/* 4362306a36Sopenharmony_ci * We assume one instruction can consume at most 64 bytes stack, which is 4462306a36Sopenharmony_ci * 'push {r0-r15}'. Instructions consume more or unknown stack space like 4562306a36Sopenharmony_ci * 'str r0, [sp, #-80]' and 'str r0, [sp, r1]' should be prohibit to probe. 4662306a36Sopenharmony_ci */ 4762306a36Sopenharmony_ci#define MAX_STACK_SIZE 64 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci#endif 50