1145519Sdarrenr/* SPDX-License-Identifier: GPL-2.0-only */ 2145510Sdarrenr/* 322514Sdarrenr * Kernel Probes (KProbes) 453024Sguido * include/asm-mips/kprobes.h 522514Sdarrenr * 680486Sdarrenr * Copyright 2006 Sony Corp. 722514Sdarrenr * Copyright 2010 Cavium Networks 822514Sdarrenr */ 922514Sdarrenr 1022514Sdarrenr#ifndef _ASM_KPROBES_H 1122514Sdarrenr#define _ASM_KPROBES_H 1222514Sdarrenr 1322514Sdarrenr#include <asm-generic/kprobes.h> 1422514Sdarrenr 1522514Sdarrenr#ifdef CONFIG_KPROBES 1622514Sdarrenr#include <linux/ptrace.h> 1722514Sdarrenr#include <linux/types.h> 1822514Sdarrenr 1922514Sdarrenr#include <asm/cacheflush.h> 2022514Sdarrenr#include <asm/kdebug.h> 2122514Sdarrenr#include <asm/inst.h> 2222514Sdarrenr 2322514Sdarrenr#define __ARCH_WANT_KPROBES_INSN_SLOT 2422514Sdarrenr 2522514Sdarrenrstruct kprobe; 2622514Sdarrenrstruct pt_regs; 2722514Sdarrenr 2822514Sdarrenrtypedef union mips_instruction kprobe_opcode_t; 2922514Sdarrenr 3022514Sdarrenr#define MAX_INSN_SIZE 2 3122514Sdarrenr 3222514Sdarrenr#define flush_insn_slot(p) \ 3322514Sdarrenrdo { \ 3422514Sdarrenr if (p->addr) \ 3522514Sdarrenr flush_icache_range((unsigned long)p->addr, \ 3622514Sdarrenr (unsigned long)p->addr + \ 3722514Sdarrenr (MAX_INSN_SIZE * sizeof(kprobe_opcode_t))); \ 3822514Sdarrenr} while (0) 3922514Sdarrenr 4022514Sdarrenr 4122514Sdarrenr#define kretprobe_blacklist_size 0 4222514Sdarrenr 4322514Sdarrenrvoid arch_remove_kprobe(struct kprobe *p); 4422514Sdarrenrint kprobe_fault_handler(struct pt_regs *regs, int trapnr); 4522514Sdarrenr 4622514Sdarrenr/* Architecture specific copy of original instruction*/ 4722514Sdarrenrstruct arch_specific_insn { 4822514Sdarrenr /* copy of the original instruction */ 4922514Sdarrenr kprobe_opcode_t *insn; 5022514Sdarrenr}; 5122514Sdarrenr 5222514Sdarrenrstruct prev_kprobe { 5322514Sdarrenr struct kprobe *kp; 5422514Sdarrenr unsigned long status; 5522514Sdarrenr unsigned long old_SR; 5622514Sdarrenr unsigned long saved_SR; 5722514Sdarrenr unsigned long saved_epc; 58255332Scy}; 5922514Sdarrenr 6022514Sdarrenr#define SKIP_DELAYSLOT 0x0001 6122514Sdarrenr 6222514Sdarrenr/* per-cpu kprobe control block */ 6322514Sdarrenrstruct kprobe_ctlblk { 6422514Sdarrenr unsigned long kprobe_status; 6522514Sdarrenr unsigned long kprobe_old_SR; 6622514Sdarrenr unsigned long kprobe_saved_SR; 6722514Sdarrenr unsigned long kprobe_saved_epc; 6822514Sdarrenr /* Per-thread fields, used while emulating branches */ 6922514Sdarrenr unsigned long flags; 7022514Sdarrenr unsigned long target_epc; 7122514Sdarrenr struct prev_kprobe prev_kprobe; 7222514Sdarrenr}; 7322514Sdarrenr 7422514Sdarrenr 7522514Sdarrenr#endif /* CONFIG_KPROBES */ 7622514Sdarrenr#endif /* _ASM_KPROBES_H */ 77255332Scy