Browse Source

* 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.
gdb_7_1-branch
Pedro Alves 17 years ago
parent
commit
678229626e
  1. 8
      gdb/ChangeLog
  2. 10
      gdb/breakpoint.c
  3. 3
      gdb/breakpoint.h
  4. 6
      gdb/infrun.c

8
gdb/ChangeLog

@ -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

10
gdb/breakpoint.c

@ -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,

3
gdb/breakpoint.h

@ -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. */

6
gdb/infrun.c

@ -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…
Cancel
Save