aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2003-06-17 19:17:59 +0000
committerDaniel Jacobowitz <drow@false.org>2003-06-17 19:17:59 +0000
commit687595f963bb32dd89d85bdf91e7ca6aa3187502 (patch)
tree7788fac6718249e8a23a98010e1ceb734cd0a0b8
parent29239a8f68f43708d5aef73bc3100c86c70c2091 (diff)
downloadgdb-687595f963bb32dd89d85bdf91e7ca6aa3187502.zip
gdb-687595f963bb32dd89d85bdf91e7ca6aa3187502.tar.gz
gdb-687595f963bb32dd89d85bdf91e7ca6aa3187502.tar.bz2
* breakpoint.c (insert_catchpoint): New function.
(insert_breakpoints): Use catch_exceptions to call insert_catchpoint. Disable catchpoints if they fail to insert.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/breakpoint.c58
2 files changed, 41 insertions, 23 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e8f31a1..e972edc 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2003-06-17 Daniel Jacobowitz <drow@mvista.com>
+ * breakpoint.c (insert_catchpoint): New function.
+ (insert_breakpoints): Use catch_exceptions to call
+ insert_catchpoint. Disable catchpoints if they fail to insert.
+
+2003-06-17 Daniel Jacobowitz <drow@mvista.com>
+
* symfile.c (reread_symbols): Clear sym_private.
2003-06-17 Andrew Cagney <cagney@redhat.com>
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 0739efd..d868225 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -703,6 +703,35 @@ read_memory_nobpt (CORE_ADDR memaddr, char *myaddr, unsigned len)
}
+/* A wrapper function for inserting catchpoints. */
+int
+insert_catchpoint (struct ui_out *uo, void *args)
+{
+ struct breakpoint *b = (struct breakpoint *) args;
+ int val = -1;
+
+ switch (b->type)
+ {
+ case bp_catch_fork:
+ val = target_insert_fork_catchpoint (PIDGET (inferior_ptid));
+ break;
+ case bp_catch_vfork:
+ val = target_insert_vfork_catchpoint (PIDGET (inferior_ptid));
+ break;
+ case bp_catch_exec:
+ val = target_insert_exec_catchpoint (PIDGET (inferior_ptid));
+ break;
+ default:
+ warning ("Internal error, %s line %d.", __FILE__, __LINE__);
+ break;
+ }
+
+ if (val < 0)
+ throw_exception (RETURN_ERROR);
+
+ return 0;
+}
+
/* insert_breakpoints is used when starting or continuing the program.
remove_breakpoints is used when the program stops.
Both return zero if successful,
@@ -1054,32 +1083,15 @@ insert_breakpoints (void)
&& !b->inserted
&& !b->duplicate)
{
- val = -1;
- switch (b->type)
- {
- case bp_catch_fork:
- val = target_insert_fork_catchpoint (PIDGET (inferior_ptid));
- break;
- case bp_catch_vfork:
- val = target_insert_vfork_catchpoint (PIDGET (inferior_ptid));
- break;
- case bp_catch_exec:
- val = target_insert_exec_catchpoint (PIDGET (inferior_ptid));
- break;
- default:
- warning ("Internal error, %s line %d.", __FILE__, __LINE__);
- break;
- }
+ char prefix[64];
+
+ sprintf (prefix, "warning: inserting catchpoint %d: ", b->number);
+ val = catch_exceptions (uiout, insert_catchpoint, b, prefix,
+ RETURN_MASK_ERROR);
if (val < 0)
- {
- fprintf_unfiltered (tmp_error_stream,
- "Cannot insert catchpoint %d.", b->number);
- }
+ b->enable_state = bp_disabled;
else
b->inserted = 1;
-
- if (val)
- return_val = val; /* remember failure */
}
}