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 #ifdef CONFIG_KPROBES 14 15 #include <asm-generic/kprobes.h> 16 #include <linux/types.h> 17 #include <linux/ptrace.h> 18 #include <linux/notifier.h> 19 20 #define PARISC_KPROBES_BREAK_INSN 0x3ff801f 21 #define PARISC_KPROBES_BREAK_INSN2 0x3ff801e 22 #define __ARCH_WANT_KPROBES_INSN_SLOT 23 #define MAX_INSN_SIZE 2 24 25 typedef u32 kprobe_opcode_t; 26 struct kprobe; 27 28 void arch_remove_kprobe(struct kprobe *p); 29 30 #define flush_insn_slot(p) \ 31 flush_icache_range((unsigned long)&(p)->ainsn.insn[0], \ 32 (unsigned long)&(p)->ainsn.insn[0] + \ 33 MAX_INSN_SIZE*sizeof(kprobe_opcode_t)) 34 35 #define kretprobe_blacklist_size 0 36 37 struct arch_specific_insn { 38 kprobe_opcode_t *insn; 39 }; 40 41 struct prev_kprobe { 42 struct kprobe *kp; 43 unsigned long status; 44 }; 45 46 struct kprobe_ctlblk { 47 unsigned int kprobe_status; 48 struct prev_kprobe prev_kprobe; 49 unsigned long iaoq[2]; 50 }; 51 52 int __kprobes parisc_kprobe_break_handler(struct pt_regs *regs); 53 int __kprobes parisc_kprobe_ss_handler(struct pt_regs *regs); 54 static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr) 55 { 56 return 0; 57 } 58 59 #endif /* CONFIG_KPROBES */ 60 #endif /* _PARISC_KPROBES_H */ 61