mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 11:04:18 +08:00
* 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:
parent
56710373a0
commit
678229626e
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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. */
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user