All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: roland@redhat.com, oleg@redhat.com, akpm@linux-foundation.org,
	jdike@addtoit.com
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org
Subject: [PATCH 10/14] um: use generic ptrace_resume code
Date: Tue, 2 Feb 2010 20:00:09 +0100	[thread overview]
Message-ID: <20100202190009.GJ3630@lst.de> (raw)
In-Reply-To: <20100202185755.GA3630@lst.de>

Use the generic ptrace_resume code for PTRACE_SYSCALL, PTRACE_CONT,
PTRACE_KILL and PTRACE_SINGLESTEP.  This implies defining
arch_has_single_step in <asm/ptrace.h> and implementing the
user_enable_single_step and user_disable_single_step functions, which
also causes the breakpoint information to be cleared on fork, which
could be considered a bug fix.

Also the TIF_SYSCALL_TRACE thread flag is now cleared on PTRACE_KILL
which it previously wasn't which is consistent with all architectures
using the modern ptrace code.

XXX: I'm not sure arch_has_single_step() is placed in the exactly correct
location, please verify in which of the ptrace headers it should really be.

Signed-off-by: Christoph Hellwig <hch@lst.de>

Index: linux-2.6/arch/um/kernel/ptrace.c
===================================================================
--- linux-2.6.orig/arch/um/kernel/ptrace.c	2010-02-02 11:00:50.048254427 +0100
+++ linux-2.6/arch/um/kernel/ptrace.c	2010-02-02 11:27:05.412275969 +0100
@@ -12,16 +12,25 @@
 #endif
 #include "skas_ptrace.h"
 
-static inline void set_singlestepping(struct task_struct *child, int on)
+
+
+void user_enable_single_step(struct task_struct *child)
 {
-	if (on)
-		child->ptrace |= PT_DTRACE;
-	else
-		child->ptrace &= ~PT_DTRACE;
+	child->ptrace |= PT_DTRACE;
 	child->thread.singlestep_syscall = 0;
 
 #ifdef SUBARCH_SET_SINGLESTEPPING
-	SUBARCH_SET_SINGLESTEPPING(child, on);
+	SUBARCH_SET_SINGLESTEPPING(child, 1);
+#endif
+}
+
+void user_disable_single_step(struct task_struct *child)
+{
+	child->ptrace &= ~PT_DTRACE;
+	child->thread.singlestep_syscall = 0;
+
+#ifdef SUBARCH_SET_SINGLESTEPPING
+	SUBARCH_SET_SINGLESTEPPING(child, 0);
 #endif
 }
 
