diff options
author | Pedro Alves <palves@redhat.com> | 2009-11-15 20:10:34 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2009-11-15 20:10:34 +0000 |
commit | 678229626ec8f1a0d0d5c494335c05e9d0b52832 (patch) | |
tree | 50c327ad9c91dcaab7a2e4c49d4b57c31dc9deb2 | |
parent | 56710373a0ab471d0891ad49b5c2a70f53cfc00d (diff) | |
download | gdb-678229626ec8f1a0d0d5c494335c05e9d0b52832.zip gdb-678229626ec8f1a0d0d5c494335c05e9d0b52832.tar.gz gdb-678229626ec8f1a0d0d5c494335c05e9d0b52832.tar.bz2 |
* 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.
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/breakpoint.c | 10 | ||||
-rw-r--r-- | gdb/breakpoint.h | 3 | ||||
-rw-r--r-- | gdb/infrun.c | 6 |
4 files changed, 26 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 500eaf8..93fdd8c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,13 @@ 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 the pspace doesn't allow breakpoints. (insert_breakpoint_locations): Remove waiting_for_vfork_done diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 0034338..c6140b0 100644 --- a/gdb/breakpoint.c +++ b/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, diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index d23a852..91e864c 100644 --- a/gdb/breakpoint.h +++ b/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. */ diff --git a/gdb/infrun.c b/gdb/infrun.c index c28366f..98e215c 100644 --- a/gdb/infrun.c +++ b/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) |