diff options
author | Mike Frysinger <vapier@gentoo.org> | 2010-01-26 08:33:53 +0100 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2010-03-09 06:30:51 +0100 |
commit | e8f263dfd32a784a816fe68956e564f8ede4a9fc (patch) | |
tree | 58fcc786db192f13c3df7febee705adaaf61012c /arch/blackfin/include/asm/ptrace.h | |
parent | Blackfin: initial regset support (diff) | |
download | linux-e8f263dfd32a784a816fe68956e564f8ede4a9fc.tar.xz linux-e8f263dfd32a784a816fe68956e564f8ede4a9fc.zip |
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.h | 23 |
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__ */ |