aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/infrun.c16
2 files changed, 16 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 6a28be1..8eca93a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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>
diff --git a/gdb/infrun.c b/gdb/infrun.c
index b21fd3f..a6f8fd1 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -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");