diff options
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/breakpoint.c | 26 | ||||
-rw-r--r-- | gdb/breakpoint.h | 9 | ||||
-rw-r--r-- | gdb/infcmd.c | 41 |
4 files changed, 51 insertions, 33 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index adafb65..503e681 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2007-03-27 Pedro Alves <pedro_alves@portugalmail.pt> + + * breakpoint.c (bpstat_num): Add int *num parameter. + * breakpoint.h (bpstat_num): Likewise. + * infcmd.c (continue_command): Adjust to new bpstat_num + interface. + (program_info): Likewise. + 2007-03-27 Ulrich Weigand <uweigand@de.ibm.com> * config/sh/tm-sh.h: Remove file. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index abefcdc..fc8e389 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -2054,28 +2054,30 @@ bpstat_find_step_resume_breakpoint (bpstat bsp) } -/* Return the breakpoint number of the first breakpoint we are stopped +/* Put in *NUM the breakpoint number of the first breakpoint we are stopped at. *BSP upon return is a bpstat which points to the remaining breakpoints stopped at (but which is not guaranteed to be good for anything but further calls to bpstat_num). - Return 0 if passed a bpstat which does not indicate any breakpoints. */ + Return 0 if passed a bpstat which does not indicate any breakpoints. + Return -1 if stopped at a breakpoint that has been deleted since + we set it. + Return 1 otherwise. */ int -bpstat_num (bpstat *bsp) +bpstat_num (bpstat *bsp, int *num) { struct breakpoint *b; if ((*bsp) == NULL) return 0; /* No more breakpoint values */ - else - { - b = (*bsp)->breakpoint_at; - *bsp = (*bsp)->next; - if (b == NULL) - return -1; /* breakpoint that's been deleted since */ - else - return b->number; /* We have its number */ - } + + b = (*bsp)->breakpoint_at; + *bsp = (*bsp)->next; + if (b == NULL) + return -1; /* breakpoint that's been deleted since */ + + *num = b->number; /* We have its number */ + return 1; } /* Modify BS so that the actions will not be performed. */ diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index 9eebfc8..1230f49 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -562,12 +562,15 @@ extern int bpstat_have_active_hw_watchpoints (void); return means print the frame as well as the source line). */ extern enum print_stop_action bpstat_print (bpstat); -/* Return the breakpoint number of the first breakpoint we are stopped +/* Put in *NUM the breakpoint number of the first breakpoint we are stopped at. *BSP upon return is a bpstat which points to the remaining breakpoints stopped at (but which is not guaranteed to be good for anything but further calls to bpstat_num). - Return 0 if passed a bpstat which does not indicate any breakpoints. */ -extern int bpstat_num (bpstat *); + Return 0 if passed a bpstat which does not indicate any breakpoints. + Return -1 if stopped at a breakpoint that has been deleted since + we set it. + Return 1 otherwise. */ +extern int bpstat_num (bpstat *, int *); /* Perform actions associated with having stopped at *BSP. Actually, we just use this for breakpoint commands. Perhaps other actions will go here diff --git a/gdb/infcmd.c b/gdb/infcmd.c index f3a61f2..a1a64c0 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -622,23 +622,27 @@ continue_command (char *proc_count_exp, int from_tty) if (proc_count_exp != NULL) { bpstat bs = stop_bpstat; - int num = bpstat_num (&bs); - if (num == 0 && from_tty) + int num, stat; + int stopped = 0; + + while ((stat = bpstat_num (&bs, &num)) != 0) + if (stat > 0) + { + set_ignore_count (num, + parse_and_eval_long (proc_count_exp) - 1, + from_tty); + /* set_ignore_count prints a message ending with a period. + So print two spaces before "Continuing.". */ + if (from_tty) + printf_filtered (" "); + stopped = 1; + } + + if (!stopped && from_tty) { printf_filtered ("Not stopped at any breakpoint; argument ignored.\n"); } - while (num != 0) - { - set_ignore_count (num, - parse_and_eval_long (proc_count_exp) - 1, - from_tty); - /* set_ignore_count prints a message ending with a period. - So print two spaces before "Continuing.". */ - if (from_tty) - printf_filtered (" "); - num = bpstat_num (&bs); - } } if (from_tty) @@ -1386,7 +1390,8 @@ static void program_info (char *args, int from_tty) { bpstat bs = stop_bpstat; - int num = bpstat_num (&bs); + int num; + int stat = bpstat_num (&bs, &num); if (!target_has_execution) { @@ -1399,20 +1404,20 @@ program_info (char *args, int from_tty) hex_string ((unsigned long) stop_pc)); if (stop_step) printf_filtered (_("It stopped after being stepped.\n")); - else if (num != 0) + else if (stat != 0) { /* There may be several breakpoints in the same place, so this isn't as strange as it seems. */ - while (num != 0) + while (stat != 0) { - if (num < 0) + if (stat < 0) { printf_filtered (_("\ It stopped at a breakpoint that has since been deleted.\n")); } else printf_filtered (_("It stopped at breakpoint %d.\n"), num); - num = bpstat_num (&bs); + stat = bpstat_num (&bs, &num); } } else if (stop_signal != TARGET_SIGNAL_0) |