Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Yao Qi <qiyaoltc@gmail.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 6/7] Resume the inferior with signal rather than stepping over
Date: Wed, 23 Mar 2016 16:10:00 -0000	[thread overview]
Message-ID: <1458749384-19793-7-git-send-email-yao.qi@linaro.org> (raw)
In-Reply-To: <1458749384-19793-1-git-send-email-yao.qi@linaro.org>

When GDBserver steps over a breakpoint using software single step, it
enqueues the signal, single step and deliver the signal in the next
resume if step over is not needed.  In this way, the program won't
receive the signal if the conditional breakpoint is set a branch to
self instruction, because the step over is always needed.

This patch removes the restriction that don't deliver the signal to
the inferior if we are trying to reinsert a breakpoint for software
single step and change the decision on resume vs. step-over when the
LWP has pending signals to deliver.

gdb/gdbserver:

2016-03-23  Yao Qi  <yao.qi@linaro.org>

	* linux-low.c (LWP_SIGNAL_CAN_BE_DELIVERED): Adjust.
	(need_step_over_p): Return zero if the LWP has pending signals
	can be delivered on software single step target.
---
 gdb/gdbserver/linux-low.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index 7e55349..6b72c91 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -4118,7 +4118,6 @@ single_step (struct lwp_info* lwp)
 }
 
 /* The signal can be delivered to the inferior if we are not trying to
-   reinsert a breakpoint for software single step and not trying to
    finish a fast tracepoint collect.  Since signal can be delivered in
    the step-over, the program may go to signal handler and trap again
    after return from the signal handler.  We can live with the spurious
@@ -4127,8 +4126,7 @@ single_step (struct lwp_info* lwp)
 static int
 lwp_signal_can_be_delivered (struct lwp_info *lwp)
 {
-  return (!(lwp->bp_reinsert != 0 && can_software_single_step ())
-	  && !lwp->collecting_fast_tracepoint);
+  return !lwp->collecting_fast_tracepoint;
 }
 
 /* Resume execution of LWP.  If STEP is nonzero, single-step it.  If
@@ -4577,6 +4575,20 @@ need_step_over_p (struct inferior_list_entry *entry, void *dummy)
       return 0;
     }
 
+  /* On software single step target, resume the inferior with signal
+     rather than stepping over.  */
+  if (can_software_single_step ()
+      && lwp->pending_signals != NULL
+      && lwp_signal_can_be_delivered (lwp))
+    {
+      if (debug_threads)
+	debug_printf ("Need step over [LWP %ld]? Ignoring, has pending"
+		      " signals.\n",
+		      lwpid_of (thread));
+
+      return 0;
+    }
+
   saved_thread = current_thread;
   current_thread = thread;
 
-- 
1.9.1


  reply	other threads:[~2016-03-23 16:10 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-23 16:10 [PATCH 0/7 V2] Step over instruction branches to itself Yao Qi
2016-03-23 16:10 ` Yao Qi [this message]
2016-04-11 15:29   ` [PATCH 6/7] Resume the inferior with signal rather than stepping over Pedro Alves
2016-03-23 16:10 ` [PATCH 5/7] [GDBserver] Don't error in reinsert_raw_breakpoint if bp->inserted Yao Qi
2016-04-11 14:54   ` Pedro Alves
2016-03-23 16:10 ` [PATCH 3/7] Force to insert software single step breakpoint Yao Qi
2016-04-11 14:31   ` Pedro Alves
2016-04-13 16:21     ` Yao Qi
2016-04-19 14:54     ` Yao Qi
2016-04-19 15:17       ` Pedro Alves
2016-04-20  7:50     ` Yao Qi
2016-04-22 16:36       ` Pedro Alves
2016-04-25  8:40         ` Yao Qi
2016-03-23 16:10 ` [PATCH 2/7] Deliver signal in hardware single step Yao Qi
2016-04-11 14:10   ` Pedro Alves
2016-04-22 10:54     ` Yao Qi
2016-03-23 16:10 ` [PATCH 4/7] Insert breakpoint even when the raw breakpoint is found Yao Qi
2016-04-11 14:41   ` Pedro Alves
2016-04-12  9:04     ` Yao Qi
2016-04-12  9:41       ` Pedro Alves
2016-04-25  8:45         ` Yao Qi
2016-03-23 16:10 ` [PATCH 1/7] New test case gdb.trace/signal.exp Yao Qi
2016-04-08 16:52   ` Pedro Alves
2016-04-11  8:41     ` Yao Qi
2016-04-11 14:04       ` Pedro Alves
2016-04-22 10:53         ` Yao Qi
2016-04-26 12:57           ` Pedro Alves
2016-04-11 14:08       ` Pedro Alves
2016-03-23 16:26 ` [PATCH 7/7] New test case gdb.base/branch-to-self.exp Yao Qi
2016-04-11 15:34   ` Pedro Alves
2016-04-25  8:58     ` 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=1458749384-19793-7-git-send-email-yao.qi@linaro.org \
    --to=qiyaoltc@gmail.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