[PATCH 10/27] ptrace: generic resume

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Andrew Morton <akpm@...>, Linus Torvalds <torvalds@...>
Cc: <linux-kernel@...>, Thomas Gleixner <tglx@...>, Ingo Molnar <mingo@...>, H. Peter Anvin <hpa@...>
Date: Sunday, November 25, 2007 - 6:01 pm

This makes ptrace_request handle all the ptrace requests that wake
up the traced task.  These do low-level ptrace implementation magic
that is not arch-specific and should be kept out of arch code.  The
implementations on each arch usually do the same thing.  The new
generic code makes use of the arch_has_single_step macro and generic
entry points to handle PTRACE_SINGLESTEP.

Signed-off-by: Roland McGrath <roland@redhat.com>
---
 kernel/ptrace.c |   61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index 7c76f2f..309796a 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -366,6 +366,50 @@ static int ptrace_setsiginfo(struct task_struct *child, siginfo_t __user * data)
 	return error;
 }
 
+
+#ifdef PTRACE_SINGLESTEP
+#define is_singlestep(request)		((request) == PTRACE_SINGLESTEP)
+#else
+#define is_singlestep(request)		0
+#endif
+
+#ifdef PTRACE_SYSEMU
+#define is_sysemu_singlestep(request)	((request) == PTRACE_SYSEMU_SINGLESTEP)
+#else
+#define is_sysemu_singlestep(request)	0
+#endif
+
+static int ptrace_resume(struct task_struct *child, long request, long data)
+{
+	if (!valid_signal(data))
+		return -EIO;
+
+	if (request == PTRACE_SYSCALL)
+		set_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
+	else
+		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
+
+#ifdef TIF_SYSCALL_EMU
+	if (request == PTRACE_SYSEMU || request == PTRACE_SYSEMU_SINGLESTEP)
+		set_tsk_thread_flag(child, TIF_SYSCALL_EMU);
+	else
+		clear_tsk_thread_flag(child, TIF_SYSCALL_EMU);
+#endif
+
+	if (is_singlestep(request) || is_sysemu_singlestep(request)) {
+		if (unlikely(!arch_has_single_step()))
+			return -EIO;
+		user_enable_single_step(child);
+	}
+	else
+		user_disable_single_step(child);
+
+	child->exit_code = data;
+	wake_up_process(child);
+
+	return 0;
+}
+
 int ptrace_request(struct task_struct *child, long request,
 		   long addr, long data)
 {
@@ -390,6 +434,23 @@ int ptrace_request(struct task_struct *child, long request,
 	case PTRACE_DETACH:	 /* detach a process that was attached. */
 		ret = ptrace_detach(child, data);
 		break;
+
+#ifdef PTRACE_SINGLESTEP
+	case PTRACE_SINGLESTEP:
+#endif
+#ifdef PTRACE_SYSEMU
+	case PTRACE_SYSEMU:
+	case PTRACE_SYSEMU_SINGLESTEP:
+#endif
+	case PTRACE_SYSCALL:
+	case PTRACE_CONT:
+		return ptrace_resume(child, request, data);
+
+	case PTRACE_KILL:
+		if (child->exit_state)	/* already dead */
+			return 0;
+		return ptrace_resume(child, request, SIGKILL);
+
 	default:
 		break;
 	}
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 01/27] ptrace: arch_has_single_step, Roland McGrath, (Sun Nov 25, 5:55 pm)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Andrew Morton, (Tue Nov 27, 4:53 am)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Roland McGrath, (Tue Nov 27, 7:05 pm)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Ingo Molnar, (Tue Nov 27, 7:58 pm)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Roland McGrath, (Tue Nov 27, 8:08 pm)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Ingo Molnar, (Tue Nov 27, 6:38 am)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Christoph Hellwig, (Sun Nov 25, 6:22 pm)
Re: [PATCH 01/27] ptrace: arch_has_single_step, Roland McGrath, (Sun Nov 25, 6:59 pm)
[PATCH 27/27] x86: PTRACE_SINGLEBLOCK, Roland McGrath, (Sun Nov 25, 6:08 pm)
[PATCH 26/27] x86: debugctlmsr kprobes, Roland McGrath, (Sun Nov 25, 6:08 pm)
[PATCH 25/27] x86: debugctlmsr arch_has_block_step, Roland McGrath, (Sun Nov 25, 6:08 pm)
[PATCH 24/27] x86: debugctlmsr context switch, Roland McGrath, (Sun Nov 25, 6:08 pm)
[PATCH 23/27] x86: debugctlmsr kconfig, Roland McGrath, (Sun Nov 25, 6:08 pm)
Re: [PATCH 23/27] x86: debugctlmsr kconfig, Dave Jones, (Sun Nov 25, 9:57 pm)
Re: [PATCH 23/27] x86: debugctlmsr kconfig, Roland McGrath, (Mon Nov 26, 4:06 am)
Re: [PATCH 23/27] x86: debugctlmsr kconfig, Denys Vlasenko, (Sun Nov 25, 9:09 pm)
Re: [PATCH 23/27] x86: debugctlmsr kconfig, Roland McGrath, (Mon Nov 26, 3:51 am)
Re: [PATCH 23/27] x86: debugctlmsr kconfig, Denys Vlasenko, (Mon Nov 26, 6:52 pm)
[PATCH 22/27] x86: debugctlmsr constants, Roland McGrath, (Sun Nov 25, 6:06 pm)
[PATCH 19/27] x86-32 ptrace debugreg cleanup, Roland McGrath, (Sun Nov 25, 6:05 pm)
[PATCH 21/27] ptrace: generic PTRACE_SINGLEBLOCK, Roland McGrath, (Sun Nov 25, 6:06 pm)
[PATCH 20/27] ptrace: arch_has_block_step, Roland McGrath, (Sun Nov 25, 6:05 pm)
Re: [PATCH 20/27] ptrace: arch_has_block_step, David Wilder, (Wed Nov 28, 7:39 pm)
Re: [PATCH 20/27] ptrace: arch_has_block_step, Roland McGrath, (Wed Nov 28, 7:58 pm)
[PATCH 17/27] x86-64 ptrace debugreg cleanup, Roland McGrath, (Sun Nov 25, 6:04 pm)
[PATCH 18/27] x86-64 ia32 ptrace debugreg cleanup, Roland McGrath, (Sun Nov 25, 6:05 pm)
[PATCH 16/27] x86-64 ptrace: use task_pt_regs, Roland McGrath, (Sun Nov 25, 6:04 pm)
[PATCH 13/27] powerpc: arch_has_single_step, Roland McGrath, (Sun Nov 25, 6:03 pm)
[PATCH 15/27] x86-32 ptrace: use task_pt_regs, Roland McGrath, (Sun Nov 25, 6:04 pm)
[PATCH 14/27] powerpc: ptrace generic resume, Roland McGrath, (Sun Nov 25, 6:04 pm)
Re: [PATCH 14/27] powerpc: ptrace generic resume, Srinivasa Ds, (Mon Dec 3, 4:12 am)
[PATCH 09/27] x86 single_step: TIF_FORCED_TF, Roland McGrath, (Sun Nov 25, 6:00 pm)
[PATCH 11/27] x86-64: ptrace generic resume, Roland McGrath, (Sun Nov 25, 6:01 pm)
[PATCH 10/27] ptrace: generic resume, Roland McGrath, (Sun Nov 25, 6:01 pm)
Re: [PATCH 10/27] ptrace: generic resume, Christoph Hellwig, (Sun Nov 25, 6:23 pm)
Re: [PATCH 10/27] ptrace: generic resume, Roland McGrath, (Sun Nov 25, 6:37 pm)
[PATCH 12/27] x86-32: ptrace generic resume, Roland McGrath, (Sun Nov 25, 6:01 pm)
[PATCH 05/27] x86: single_step moved, Roland McGrath, (Sun Nov 25, 5:59 pm)
[PATCH 08/27] x86: single_step: share code, Roland McGrath, (Sun Nov 25, 6:00 pm)
[PATCH 06/27] x86: single_step segment macros, Roland McGrath, (Sun Nov 25, 5:59 pm)
[PATCH 07/27] x86: single_step 0xf0, Roland McGrath, (Sun Nov 25, 6:00 pm)
[PATCH 03/27] x86: remove TRAP_FLAG, Roland McGrath, (Sun Nov 25, 5:58 pm)
[PATCH 04/27] x86: arch_has_single_step, Roland McGrath, (Sun Nov 25, 5:59 pm)
[PATCH 02/27] x86: segment selector macros, Roland McGrath, (Sun Nov 25, 5:58 pm)