public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Yao Qi <yao@codesourcery.com>
To: gdb-patches@sourceware.org
Subject: [PATCH,ARM] Fix single step on vfork
Date: Wed, 01 Sep 2010 16:56:00 -0000	[thread overview]
Message-ID: <4C7E85C0.3050902@codesourcery.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 719 bytes --]

Hi,
Recently, we find some failures in gdb testsute on ARM,

FAIL: gdb.base/watch-vfork.exp: Watchpoint triggers after vfork (hw)
(the program exited)
FAIL: gdb.base/watch-vfork.exp: Watchpoint triggers after vfork (sw)
(the program exited)

Program exits when we stepping over svc instruction in vfork(), which is
caused by child process hits software single step breakpoint inserted
for parent process.

This patch is to fix this problem by 'when inferior's
wait_for_vfork_done is true, clear step to zero and don't use displaced
stepping'.

Tested on GDB CVS on ARM and X86-64.  Fix these two failures above on
ARM, and no regressions.  OK to apply?

-- 
Yao Qi
CodeSourcery
yao@codesourcery.com
(650) 331-3385 x739

[-- Attachment #2: single_step_vfork_1.patch --]
[-- Type: text/x-patch, Size: 1858 bytes --]

2010-09-02  Yao Qi  <yao@codesourcery.com>

	* infrunc(resume): When inferior is waiting_for_vfork_done,
	clear step and don't use displaced stepping.

diff --git a/gdb/infrun.c b/gdb/infrun.c
index dd89e78..2f28380 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -1550,6 +1550,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 waiting for vfork_done event.  */
+  if (current_inferior()->waiting_for_vfork_done)
+    {
+      if (debug_infrun)
+	fprintf_unfiltered (gdb_stdlog,
+			    "infrun: resume : clear step\n");
+      step = 0;
+    }
+
   if (debug_infrun)
     fprintf_unfiltered (gdb_stdlog,
                         "infrun: resume (step=%d, signal=%d), "
@@ -1577,11 +1590,16 @@ a command like `return' or `jump' to continue execution."));
      We can't use displaced stepping when we have a signal to deliver;
      the comments for displaced_step_prepare explain why.  The
      comments in the handle_inferior event for dealing with 'random
-     signals' explain what we do instead.  */
+     signals' explain what we do instead.
+
+     We can't use displaced stepping when we are waiting for vfork_done
+     event, displaced stepping breaks the vfork child similarly as single
+     step software breakpoint.  */
   if (use_displaced_stepping (gdbarch)
       && (tp->trap_expected
 	  || (step && gdbarch_software_single_step_p (gdbarch)))
-      && sig == TARGET_SIGNAL_0)
+      && sig == TARGET_SIGNAL_0
+      && !current_inferior()->waiting_for_vfork_done)
     {
       struct displaced_step_inferior_state *displaced;
 

             reply	other threads:[~2010-09-01 16:56 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-01 16:56 Yao Qi [this message]
2010-09-01 17:11 ` Pedro Alves
2010-09-02  3:03   ` Yao Qi
2010-09-06 14:09     ` Pedro Alves
2010-09-06 14:25       ` Yao Qi
2010-09-06 14:56         ` Pedro Alves
2010-09-08 17:23           ` Yao Qi

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=4C7E85C0.3050902@codesourcery.com \
    --to=yao@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).