xref: /openbmc/linux/arch/mips/include/asm/kprobes.h (revision 0898782247ae533d1f4e47a06bc5d4870931b284)
1  /* SPDX-License-Identifier: GPL-2.0-only */
2  /*
3   *  Kernel Probes (KProbes)
4   *  include/asm-mips/kprobes.h
5   *
6   *  Copyright 2006 Sony Corp.
7   *  Copyright 2010 Cavium Networks
8   */
9  
10  #ifndef _ASM_KPROBES_H
11  #define _ASM_KPROBES_H
12  
13  #include <asm-generic/kprobes.h>
14  
15  #ifdef CONFIG_KPROBES
16  #include <linux/ptrace.h>
17  #include <linux/types.h>
18  
19  #include <asm/cacheflush.h>
20  #include <asm/kdebug.h>
21  #include <asm/inst.h>
22  
23  #define	 __ARCH_WANT_KPROBES_INSN_SLOT
24  
25  struct kprobe;
26  struct pt_regs;
27  
28  typedef union mips_instruction kprobe_opcode_t;
29  
30  #define MAX_INSN_SIZE 2
31  
32  #define flush_insn_slot(p)						\
33  do {									\
34  	if (p->addr)							\
35  		flush_icache_range((unsigned long)p->addr,		\
36  			   (unsigned long)p->addr +			\
37  			   (MAX_INSN_SIZE * sizeof(kprobe_opcode_t)));	\
38  } while (0)
39  
40  
41  #define kretprobe_blacklist_size 0
42  
43  void arch_remove_kprobe(struct kprobe *p);
44  int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
45  
46  /* Architecture specific copy of original instruction*/
47  struct arch_specific_insn {
48  	/* copy of the original instruction */
49  	kprobe_opcode_t *insn;
50  };
51  
52  struct prev_kprobe {
53  	struct kprobe *kp;
54  	unsigned long status;
55  	unsigned long old_SR;
56  	unsigned long saved_SR;
57  	unsigned long saved_epc;
58  };
59  
60  #define SKIP_DELAYSLOT 0x0001
61  
62  /* per-cpu kprobe control block */
63  struct kprobe_ctlblk {
64  	unsigned long kprobe_status;
65  	unsigned long kprobe_old_SR;
66  	unsigned long kprobe_saved_SR;
67  	unsigned long kprobe_saved_epc;
68  	/* Per-thread fields, used while emulating branches */
69  	unsigned long flags;
70  	unsigned long target_epc;
71  	struct prev_kprobe prev_kprobe;
72  };
73  
74  extern int kprobe_exceptions_notify(struct notifier_block *self,
75  				    unsigned long val, void *data);
76  
77  #endif /* CONFIG_KPROBES */
78  #endif /* _ASM_KPROBES_H */
79