diff options
author | Daniel Jacobowitz <drow@false.org> | 2003-06-17 19:17:59 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2003-06-17 19:17:59 +0000 |
commit | 687595f963bb32dd89d85bdf91e7ca6aa3187502 (patch) | |
tree | 7788fac6718249e8a23a98010e1ceb734cd0a0b8 | |
parent | 29239a8f68f43708d5aef73bc3100c86c70c2091 (diff) | |
download | gdb-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/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/breakpoint.c | 58 |
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 */ } } |