https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=65c071bc4d4622af861b63066cd8cdb9d0ece467
commit 65c071bc4d4622af861b63066cd8cdb9d0ece467 Author: Jon TURNEY <jon.tur...@dronecode.org.uk> Date: Sat Apr 4 16:19:31 2015 +0100 Initialize context before RtlContextCapture * exceptions.cc (call_signal_handler): Zero initialize context and set context flags, as RlCaptureContext doesn't. Signed-off-by: Jon TURNEY <jon.tur...@dronecode.org.uk> Diff: --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/exceptions.cc | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 50fc01e..6d772c2 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2015-04-04 Jon TURNEY <jon.tur...@dronecode.org.uk> + + * exceptions.cc (call_signal_handler): Zero initialize context and set + context flags, as RlCaptureContext doesn't. + 2015-04-09 Corinna Vinschen <cori...@vinschen.de> * fhandler_dsp.cc (fhandler_dev_dsp::open): Call open_null. diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 0d1f36d..fe543ae 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -1496,8 +1496,12 @@ _cygtls::call_signal_handler () if (thissi.si_cyg) memcpy (&thiscontext.uc_mcontext, ((cygwin_exception *)thissi.si_cyg)->context(), sizeof(CONTEXT)); else - RtlCaptureContext ((CONTEXT *)&thiscontext.uc_mcontext); - /* FIXME: Really this should be the context which the signal interrupted? */ + { + /* FIXME: Really this should be the context which the signal interrupted? */ + memset(&thiscontext.uc_mcontext, 0, sizeof(struct __mcontext)); + thiscontext.uc_mcontext.ctxflags = CONTEXT_FULL; + RtlCaptureContext ((CONTEXT *)&thiscontext.uc_mcontext); + } /* FIXME: If/when sigaltstack is implemented, this will need to do something more complicated */