11802d0beSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 27db91e57SPalmer Dabbelt /* 37db91e57SPalmer Dabbelt * Copied from arch/arm64/include/asm/kprobes.h 47db91e57SPalmer Dabbelt * 57db91e57SPalmer Dabbelt * Copyright (C) 2013 Linaro Limited 67db91e57SPalmer Dabbelt * Copyright (C) 2017 SiFive 77db91e57SPalmer Dabbelt */ 87db91e57SPalmer Dabbelt 96b57ba8eSZong Li #ifndef _ASM_RISCV_KPROBES_H 106b57ba8eSZong Li #define _ASM_RISCV_KPROBES_H 117db91e57SPalmer Dabbelt 127db91e57SPalmer Dabbelt #include <asm-generic/kprobes.h> 137db91e57SPalmer Dabbelt 14*c22b0bcbSGuo Ren #ifdef CONFIG_KPROBES 15*c22b0bcbSGuo Ren #include <linux/types.h> 16*c22b0bcbSGuo Ren #include <linux/ptrace.h> 17*c22b0bcbSGuo Ren #include <linux/percpu.h> 18*c22b0bcbSGuo Ren 19*c22b0bcbSGuo Ren #define __ARCH_WANT_KPROBES_INSN_SLOT 20*c22b0bcbSGuo Ren #define MAX_INSN_SIZE 2 21*c22b0bcbSGuo Ren 22*c22b0bcbSGuo Ren #define flush_insn_slot(p) do { } while (0) 23*c22b0bcbSGuo Ren #define kretprobe_blacklist_size 0 24*c22b0bcbSGuo Ren 25*c22b0bcbSGuo Ren #include <asm/probes.h> 26*c22b0bcbSGuo Ren 27*c22b0bcbSGuo Ren struct prev_kprobe { 28*c22b0bcbSGuo Ren struct kprobe *kp; 29*c22b0bcbSGuo Ren unsigned int status; 30*c22b0bcbSGuo Ren }; 31*c22b0bcbSGuo Ren 32*c22b0bcbSGuo Ren /* Single step context for kprobe */ 33*c22b0bcbSGuo Ren struct kprobe_step_ctx { 34*c22b0bcbSGuo Ren unsigned long ss_pending; 35*c22b0bcbSGuo Ren unsigned long match_addr; 36*c22b0bcbSGuo Ren }; 37*c22b0bcbSGuo Ren 38*c22b0bcbSGuo Ren /* per-cpu kprobe control block */ 39*c22b0bcbSGuo Ren struct kprobe_ctlblk { 40*c22b0bcbSGuo Ren unsigned int kprobe_status; 41*c22b0bcbSGuo Ren unsigned long saved_status; 42*c22b0bcbSGuo Ren struct prev_kprobe prev_kprobe; 43*c22b0bcbSGuo Ren struct kprobe_step_ctx ss_ctx; 44*c22b0bcbSGuo Ren }; 45*c22b0bcbSGuo Ren 46*c22b0bcbSGuo Ren void arch_remove_kprobe(struct kprobe *p); 47*c22b0bcbSGuo Ren int kprobe_fault_handler(struct pt_regs *regs, unsigned int trapnr); 48*c22b0bcbSGuo Ren bool kprobe_breakpoint_handler(struct pt_regs *regs); 49*c22b0bcbSGuo Ren bool kprobe_single_step_handler(struct pt_regs *regs); 50*c22b0bcbSGuo Ren void kretprobe_trampoline(void); 51*c22b0bcbSGuo Ren void __kprobes *trampoline_probe_handler(struct pt_regs *regs); 52*c22b0bcbSGuo Ren 53*c22b0bcbSGuo Ren #endif /* CONFIG_KPROBES */ 546b57ba8eSZong Li #endif /* _ASM_RISCV_KPROBES_H */ 55