aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAnanth N Mavinakayanahalli <ananth@in.ibm.com>2005-06-27 18:17:01 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-27 18:23:52 -0400
commit9ec4b1f356b3bad928ae8e2aa9caebfa737d52df (patch)
tree24d27ffed66595a9d864448ec53200ca1745f62c /include
parentd3b8a1a8496c83bc4a3cc76505c29255af15572c (diff)
[PATCH] kprobes: fix single-step out of line - take2
Now that PPC64 has no-execute support, here is a second try to fix the single step out of line during kprobe execution. Kprobes on x86_64 already solved this problem by allocating an executable page and using it as the scratch area for stepping out of line. Reuse that. Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
-rw-r--r--include/asm-ia64/kprobes.h1
-rw-r--r--include/asm-ppc64/kprobes.h2
-rw-r--r--include/linux/kprobes.h2
3 files changed, 4 insertions, 1 deletions
diff --git a/include/asm-ia64/kprobes.h b/include/asm-ia64/kprobes.h
index 7b700035e36d..25d8b1edfcba 100644
--- a/include/asm-ia64/kprobes.h
+++ b/include/asm-ia64/kprobes.h
@@ -28,6 +28,7 @@
28#include <linux/ptrace.h> 28#include <linux/ptrace.h>
29#include <asm/break.h> 29#include <asm/break.h>
30 30
31#define MAX_INSN_SIZE 16
31#define BREAK_INST (long)(__IA64_BREAK_KPROBE << 6) 32#define BREAK_INST (long)(__IA64_BREAK_KPROBE << 6)
32 33
33typedef union cmp_inst { 34typedef union cmp_inst {
diff --git a/include/asm-ppc64/kprobes.h b/include/asm-ppc64/kprobes.h
index 19b468bed059..790cf7c52774 100644
--- a/include/asm-ppc64/kprobes.h
+++ b/include/asm-ppc64/kprobes.h
@@ -45,7 +45,7 @@ typedef unsigned int kprobe_opcode_t;
45/* Architecture specific copy of original instruction */ 45/* Architecture specific copy of original instruction */
46struct arch_specific_insn { 46struct arch_specific_insn {
47 /* copy of original instruction */ 47 /* copy of original instruction */
48 kprobe_opcode_t insn[MAX_INSN_SIZE]; 48 kprobe_opcode_t *insn;
49}; 49};
50 50
51#ifdef CONFIG_KPROBES 51#ifdef CONFIG_KPROBES
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h
index 5e1a7b0d7b3f..d304d4579856 100644
--- a/include/linux/kprobes.h
+++ b/include/linux/kprobes.h
@@ -177,6 +177,8 @@ extern void arch_arm_kprobe(struct kprobe *p);
177extern void arch_disarm_kprobe(struct kprobe *p); 177extern void arch_disarm_kprobe(struct kprobe *p);
178extern void arch_remove_kprobe(struct kprobe *p); 178extern void arch_remove_kprobe(struct kprobe *p);
179extern void show_registers(struct pt_regs *regs); 179extern void show_registers(struct pt_regs *regs);
180extern kprobe_opcode_t *get_insn_slot(void);
181extern void free_insn_slot(kprobe_opcode_t *slot);
180 182
181/* Get the kprobe at this addr (if any). Must have called lock_kprobes */ 183/* Get the kprobe at this addr (if any). Must have called lock_kprobes */
182struct kprobe *get_kprobe(void *addr); 184struct kprobe *get_kprobe(void *addr);