From 49085f6f16adf9f6cf97e19f94878071cebc49fe Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sat, 3 Dec 2005 05:01:51 +0000 Subject: * include/exceptions.h (exception_list): Revert previous change. Windows doesn't care. (exception_handler): Use real exception_list parameter type rather than void * * tlsoffsets.h: Regenerate. * cygtls.h (_cygtls::handle_exceptions): Use real exception_list parameter type rather than void *. (handle_threadlist_exception): Ditto. (init_exception_handler): Ditto. * cygtls.cc (_cygtls::handle_threadlist_exception ): Ditto. (_cygtls::init_exception_handler): Add kludge to terminate linked list with a loop, which seems to solve problem of RtlUnwind causing problems * exceptions.cc (rtl_unwind): Use real exception_list parameter type rather than void *. (_cygtls::handle_exceptions): Ditto. --- winsup/cygwin/exceptions.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'winsup/cygwin/exceptions.cc') diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 9851183fc..66f111ef8 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -381,9 +381,9 @@ try_to_debug (bool waitloop) } extern "C" DWORD __stdcall RtlUnwind (void *, void *, void *, DWORD); -static void __stdcall rtl_unwind (void *, PEXCEPTION_RECORD) __attribute__ ((noinline, regparm (3))); +static void __stdcall rtl_unwind (exception_list *, PEXCEPTION_RECORD) __attribute__ ((noinline, regparm (3))); void __stdcall -rtl_unwind (void *frame, PEXCEPTION_RECORD e) +rtl_unwind (exception_list *frame, PEXCEPTION_RECORD e) { __asm__ ("\n\ pushl %%ebx \n\ @@ -404,7 +404,7 @@ rtl_unwind (void *frame, PEXCEPTION_RECORD e) /* Main exception handler. */ int -_cygtls::handle_exceptions (EXCEPTION_RECORD *e, void *frame, CONTEXT *in, void *) +_cygtls::handle_exceptions (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *in, void *) { static bool NO_COPY debugging; static int NO_COPY recursed; @@ -509,6 +509,7 @@ _cygtls::handle_exceptions (EXCEPTION_RECORD *e, void *frame, CONTEXT *in, void } rtl_unwind (frame, e); + debug_printf ("In cygwin_except_handler exc %p at %p sp %p", e->ExceptionCode, in->Eip, in->Esp); debug_printf ("In cygwin_except_handler sig %d at %p", si.si_signo, in->Eip); -- cgit v1.2.3