@@ -30,7 +39,7 @@ static inline void set_singlestepping(st
  */
 void ptrace_disable(struct task_struct *child)
 {
-	set_singlestepping(child,0);
+	user_disable_single_step(child);
 }
 
 extern int peek_user(struct task_struct * child, long addr, long data);
@@ -57,53 +66,6 @@ long arch_ptrace(struct task_struct *chi
 		ret = -EIO;
 		break;
 
-	/* continue and stop at next (return from) syscall */
-	case PTRACE_SYSCALL:
-	/* restart after signal. */
-	case PTRACE_CONT: {
-		ret = -EIO;
-		if (!valid_signal(data))
-			break;
-
-		set_singlestepping(child, 0);
-		if (request == PTRACE_SYSCALL)
-			set_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
-		else clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
-		child->exit_code = data;
-		wake_up_process(child);
-		ret = 0;
-		break;
-	}
-
-/*
- * make the child exit.  Best I can do is send it a sigkill.
- * perhaps it should be put in the status that it wants to
- * exit.
- */
-	case PTRACE_KILL: {
-		ret = 0;
-		if (child->exit_state == EXIT_ZOMBIE)	/* already dead */
-			break;
-
-		set_singlestepping(child, 0);
-		child->exit_code = SIGKILL;
-		wake_up_process(child);
-		break;
-	}
-
-	case PTRACE_SINGLESTEP: {  /* set the trap flag. */
-		ret = -EIO;
-		if (!valid_signal(data))
-			break;
-		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
-		set_singlestepping(child, 1);
-		child->exit_code = data;
-		/* give it a chance to run. */
-		wake_up_process(child);
-		ret = 0;
-		break;
-	}
-
 #ifdef PTRACE_GETREGS
 	case PTRACE_GETREGS: { /* Get all gp regs from the child. */
 		if (!access_ok(VERIFY_WRITE, p, MAX_REG_OFFSET)) {
Index: linux-2.6/arch/um/include/asm/ptrace-generic.h
===================================================================
--- linux-2.6.orig/arch/um/include/asm/ptrace-generic.h	2010-02-02 11:27:09.196004106 +0100
+++ linux-2.6/arch/um/include/asm/ptrace-generic.h	2010-02-02 11:28:57.615023962 +0100
@@ -16,6 +16,8 @@ struct pt_regs {
 	struct uml_pt_regs regs;
 };
 
+#define arch_has_single_step()	(1)
+
 #define EMPTY_REGS { .regs = EMPTY_UML_PT_REGS }
 
 #define PT_REGS_IP(r) UPT_IP(&(r)->regs)

  parent reply	other threads:[~2010-02-02 19:00 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-02 18:57 [PATCH 1/14] move user_enable_single_step & co prototypes to linux/ptrace.h Christoph Hellwig
2010-02-02 18:58 ` [PATCH 2/14] alpha: use generic ptrace_resume code Christoph Hellwig
2010-02-03  4:35   ` Matt Turner
2010-02-02 18:58 ` [PATCH 3/14] arm: " Christoph Hellwig
2010-02-02 18:58 ` [PATCH 4/14] avr32: " Christoph Hellwig
2010-02-03  3:17   ` Haavard Skinnemoen
2010-02-03  8:36     ` Christoph Hellwig
2010-02-03 19:22       ` Oleg Nesterov
2010-02-03 19:28         ` Christoph Hellwig
2010-02-02 18:59 ` [PATCH 5/14] blackfin: " Christoph Hellwig
2010-02-02 20:29   ` Mike Frysinger
2010-02-03 19:36     ` Mike Frysinger
2010-02-03 19:42       ` Christoph Hellwig
2010-02-11  9:43   ` [PATCH 0/2] Blackfin: " Mike Frysinger
2010-02-11  9:43   ` [PATCH 1/2] Blackfin: initial tracehook support Mike Frysinger
2010-02-11 20:46     ` Roland McGrath
2010-02-11 23:54       ` Mike Frysinger
2010-02-12  3:24         ` Roland McGrath
2010-02-12  4:33           ` Mike Frysinger
2010-02-12 15:24             ` Oleg Nesterov
     [not found]             ` <8bd0f97a1002112033m5805d4eco3add4d5625e71e9-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-02-12 20:44               ` Roland McGrath
2010-02-12 20:44                 ` Roland McGrath
2010-02-13  9:41                 ` Mike Frysinger
2010-02-15  7:36                   ` Mike Frysinger
2010-02-15 20:07                   ` Roland McGrath
2010-02-11  9:43   ` [PATCH 2/2] Blackfin: use generic ptrace_resume code Mike Frysinger
2010-02-11  9:43     ` Mike Frysinger
2010-02-11  9:43     ` Mike Frysinger
2010-02-02 18:59 ` [PATCH 6/14] h8300: " Christoph Hellwig
2010-02-02 18:59 ` [PATCH 7/14] m68knommu: " Christoph Hellwig
2010-02-03  6:54   ` Greg Ungerer
2010-02-02 18:59 ` [PATCH 8/14] microblaze: " Christoph Hellwig
2010-02-03 11:00   ` Michal Simek
2010-02-02 18:59 ` [PATCH 9/14] mips: " Christoph Hellwig
2010-02-02 19:19   ` Ralf Baechle
2010-02-02 19:00 ` Christoph Hellwig [this message]
2010-02-02 19:00 ` [PATCH 11/14] xtensa: " Christoph Hellwig
2010-02-02 19:00 ` [PATCH 12/14] cris arch-v10: " Christoph Hellwig
2010-02-02 19:00 ` [PATCH, RFC 13/14] cris arch-v32: " Christoph Hellwig
2010-02-02 19:00 ` [PATCH, RFC 14/14] m32r: " Christoph Hellwig
2010-02-03  8:42 ` [PATCH 1/14] move user_enable_single_step & co prototypes to linux/ptrace.h Mike Frysinger
2010-02-03  8:42   ` Mike Frysinger
2010-02-03  8:56   ` Christoph Hellwig
2010-02-08 10:50 ` David Howells
2010-02-08 19:51 ` Roland McGrath
2010-02-10 22:03   ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100202190009.GJ3630@lst.de \
    --to=hch@lst.de \
    --cc=akpm@linux-foundation.org \
    --cc=jdike@addtoit.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oleg@redhat.com \
    --cc=roland@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.