* infrun.c (resume): Extend comment on ignoring single-step
authorPedro Alves <palves@redhat.com>
Mon, 6 Sep 2010 14:22:07 +0000 (14:22 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 6 Sep 2010 14:22:07 +0000 (14:22 +0000)
requests on vfork parents waiting for a vfork-done.

gdb/ChangeLog
gdb/infrun.c

index 6a28be1e26a668e06a681ddf29b22f75568d190b..8eca93ad78050f69f82477dda72a1af2f013eb32 100644 (file)
@@ -1,3 +1,8 @@
+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.
+
 2010-09-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
            Pedro Alves  <pedro@codesourcery.com>
 
index b21fd3f33e4aebc2da14c1b075afca905cb9cd40..a6f8fd13242555928b5659480ce580c7a2715e1f 100644 (file)
@@ -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");