root/arch/mips/include/asm/kprobes.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 */

/* [<][>][^][v][top][bottom][index][help] */