diff options
author | Lennert Buytenhek <buytenh@wantstofly.org> | 2006-06-27 17:56:19 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-06-28 12:55:00 -0400 |
commit | 5429b060df6d556f396b78364ad017686015bc34 (patch) | |
tree | 48b088aa6eb65e856df91e296447f6a7ea394644 | |
parent | 3bec6ded282b331552587267d67a06ed7fd95ddd (diff) |
[ARM] 3665/1: crunch: add ptrace support
Patch from Lennert Buytenhek
This patch makes it possible to get/set a task's Crunch state via
the ptrace(2) system call.
Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/kernel/ptrace.c | 36 | ||||
-rw-r--r-- | include/asm-arm/ptrace.h | 5 |
2 files changed, 41 insertions, 0 deletions
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index a1d1b2906e8d..c40bdc770054 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c | |||
@@ -634,6 +634,32 @@ static int ptrace_setwmmxregs(struct task_struct *tsk, void __user *ufp) | |||
634 | 634 | ||
635 | #endif | 635 | #endif |
636 | 636 | ||
637 | #ifdef CONFIG_CRUNCH | ||
638 | /* | ||
639 | * Get the child Crunch state. | ||
640 | */ | ||
641 | static int ptrace_getcrunchregs(struct task_struct *tsk, void __user *ufp) | ||
642 | { | ||
643 | struct thread_info *thread = task_thread_info(tsk); | ||
644 | |||
645 | crunch_task_disable(thread); /* force it to ram */ | ||
646 | return copy_to_user(ufp, &thread->crunchstate, CRUNCH_SIZE) | ||
647 | ? -EFAULT : 0; | ||
648 | } | ||
649 | |||
650 | /* | ||
651 | * Set the child Crunch state. | ||
652 | */ | ||
653 | static int ptrace_setcrunchregs(struct task_struct *tsk, void __user *ufp) | ||
654 | { | ||
655 | struct thread_info *thread = task_thread_info(tsk); | ||
656 | |||
657 | crunch_task_release(thread); /* force a reload */ | ||
658 | return copy_from_user(&thread->crunchstate, ufp, CRUNCH_SIZE) | ||
659 | ? -EFAULT : 0; | ||
660 | } | ||
661 | #endif | ||
662 | |||
637 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) | 663 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) |
638 | { | 664 | { |
639 | unsigned long tmp; | 665 | unsigned long tmp; |
@@ -765,6 +791,16 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
765 | child->ptrace_message = data; | 791 | child->ptrace_message = data; |
766 | break; | 792 | break; |
767 | 793 | ||
794 | #ifdef CONFIG_CRUNCH | ||
795 | case PTRACE_GETCRUNCHREGS: | ||
796 | ret = ptrace_getcrunchregs(child, (void __user *)data); | ||
797 | break; | ||
798 | |||
799 | case PTRACE_SETCRUNCHREGS: | ||
800 | ret = ptrace_setcrunchregs(child, (void __user *)data); | ||
801 | break; | ||
802 | #endif | ||
803 | |||
768 | default: | 804 | default: |
769 | ret = ptrace_request(child, request, addr, data); | 805 | ret = ptrace_request(child, request, addr, data); |
770 | break; | 806 | break; |
diff --git a/include/asm-arm/ptrace.h b/include/asm-arm/ptrace.h index 2bebe3dc0a30..5a8ef787dbf8 100644 --- a/include/asm-arm/ptrace.h +++ b/include/asm-arm/ptrace.h | |||
@@ -25,6 +25,11 @@ | |||
25 | 25 | ||
26 | #define PTRACE_SET_SYSCALL 23 | 26 | #define PTRACE_SET_SYSCALL 23 |
27 | 27 | ||
28 | /* PTRACE_SYSCALL is 24 */ | ||
29 | |||
30 | #define PTRACE_GETCRUNCHREGS 25 | ||
31 | #define PTRACE_SETCRUNCHREGS 26 | ||
32 | |||
28 | /* | 33 | /* |
29 | * PSR bits | 34 | * PSR bits |
30 | */ | 35 | */ |