Decide whether we may have removed breakpoints based on step_over_info

... instead of trap_expected.

Gets rid of one singlestep_breakpoints_inserted_p reference, and is
generally more to the point.

gdb/
2014-10-15  Pedro Alves  <palves@redhat.com>

	* infrun.c (step_over_info_valid_p): New function.
	(resume): Use step_over_info_valid_p instead of checking the
	threads's trap_expected flag.
This commit is contained in:
Pedro Alves 2014-10-15 20:18:29 +01:00
parent a2abc7de68
commit 6cc83d2a40
2 changed files with 20 additions and 8 deletions

View file

@ -1,3 +1,9 @@
2014-10-15 Pedro Alves <palves@redhat.com>
* infrun.c (step_over_info_valid_p): New function.
(resume): Use step_over_info_valid_p instead of checking the
threads's trap_expected flag.
2014-10-15 Doug Evans <dje@google.com>
Walfred Tedeschi <walfred.tedeschi@intel.com>

View file

@ -1278,6 +1278,14 @@ stepping_past_instruction_at (struct address_space *aspace,
step_over_info.address));
}
/* Returns true if step-over info is valid. */
static int
step_over_info_valid_p (void)
{
return (step_over_info.aspace != NULL);
}
/* Displaced stepping. */
@ -2143,7 +2151,8 @@ a command like `return' or `jump' to continue execution."));
once we arrive back at the step-resume breakpoint, actually step
over the breakpoint we originally wanted to step over. */
if (singlestep_breakpoints_inserted_p
&& tp->control.trap_expected && sig != GDB_SIGNAL_0)
&& sig != GDB_SIGNAL_0
&& step_over_info_valid_p ())
{
/* If we have nested signals or a pending signal is delivered
immediately after a handler returns, might might already have
@ -2237,13 +2246,10 @@ a command like `return' or `jump' to continue execution."));
tp->suspend.stop_signal = GDB_SIGNAL_0;
/* Advise target which signals may be handled silently. If we have
removed breakpoints because we are stepping over one (which can
happen only if we are not using displaced stepping), we need to
receive all signals to avoid accidentally skipping a breakpoint
during execution of a signal handler. */
if ((step || singlestep_breakpoints_inserted_p)
&& tp->control.trap_expected
&& !use_displaced_stepping (gdbarch))
removed breakpoints because we are stepping over one (in any
thread), we need to receive all signals to avoid accidentally
skipping a breakpoint during execution of a signal handler. */
if (step_over_info_valid_p ())
target_pass_signals (0, NULL);
else
target_pass_signals ((int) GDB_SIGNAL_LAST, signal_pass);