~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/powerpc/include/asm/kprobes.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 
 29 struct pt_regs;
 30 struct kprobe;
 31 
 32 typedef u32 kprobe_opcode_t;
 33 
 34 extern kprobe_opcode_t optinsn_slot;
 35 
 36 /* Optinsn template address */
 37 extern kprobe_opcode_t optprobe_template_entry[];
 38 extern kprobe_opcode_t optprobe_template_op_address[];
 39 extern kprobe_opcode_t optprobe_template_call_handler[];
 40 extern kprobe_opcode_t optprobe_template_insn[];
 41 extern kprobe_opcode_t optprobe_template_call_emulate[];
 42 extern kprobe_opcode_t optprobe_template_ret[];
 43 extern 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 
 54 void __kretprobe_trampoline(void);
 55 extern void arch_remove_kprobe(struct kprobe *p);
 56 
 57 /* Architecture specific copy of original instruction */
 58 struct 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 
 68 struct prev_kprobe {
 69         struct kprobe *kp;
 70         unsigned long status;
 71         unsigned long saved_msr;
 72 };
 73 
 74 /* per-cpu kprobe control block */
 75 struct kprobe_ctlblk {
 76         unsigned long kprobe_status;
 77         unsigned long kprobe_saved_msr;
 78         struct prev_kprobe prev_kprobe;
 79 };
 80 
 81 struct arch_optimized_insn {
 82         kprobe_opcode_t copied_insn[1];
 83         /* detour buffer */
 84         kprobe_opcode_t *insn;
 85 };
 86 
 87 extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
 88 extern int kprobe_handler(struct pt_regs *regs);
 89 extern int kprobe_post_handler(struct pt_regs *regs);
 90 #else
 91 static inline int kprobe_handler(struct pt_regs *regs) { return 0; }
 92 static inline int kprobe_post_handler(struct pt_regs *regs) { return 0; }
 93 #endif /* CONFIG_KPROBES */
 94 #endif /* __KERNEL__ */
 95 #endif  /* _ASM_POWERPC_KPROBES_H */
 96 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php