kprobes.h (30176466e36aadba01e1a630cf42397a3438efa4) kprobes.h (51c9c0843993528bffc920c54c2121d9e6f8b090)
1#ifndef _ASM_POWERPC_KPROBES_H
2#define _ASM_POWERPC_KPROBES_H
3#ifdef __KERNEL__
4/*
5 * Kernel Probes (KProbes)
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by

--- 26 unchanged lines hidden (view full) ---

35
36#ifdef CONFIG_KPROBES
37#define __ARCH_WANT_KPROBES_INSN_SLOT
38
39struct pt_regs;
40struct kprobe;
41
42typedef ppc_opcode_t kprobe_opcode_t;
1#ifndef _ASM_POWERPC_KPROBES_H
2#define _ASM_POWERPC_KPROBES_H
3#ifdef __KERNEL__
4/*
5 * Kernel Probes (KProbes)
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by

--- 26 unchanged lines hidden (view full) ---

35
36#ifdef CONFIG_KPROBES
37#define __ARCH_WANT_KPROBES_INSN_SLOT
38
39struct pt_regs;
40struct kprobe;
41
42typedef ppc_opcode_t kprobe_opcode_t;
43#define MAX_INSN_SIZE 1
44
43
44extern kprobe_opcode_t optinsn_slot;
45
46/* Optinsn template address */
47extern kprobe_opcode_t optprobe_template_entry[];
48extern kprobe_opcode_t optprobe_template_op_address[];
49extern kprobe_opcode_t optprobe_template_call_handler[];
50extern kprobe_opcode_t optprobe_template_insn[];
51extern kprobe_opcode_t optprobe_template_call_emulate[];
52extern kprobe_opcode_t optprobe_template_ret[];
53extern kprobe_opcode_t optprobe_template_end[];
54
55/* Fixed instruction size for powerpc */
56#define MAX_INSN_SIZE 1
57#define MAX_OPTIMIZED_LENGTH sizeof(kprobe_opcode_t) /* 4 bytes */
58#define MAX_OPTINSN_SIZE (optprobe_template_end - optprobe_template_entry)
59#define RELATIVEJUMP_SIZE sizeof(kprobe_opcode_t) /* 4 bytes */
60
45#ifdef PPC64_ELF_ABI_v2
46/* PPC64 ABIv2 needs local entry point */
47#define kprobe_lookup_name(name, addr) \
48{ \
49 addr = (kprobe_opcode_t *)kallsyms_lookup_name(name); \
50 if (addr) \
51 addr = (kprobe_opcode_t *)ppc_function_entry(addr); \
52}

--- 68 unchanged lines hidden (view full) ---

121/* per-cpu kprobe control block */
122struct kprobe_ctlblk {
123 unsigned long kprobe_status;
124 unsigned long kprobe_saved_msr;
125 struct pt_regs jprobe_saved_regs;
126 struct prev_kprobe prev_kprobe;
127};
128
61#ifdef PPC64_ELF_ABI_v2
62/* PPC64 ABIv2 needs local entry point */
63#define kprobe_lookup_name(name, addr) \
64{ \
65 addr = (kprobe_opcode_t *)kallsyms_lookup_name(name); \
66 if (addr) \
67 addr = (kprobe_opcode_t *)ppc_function_entry(addr); \
68}

--- 68 unchanged lines hidden (view full) ---

137/* per-cpu kprobe control block */
138struct kprobe_ctlblk {
139 unsigned long kprobe_status;
140 unsigned long kprobe_saved_msr;
141 struct pt_regs jprobe_saved_regs;
142 struct prev_kprobe prev_kprobe;
143};
144
145struct arch_optimized_insn {
146 kprobe_opcode_t copied_insn[1];
147 /* detour buffer */
148 kprobe_opcode_t *insn;
149};
150
129extern int kprobe_exceptions_notify(struct notifier_block *self,
130 unsigned long val, void *data);
131extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
132extern int kprobe_handler(struct pt_regs *regs);
133extern int kprobe_post_handler(struct pt_regs *regs);
134#else
135static inline int kprobe_handler(struct pt_regs *regs) { return 0; }
136static inline int kprobe_post_handler(struct pt_regs *regs) { return 0; }
137#endif /* CONFIG_KPROBES */
138#endif /* __KERNEL__ */
139#endif /* _ASM_POWERPC_KPROBES_H */
151extern int kprobe_exceptions_notify(struct notifier_block *self,
152 unsigned long val, void *data);
153extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
154extern int kprobe_handler(struct pt_regs *regs);
155extern int kprobe_post_handler(struct pt_regs *regs);
156#else
157static inline int kprobe_handler(struct pt_regs *regs) { return 0; }
158static inline int kprobe_post_handler(struct pt_regs *regs) { return 0; }
159#endif /* CONFIG_KPROBES */
160#endif /* __KERNEL__ */
161#endif /* _ASM_POWERPC_KPROBES_H */