diff options
author | Phil Muldoon <pmuldoon@redhat.com> | 2009-10-01 20:09:21 +0000 |
---|---|---|
committer | Phil Muldoon <pmuldoon@redhat.com> | 2009-10-01 20:09:21 +0000 |
commit | 2f2da8f6fb6aeb4a624bae53099ea60ff9931172 (patch) | |
tree | d99516aa01a1844457efcdda9b13406bcd4b6b7a /gdb/infcall.c | |
parent | eb503a00aff025a4ad4aaf2e027fbeb86e23bd17 (diff) | |
download | gdb-2f2da8f6fb6aeb4a624bae53099ea60ff9931172.zip gdb-2f2da8f6fb6aeb4a624bae53099ea60ff9931172.tar.gz gdb-2f2da8f6fb6aeb4a624bae53099ea60ff9931172.tar.bz2 |
2009-10-01 Phil Muldoon <pmuldoon@redhat.com>
* infcall.c (call_function_by_hand): Add a new cleanup branch for
std::terminate breakpoints.
Diffstat (limited to 'gdb/infcall.c')
-rw-r--r-- | gdb/infcall.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gdb/infcall.c b/gdb/infcall.c index c9d98cf..277399a 100644 --- a/gdb/infcall.c +++ b/gdb/infcall.c @@ -441,6 +441,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args) struct gdbarch *gdbarch; struct breakpoint *terminate_bp = NULL; struct minimal_symbol *tm; + struct cleanup *terminate_bp_cleanup = NULL; ptid_t call_thread_ptid; struct gdb_exception e; const char *name; @@ -772,7 +773,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args) /* Register a clean-up for unwind_on_terminating_exception_breakpoint. */ if (terminate_bp) - make_cleanup_delete_breakpoint (terminate_bp); + terminate_bp_cleanup = make_cleanup_delete_breakpoint (terminate_bp); /* - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - If you're looking to implement asynchronous dummy-frames, then @@ -987,6 +988,11 @@ When the function is done executing, GDB will silently stop."), internal_error (__FILE__, __LINE__, _("... should not be here")); } + /* If we get here and the std::terminate() breakpoint has been set, + it has to be cleaned manually. */ + if (terminate_bp) + do_cleanups (terminate_bp_cleanup); + /* If we get here the called FUNCTION ran to completion, and the dummy frame has already been popped. */ |