linux/arch/mips/include/asm/kprobes.h
<<
>>
Prefs
   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
  25struct kprobe;
  26struct pt_regs;
  27
  28typedef union mips_instruction kprobe_opcode_t;
  29
  30#define MAX_INSN_SIZE 2
  31
  32#define flush_insn_slot(p)                                              \
  33do {                                                                    \
  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
  43void arch_remove_kprobe(struct kprobe *p);
  44int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
  45
  46/* Architecture specific copy of original instruction*/
  47struct arch_specific_insn {
  48        /* copy of the original instruction */
  49        kprobe_opcode_t *insn;
  50};
  51
  52struct 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 */
  63struct 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
  74extern 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