summaryrefslogtreecommitdiff
path: root/arch/blackfin/include/asm/ptrace.h
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2010-01-26 10:33:53 +0300
committerMike Frysinger <vapier@gentoo.org>2010-03-09 08:30:51 +0300
commite8f263dfd32a784a816fe68956e564f8ede4a9fc (patch)
tree58fcc786db192f13c3df7febee705adaaf61012c /arch/blackfin/include/asm/ptrace.h
parente50e2f25c5b90abd00a1e5871c45094cf5207afc (diff)
downloadlinux-e8f263dfd32a784a816fe68956e564f8ede4a9fc.tar.xz
Blackfin: initial tracehook support
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch/blackfin/include/asm/ptrace.h')
-rw-r--r--arch/blackfin/include/asm/ptrace.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/blackfin/include/asm/ptrace.h b/arch/blackfin/include/asm/ptrace.h
index c1aebdb981c7..aaa1c6c2bc19 100644
--- a/arch/blackfin/include/asm/ptrace.h
+++ b/arch/blackfin/include/asm/ptrace.h
@@ -24,6 +24,8 @@
#ifndef __ASSEMBLY__
+struct task_struct;
+
/* this struct defines the way the registers are stored on the
stack during a system call. */
@@ -101,9 +103,30 @@ struct pt_regs {
master interrupt enable. */
#define user_mode(regs) (!(((regs)->ipend & ~0x10) & (((regs)->ipend & ~0x10) - 1)))
#define instruction_pointer(regs) ((regs)->pc)
+#define user_stack_pointer(regs) ((regs)->usp)
#define profile_pc(regs) instruction_pointer(regs)
extern void show_regs(struct pt_regs *);
+#define arch_has_single_step() (1)
+extern void user_enable_single_step(struct task_struct *child);
+extern void user_disable_single_step(struct task_struct *child);
+/* common code demands this function */
+#define ptrace_disable(child) user_disable_single_step(child)
+
+/*
+ * Get the address of the live pt_regs for the specified task.
+ * These are saved onto the top kernel stack when the process
+ * is not running.
+ *
+ * Note: if a user thread is execve'd from kernel space, the
+ * kernel stack will not be empty on entry to the kernel, so
+ * ptracing these tasks will fail.
+ */
+#define task_pt_regs(task) \
+ (struct pt_regs *) \
+ ((unsigned long)task_stack_page(task) + \
+ (THREAD_SIZE - sizeof(struct pt_regs)))
+
#endif /* __KERNEL__ */
#endif /* __ASSEMBLY__ */