Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation version 2 of the license this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 59 temple place suite 330 boston ma 02111 1307 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 83 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Richard Fontana <rfontana@redhat.com> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Reviewed-by: Allison Randal <allison@lohutok.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190527070034.021731668@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
78 lines
1.6 KiB
C
78 lines
1.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Kernel Probes (KProbes)
|
|
* include/asm-mips/kprobes.h
|
|
*
|
|
* Copyright 2006 Sony Corp.
|
|
* Copyright 2010 Cavium Networks
|
|
*/
|
|
|
|
#ifndef _ASM_KPROBES_H
|
|
#define _ASM_KPROBES_H
|
|
|
|
#include <asm-generic/kprobes.h>
|
|
|
|
#ifdef CONFIG_KPROBES
|
|
#include <linux/ptrace.h>
|
|
#include <linux/types.h>
|
|
|
|
#include <asm/cacheflush.h>
|
|
#include <asm/kdebug.h>
|
|
#include <asm/inst.h>
|
|
|
|
#define __ARCH_WANT_KPROBES_INSN_SLOT
|
|
|
|
struct kprobe;
|
|
struct pt_regs;
|
|
|
|
typedef union mips_instruction kprobe_opcode_t;
|
|
|
|
#define MAX_INSN_SIZE 2
|
|
|
|
#define flush_insn_slot(p) \
|
|
do { \
|
|
if (p->addr) \
|
|
flush_icache_range((unsigned long)p->addr, \
|
|
(unsigned long)p->addr + \
|
|
(MAX_INSN_SIZE * sizeof(kprobe_opcode_t))); \
|
|
} while (0)
|
|
|
|
|
|
#define kretprobe_blacklist_size 0
|
|
|
|
void arch_remove_kprobe(struct kprobe *p);
|
|
|
|
/* Architecture specific copy of original instruction*/
|
|
struct arch_specific_insn {
|
|
/* copy of the original instruction */
|
|
kprobe_opcode_t *insn;
|
|
};
|
|
|
|
struct prev_kprobe {
|
|
struct kprobe *kp;
|
|
unsigned long status;
|
|
unsigned long old_SR;
|
|
unsigned long saved_SR;
|
|
unsigned long saved_epc;
|
|
};
|
|
|
|
#define SKIP_DELAYSLOT 0x0001
|
|
|
|
/* per-cpu kprobe control block */
|
|
struct kprobe_ctlblk {
|
|
unsigned long kprobe_status;
|
|
unsigned long kprobe_old_SR;
|
|
unsigned long kprobe_saved_SR;
|
|
unsigned long kprobe_saved_epc;
|
|
/* Per-thread fields, used while emulating branches */
|
|
unsigned long flags;
|
|
unsigned long target_epc;
|
|
struct prev_kprobe prev_kprobe;
|
|
};
|
|
|
|
extern int kprobe_exceptions_notify(struct notifier_block *self,
|
|
unsigned long val, void *data);
|
|
|
|
#endif /* CONFIG_KPROBES */
|
|
#endif /* _ASM_KPROBES_H */
|