This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH,ARM] Fix single step on vfork


On Monday 06 September 2010 14:29:29, Yao Qi wrote:
> Pedro Alves wrote:
> > 
> > Thanks.  Please go ahead with your patch.  Hope you don't mind I tweak
> > the comment a bit afterwards.
> > 
> Pedro,
> Thanks for your view, and free to tweak the comment.
> 
> Committed to GDB mainline,
> http://www.cygwin.com/ml/gdb-cvs/2010-09/msg00042.html
> 
> Once you changed the comment, I'd like to merge it to GDB 7.2 branch then.

Okay.  I've now applied this to mainline.

-- 
Pedro Alves

2010-09-06  Pedro Alves  <pedro@codesourcery.com>

	* infrun.c (resume): Extend comment on ignoring single-step
	requests on vfork parents waiting for a vfork-done.

---
 gdb/infrun.c |   16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

Index: src/gdb/infrun.c
===================================================================
--- src.orig/gdb/infrun.c	2010-09-06 14:33:12.000000000 +0100
+++ src/gdb/infrun.c	2010-09-06 15:13:27.000000000 +0100
@@ -1560,13 +1560,19 @@ resume (int step, enum target_signal sig
 
   QUIT;
 
-  /* Don't consider single-stepping when the inferior is 
-     waiting_for_vfork_done, either software or hardware step.  In
-     software step, child process will hit the software single step
-     breakpoint inserted in parent process.  In hardware step, GDB
-     can resumes inferior, and wait for vfork_done event.  */
   if (current_inferior ()->waiting_for_vfork_done)
     {
+      /* Don't try to single-step a vfork parent that is waiting for
+	 the child to get out of the shared memory region (by exec'ing
+	 or exiting).  This is particularly important on software
+	 single-step archs, as the child process would trip on the
+	 software single step breakpoint inserted for the parent
+	 process.  Since the parent will not actually execute any
+	 instruction until the child is out of the shared region (such
+	 are vfork's semantics), it is safe to simply continue it.
+	 Eventually, we'll see a TARGET_WAITKIND_VFORK_DONE event for
+	 the parent, and tell it to `keep_going', which automatically
+	 re-sets it stepping.  */
       if (debug_infrun)
 	fprintf_unfiltered (gdb_stdlog,
 			    "infrun: resume : clear step\n");


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]