* infrun.c (handle_inferior_event): When handling a fork or vfork

event, check if the bpstat causes a stop, instead of if it
	explains the signal.
	* breakpoint.c (bpstat_causes_stop): New.
	* breakpoint.h (bpstat_causes_stop): Declare.
This commit is contained in:
Pedro Alves 2009-11-15 20:10:34 +00:00
parent 56710373a0
commit 678229626e
4 changed files with 26 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2009-11-15 Pedro Alves <pedro@codesourcery.com>
* infrun.c (handle_inferior_event): When handling a fork or vfork
event, check if the bpstat causes a stop, instead of if it
explains the signal.
* breakpoint.c (bpstat_causes_stop): New.
* breakpoint.h (bpstat_causes_stop): Declare.
2009-11-15 Pedro Alves <pedro@codesourcery.com>
* breakpoint.c (should_be_inserted): Don't insert breakpoints if

View File

@ -3816,6 +3816,16 @@ bpstat_should_step (void)
return 0;
}
int
bpstat_causes_stop (bpstat bs)
{
for (; bs != NULL; bs = bs->next)
if (bs->stop)
return 1;
return 0;
}
static void print_breakpoint_location (struct breakpoint *b,

View File

@ -629,6 +629,9 @@ extern struct breakpoint *bpstat_find_step_resume_breakpoint (bpstat);
a watchpoint enabled. */
#define bpstat_explains_signal(bs) ((bs) != NULL)
/* Nonzero is this bpstat causes a stop. */
extern int bpstat_causes_stop (bpstat);
/* Nonzero if we should step constantly (e.g. watchpoints on machines
without hardware support). This isn't related to a specific bpstat,
just to things like whether watchpoints are set. */

View File

@ -2946,7 +2946,11 @@ handle_inferior_event (struct execution_control_state *ecs)
= bpstat_stop_status (get_regcache_aspace (get_current_regcache ()),
stop_pc, ecs->ptid);
ecs->random_signal = !bpstat_explains_signal (ecs->event_thread->stop_bpstat);
/* Note that we're interested in knowing the bpstat actually
causes a stop, not just if it may explain the signal.
Software watchpoints, for example, always appear in the
bpstat. */
ecs->random_signal = !bpstat_causes_stop (ecs->event_thread->stop_bpstat);
/* If no catchpoint triggered for this, then keep going. */
if (ecs->random_signal)