+2016-04-25 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.
+
2016-04-25 Yao Qi <yao.qi@linaro.org>
* linux-low.c (reinsert_raw_breakpoint): If bp->inserted is true
}
/* 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
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
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;