diff options
author | Christopher Faylor <me@cgf.cx> | 2013-01-02 22:34:06 +0400 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2013-01-02 22:34:06 +0400 |
commit | ca77b848e7bb26b514659c875247516b9ebcff84 (patch) | |
tree | fa1df218dc69537ca4a30cb588bed6ab207f48ee /winsup/cygwin/exception.h | |
parent | 74f8546d6ecfd867fbd7eaed16dc2156af013402 (diff) |
* cygtls.h (_cygtls::signal_exit): Delete from class.
* exception.h (cygwin_exception): New class.
(cygwin_exception::dumpstack): Declare new function.
(cygwin_exception::context): Ditto.
(cygwin_exception::dump_exception): Ditto.
* exceptions.cc (cygwin_exception::dump_exception): Move into cygwin_exception
class. Accommodate new variable names.
(cygwin_exception::dumpstack): Ditto stackdump -> dumpstack.
(exception::handle): Move andreas processing earlier. Defer signal processing
decisions to the signal thread where they belong. Pass exception information
to sig_send via new siginfo_t si_cyg field.
(ctrl_c_handler): Wait for SIGHUP signal to be processed since it could cause a
process exit and we don't want races with thread exit lock.
(signal_exit): Move back here from sigproc.cc. Modify arguments and remove
from sigpacket class. Decide when to dump core based on signal type.
(sigpacket::process): Handle exiting signals in context of threads rather than
in the signal thread. Signal debugger on non-Windows signals. Remove
setup_signal_exit call.
* sigproc.cc (no_signals_available): Remove argument.
(signal_exit_code): Delete.
(close_my_readsig): Ditto.
(_cygtls::signal_exit): Move to exceptions.cc.
(sigproc_terminate): Don't attempt to terminate signal thread.
(setup_signal_exit): Delete.
(exit_thread): Use new si_cyg entry in siginfo_t.
(sig_send): Just use empty initializer for si. Accommodate change in
no_signals_available argument.
(wait_sig): Remove attempt to "go asynchronous" on process exit. Delete
__SIGEXIT handling. Don't ever exit.
* sigproc.h: Remove __SIGEXIT from signal enum. Renumber.
* include/cygwin/signal.h (siginfo_t): Add si_cyg entry.
Diffstat (limited to 'winsup/cygwin/exception.h')
-rw-r--r-- | winsup/cygwin/exception.h | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/winsup/cygwin/exception.h b/winsup/cygwin/exception.h index b0a66b4ee..c14aa1614 100644 --- a/winsup/cygwin/exception.h +++ b/winsup/cygwin/exception.h @@ -1,6 +1,6 @@ /* exception.h - Copyright 2010, 2011, 2012 Red Hat, Inc. + Copyright 2010, 2011, 2012, 2013 Red Hat, Inc. This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for @@ -28,10 +28,15 @@ public: ~exception () __attribute__ ((always_inline)) { _except_list = save; } }; -void stackdump (DWORD, CONTEXT * = NULL, EXCEPTION_RECORD * = NULL); -extern void inline -stackdump (DWORD n, bool) +class cygwin_exception { - stackdump (n, (CONTEXT *) 1); -} - + DWORD ebp; + PCONTEXT ctx; + EXCEPTION_RECORD *e; + void dump_exception (); +public: + cygwin_exception (DWORD in_ebp, PCONTEXT in_ctx = NULL, EXCEPTION_RECORD *in_e = NULL): + ebp (in_ebp), ctx (in_ctx), e (in_e) {} + void dumpstack (); + PCONTEXT context () const {return ctx;} +}; |