cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

kprobes.h (2815B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2#ifndef _ASM_POWERPC_KPROBES_H
      3#define _ASM_POWERPC_KPROBES_H
      4
      5#include <asm-generic/kprobes.h>
      6
      7#ifdef __KERNEL__
      8/*
      9 *  Kernel Probes (KProbes)
     10 *
     11 * Copyright (C) IBM Corporation, 2002, 2004
     12 *
     13 * 2002-Oct	Created by Vamsi Krishna S <vamsi_krishna@in.ibm.com> Kernel
     14 *		Probes initial implementation ( includes suggestions from
     15 *		Rusty Russell).
     16 * 2004-Nov	Modified for PPC64 by Ananth N Mavinakayanahalli
     17 *		<ananth@in.ibm.com>
     18 */
     19#include <linux/types.h>
     20#include <linux/ptrace.h>
     21#include <linux/percpu.h>
     22#include <linux/module.h>
     23#include <asm/probes.h>
     24#include <asm/code-patching.h>
     25
     26#ifdef CONFIG_KPROBES
     27#define  __ARCH_WANT_KPROBES_INSN_SLOT
     28
     29struct pt_regs;
     30struct kprobe;
     31
     32typedef ppc_opcode_t kprobe_opcode_t;
     33
     34extern kprobe_opcode_t optinsn_slot;
     35
     36/* Optinsn template address */
     37extern kprobe_opcode_t optprobe_template_entry[];
     38extern kprobe_opcode_t optprobe_template_op_address[];
     39extern kprobe_opcode_t optprobe_template_call_handler[];
     40extern kprobe_opcode_t optprobe_template_insn[];
     41extern kprobe_opcode_t optprobe_template_call_emulate[];
     42extern kprobe_opcode_t optprobe_template_ret[];
     43extern kprobe_opcode_t optprobe_template_end[];
     44
     45/* Fixed instruction size for powerpc */
     46#define MAX_INSN_SIZE		2
     47#define MAX_OPTIMIZED_LENGTH	sizeof(kprobe_opcode_t)	/* 4 bytes */
     48#define MAX_OPTINSN_SIZE	(optprobe_template_end - optprobe_template_entry)
     49#define RELATIVEJUMP_SIZE	sizeof(kprobe_opcode_t)	/* 4 bytes */
     50
     51#define flush_insn_slot(p)	do { } while (0)
     52#define kretprobe_blacklist_size 0
     53
     54void __kretprobe_trampoline(void);
     55extern void arch_remove_kprobe(struct kprobe *p);
     56
     57/* Architecture specific copy of original instruction */
     58struct arch_specific_insn {
     59	/* copy of original instruction */
     60	kprobe_opcode_t *insn;
     61	/*
     62	 * Set in kprobes code, initially to 0. If the instruction can be
     63	 * eumulated, this is set to 1, if not, to -1.
     64	 */
     65	int boostable;
     66};
     67
     68struct prev_kprobe {
     69	struct kprobe *kp;
     70	unsigned long status;
     71	unsigned long saved_msr;
     72};
     73
     74/* per-cpu kprobe control block */
     75struct kprobe_ctlblk {
     76	unsigned long kprobe_status;
     77	unsigned long kprobe_saved_msr;
     78	struct prev_kprobe prev_kprobe;
     79};
     80
     81struct arch_optimized_insn {
     82	kprobe_opcode_t copied_insn[1];
     83	/* detour buffer */
     84	kprobe_opcode_t *insn;
     85};
     86
     87extern int kprobe_exceptions_notify(struct notifier_block *self,
     88					unsigned long val, void *data);
     89extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
     90extern int kprobe_handler(struct pt_regs *regs);
     91extern int kprobe_post_handler(struct pt_regs *regs);
     92#else
     93static inline int kprobe_handler(struct pt_regs *regs) { return 0; }
     94static inline int kprobe_post_handler(struct pt_regs *regs) { return 0; }
     95#endif /* CONFIG_KPROBES */
     96#endif /* __KERNEL__ */
     97#endif	/* _ASM_POWERPC_KPROBES_H */