+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
return 0;
}
+int
+bpstat_causes_stop (bpstat bs)
+{
+ for (; bs != NULL; bs = bs->next)
+ if (bs->stop)
+ return 1;
+
+ return 0;
+}
+
\f
static void print_breakpoint_location (struct breakpoint *b,
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. */
= 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)