1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * arch/parisc/include/asm/kprobes.h 4 * 5 * PA-RISC kprobes implementation 6 * 7 * Copyright (c) 2019 Sven Schnelle <svens@stackframe.org> 8 */ 9 10 #ifndef _PARISC_KPROBES_H 11 #define _PARISC_KPROBES_H 12 13 #include <asm-generic/kprobes.h> 14 15 #ifdef CONFIG_KPROBES 16 17 #include <linux/types.h> 18 #include <linux/ptrace.h> 19 #include <linux/notifier.h> 20 21 #define PARISC_KPROBES_BREAK_INSN 0x3ff801f 22 #define PARISC_KPROBES_BREAK_INSN2 0x3ff801e 23 #define __ARCH_WANT_KPROBES_INSN_SLOT 24 #define MAX_INSN_SIZE 2 25 26 typedef u32 kprobe_opcode_t; 27 struct kprobe; 28 29 void arch_remove_kprobe(struct kprobe *p); 30 31 #define flush_insn_slot(p) \ 32 flush_icache_range((unsigned long)&(p)->ainsn.insn[0], \ 33 (unsigned long)&(p)->ainsn.insn[0] + \ 34 MAX_INSN_SIZE*sizeof(kprobe_opcode_t)) 35 36 #define kretprobe_blacklist_size 0 37 38 struct arch_specific_insn { 39 kprobe_opcode_t *insn; 40 }; 41 42 struct prev_kprobe { 43 struct kprobe *kp; 44 unsigned long status; 45 }; 46 47 struct kprobe_ctlblk { 48 unsigned int kprobe_status; 49 struct prev_kprobe prev_kprobe; 50 unsigned long iaoq[2]; 51 }; 52 53 int __kprobes parisc_kprobe_break_handler(struct pt_regs *regs); 54 int __kprobes parisc_kprobe_ss_handler(struct pt_regs *regs); 55 static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr) 56 { 57 return 0; 58 } 59 60 #endif /* CONFIG_KPROBES */ 61 #endif /* _PARISC_KPROBES_H */ 62