aboutsummaryrefslogtreecommitdiff
path: root/gdb/breakpoint.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r--gdb/breakpoint.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 61a7a9f..e24105c 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -113,7 +113,7 @@ static void
breakpoints_info PARAMS ((char *, int));
static void
-breakpoint_1 PARAMS ((int, int));
+breakpoint_1 PARAMS ((int, enum bptype));
static bpstat
bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
@@ -143,8 +143,17 @@ extern int demangle; /* Print de-mangled symbol names? */
/* Are we executing breakpoint commands? */
static int executing_breakpoint_commands;
+/* Walk the following statement or block through all breakpoints.
+ ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
+ breakpoint. */
+
#define ALL_BREAKPOINTS(b) for (b = breakpoint_chain; b; b = b->next)
+#define ALL_BREAKPOINTS_SAFE(b,tmp) \
+ for (b = breakpoint_chain; \
+ b? (tmp=b->next, 1): 0; \
+ b = tmp)
+
/* Chain of all breakpoints defined. */
struct breakpoint *breakpoint_chain;
@@ -810,7 +819,7 @@ bpstat_stop_status (pc, frame_address)
int real_breakpoint = 0;
#endif
/* Root of the chain of bpstat's */
- struct bpstat__struct root_bs[1];
+ struct bpstat root_bs[1];
/* Pointer to the last thing in the chain currently. */
bpstat bs = root_bs;
@@ -2229,11 +2238,11 @@ breakpoint_re_set_one (bint)
void
breakpoint_re_set ()
{
- struct breakpoint *b;
+ struct breakpoint *b, *temp;
static char message1[] = "Error in re-setting breakpoint %d:\n";
char message[sizeof (message1) + 30 /* slop */];
- ALL_BREAKPOINTS (b)
+ ALL_BREAKPOINTS_SAFE (b, temp)
{
b->symtab = 0; /* Be sure we don't point to old dead symtab */
sprintf (message, message1, b->number); /* Format possible error msg */