* 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.
This commit is contained in:
		| @@ -1,3 +1,21 @@ | |||||||
|  | 2005-12-02  Christopher Faylor  <cgf@timesys.com> | ||||||
|  |  | ||||||
|  | 	* 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. | ||||||
|  |  | ||||||
| 2005-12-02  Christopher Faylor  <cgf@timesys.com> | 2005-12-02  Christopher Faylor  <cgf@timesys.com> | ||||||
|  |  | ||||||
| 	* cygtls.h (_cygtls::el): New field. | 	* cygtls.h (_cygtls::el): New field. | ||||||
|   | |||||||
| @@ -240,7 +240,7 @@ _cygtls::set_siginfo (sigpacket *pack) | |||||||
|  |  | ||||||
| extern "C" DWORD __stdcall RtlUnwind (void *, void *, void *, DWORD); | extern "C" DWORD __stdcall RtlUnwind (void *, void *, void *, DWORD); | ||||||
| int | int | ||||||
| _cygtls::handle_threadlist_exception (EXCEPTION_RECORD *e, void *frame, CONTEXT *c, void *) | _cygtls::handle_threadlist_exception (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *c, void *) | ||||||
| { | { | ||||||
|   if (e->ExceptionCode != STATUS_ACCESS_VIOLATION) |   if (e->ExceptionCode != STATUS_ACCESS_VIOLATION) | ||||||
|     { |     { | ||||||
| @@ -281,6 +281,8 @@ _cygtls::init_exception_handler (exception_handler *eh) | |||||||
| { | { | ||||||
|   el.handler = eh; |   el.handler = eh; | ||||||
|   el.prev = _except_list; |   el.prev = _except_list; | ||||||
|  |   if (!el.prev->prev && !el.prev->handler) | ||||||
|  |     el.prev = ⪙ | ||||||
|   _except_list = ⪙ |   _except_list = ⪙ | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -216,9 +216,9 @@ struct _cygtls | |||||||
|     __attribute__((regparm(3))); |     __attribute__((regparm(3))); | ||||||
|  |  | ||||||
|   /* exception handling */ |   /* exception handling */ | ||||||
|   static int handle_exceptions (EXCEPTION_RECORD *, void *, CONTEXT *, void *); |   static int handle_exceptions (EXCEPTION_RECORD *, exception_list *, CONTEXT *, void *); | ||||||
|   static int handle_threadlist_exception (EXCEPTION_RECORD *e, void *frame, CONTEXT *c, void *); |   static int handle_threadlist_exception (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *c, void *); | ||||||
|   void init_exception_handler (int (*) (EXCEPTION_RECORD *, void *, CONTEXT *, void*)); |   void init_exception_handler (int (*) (EXCEPTION_RECORD *, exception_list *, CONTEXT *, void*)); | ||||||
|   void init_threadlist_exceptions (); |   void init_threadlist_exceptions (); | ||||||
|  |  | ||||||
| #ifdef _THREAD_H | #ifdef _THREAD_H | ||||||
|   | |||||||
| @@ -381,9 +381,9 @@ try_to_debug (bool waitloop) | |||||||
| } | } | ||||||
|  |  | ||||||
| extern "C" DWORD __stdcall RtlUnwind (void *, void *, void *, DWORD); | 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 | void __stdcall | ||||||
| rtl_unwind (void *frame, PEXCEPTION_RECORD e) | rtl_unwind (exception_list *frame, PEXCEPTION_RECORD e) | ||||||
| { | { | ||||||
|   __asm__ ("\n\ |   __asm__ ("\n\ | ||||||
|   pushl		%%ebx					\n\ |   pushl		%%ebx					\n\ | ||||||
| @@ -404,7 +404,7 @@ rtl_unwind (void *frame, PEXCEPTION_RECORD e) | |||||||
| /* Main exception handler. */ | /* Main exception handler. */ | ||||||
|  |  | ||||||
| int | 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 bool NO_COPY debugging; | ||||||
|   static int NO_COPY recursed; |   static int NO_COPY recursed; | ||||||
| @@ -509,6 +509,7 @@ _cygtls::handle_exceptions (EXCEPTION_RECORD *e, void *frame, CONTEXT *in, void | |||||||
|     } |     } | ||||||
|  |  | ||||||
|   rtl_unwind (frame, e); |   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 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); |   debug_printf ("In cygwin_except_handler sig %d at %p", si.si_signo, in->Eip); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -99,14 +99,13 @@ to install your own exception filter. This one is documented. | |||||||
|    a teensy bit of detail of the innards of exception handling (i.e. what we |    a teensy bit of detail of the innards of exception handling (i.e. what we | ||||||
|    have to do).  */ |    have to do).  */ | ||||||
|  |  | ||||||
| typedef int (exception_handler) | typedef int (exception_handler) (EXCEPTION_RECORD *, struct _exception_list *, | ||||||
|      (EXCEPTION_RECORD *, void *, CONTEXT *, void *); | 				 CONTEXT *, void *); | ||||||
|  |  | ||||||
| typedef struct _exception_list | typedef struct _exception_list | ||||||
| { | { | ||||||
|   struct _exception_list *prev; |   struct _exception_list *prev; | ||||||
|   exception_handler *handler; |   exception_handler *handler; | ||||||
|   unsigned long stuff[8]; |  | ||||||
| } exception_list; | } exception_list; | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
|   | |||||||
| @@ -1,125 +1,125 @@ | |||||||
| //;# autogenerated:  Do not edit. | //;# autogenerated:  Do not edit. | ||||||
|  |  | ||||||
| //; $tls::sizeof__cygtls = 4028; | //; $tls::sizeof__cygtls = 3996; | ||||||
| //; $tls::func = -4028; | //; $tls::func = -3996; | ||||||
| //; $tls::pfunc = 0; | //; $tls::pfunc = 0; | ||||||
| //; $tls::saved_errno = -4024; | //; $tls::saved_errno = -3992; | ||||||
| //; $tls::psaved_errno = 4; | //; $tls::psaved_errno = 4; | ||||||
| //; $tls::sa_flags = -4020; | //; $tls::sa_flags = -3988; | ||||||
| //; $tls::psa_flags = 8; | //; $tls::psa_flags = 8; | ||||||
| //; $tls::oldmask = -4016; | //; $tls::oldmask = -3984; | ||||||
| //; $tls::poldmask = 12; | //; $tls::poldmask = 12; | ||||||
| //; $tls::deltamask = -4012; | //; $tls::deltamask = -3980; | ||||||
| //; $tls::pdeltamask = 16; | //; $tls::pdeltamask = 16; | ||||||
| //; $tls::event = -4008; | //; $tls::event = -3976; | ||||||
| //; $tls::pevent = 20; | //; $tls::pevent = 20; | ||||||
| //; $tls::errno_addr = -4004; | //; $tls::errno_addr = -3972; | ||||||
| //; $tls::perrno_addr = 24; | //; $tls::perrno_addr = 24; | ||||||
| //; $tls::initialized = -4000; | //; $tls::initialized = -3968; | ||||||
| //; $tls::pinitialized = 28; | //; $tls::pinitialized = 28; | ||||||
| //; $tls::sigmask = -3996; | //; $tls::sigmask = -3964; | ||||||
| //; $tls::psigmask = 32; | //; $tls::psigmask = 32; | ||||||
| //; $tls::sigwait_mask = -3992; | //; $tls::sigwait_mask = -3960; | ||||||
| //; $tls::psigwait_mask = 36; | //; $tls::psigwait_mask = 36; | ||||||
| //; $tls::sigwait_info = -3988; | //; $tls::sigwait_info = -3956; | ||||||
| //; $tls::psigwait_info = 40; | //; $tls::psigwait_info = 40; | ||||||
| //; $tls::threadkill = -3984; | //; $tls::threadkill = -3952; | ||||||
| //; $tls::pthreadkill = 44; | //; $tls::pthreadkill = 44; | ||||||
| //; $tls::infodata = -3980; | //; $tls::infodata = -3948; | ||||||
| //; $tls::pinfodata = 48; | //; $tls::pinfodata = 48; | ||||||
| //; $tls::tid = -3832; | //; $tls::tid = -3800; | ||||||
| //; $tls::ptid = 196; | //; $tls::ptid = 196; | ||||||
| //; $tls::local_clib = -3828; | //; $tls::local_clib = -3796; | ||||||
| //; $tls::plocal_clib = 200; | //; $tls::plocal_clib = 200; | ||||||
| //; $tls::__dontuse = -3828; | //; $tls::__dontuse = -3796; | ||||||
| //; $tls::p__dontuse = 200; | //; $tls::p__dontuse = 200; | ||||||
| //; $tls::locals = -2764; | //; $tls::locals = -2732; | ||||||
| //; $tls::plocals = 1264; | //; $tls::plocals = 1264; | ||||||
| //; $tls::_ctinfo = -1132; | //; $tls::_ctinfo = -1100; | ||||||
| //; $tls::p_ctinfo = 2896; | //; $tls::p_ctinfo = 2896; | ||||||
| //; $tls::el = -1128; | //; $tls::el = -1096; | ||||||
| //; $tls::pel = 2900; | //; $tls::pel = 2900; | ||||||
| //; $tls::andreas = -1088; | //; $tls::andreas = -1088; | ||||||
| //; $tls::pandreas = 2940; | //; $tls::pandreas = 2908; | ||||||
| //; $tls::wq = -1080; | //; $tls::wq = -1080; | ||||||
| //; $tls::pwq = 2948; | //; $tls::pwq = 2916; | ||||||
| //; $tls::prev = -1052; | //; $tls::prev = -1052; | ||||||
| //; $tls::pprev = 2976; | //; $tls::pprev = 2944; | ||||||
| //; $tls::next = -1048; | //; $tls::next = -1048; | ||||||
| //; $tls::pnext = 2980; | //; $tls::pnext = 2948; | ||||||
| //; $tls::stackptr = -1044; | //; $tls::stackptr = -1044; | ||||||
| //; $tls::pstackptr = 2984; | //; $tls::pstackptr = 2952; | ||||||
| //; $tls::sig = -1040; | //; $tls::sig = -1040; | ||||||
| //; $tls::psig = 2988; | //; $tls::psig = 2956; | ||||||
| //; $tls::incyg = -1036; | //; $tls::incyg = -1036; | ||||||
| //; $tls::pincyg = 2992; | //; $tls::pincyg = 2960; | ||||||
| //; $tls::spinning = -1032; | //; $tls::spinning = -1032; | ||||||
| //; $tls::pspinning = 2996; | //; $tls::pspinning = 2964; | ||||||
| //; $tls::stacklock = -1028; | //; $tls::stacklock = -1028; | ||||||
| //; $tls::pstacklock = 3000; | //; $tls::pstacklock = 2968; | ||||||
| //; $tls::stack = -1024; | //; $tls::stack = -1024; | ||||||
| //; $tls::pstack = 3004; | //; $tls::pstack = 2972; | ||||||
| //; $tls::padding = 0; | //; $tls::padding = 0; | ||||||
| //; $tls::ppadding = 4028; | //; $tls::ppadding = 3996; | ||||||
| //; __DATA__ | //; __DATA__ | ||||||
|  |  | ||||||
| #define tls_func (-4028) | #define tls_func (-3996) | ||||||
| #define tls_pfunc (0) | #define tls_pfunc (0) | ||||||
| #define tls_saved_errno (-4024) | #define tls_saved_errno (-3992) | ||||||
| #define tls_psaved_errno (4) | #define tls_psaved_errno (4) | ||||||
| #define tls_sa_flags (-4020) | #define tls_sa_flags (-3988) | ||||||
| #define tls_psa_flags (8) | #define tls_psa_flags (8) | ||||||
| #define tls_oldmask (-4016) | #define tls_oldmask (-3984) | ||||||
| #define tls_poldmask (12) | #define tls_poldmask (12) | ||||||
| #define tls_deltamask (-4012) | #define tls_deltamask (-3980) | ||||||
| #define tls_pdeltamask (16) | #define tls_pdeltamask (16) | ||||||
| #define tls_event (-4008) | #define tls_event (-3976) | ||||||
| #define tls_pevent (20) | #define tls_pevent (20) | ||||||
| #define tls_errno_addr (-4004) | #define tls_errno_addr (-3972) | ||||||
| #define tls_perrno_addr (24) | #define tls_perrno_addr (24) | ||||||
| #define tls_initialized (-4000) | #define tls_initialized (-3968) | ||||||
| #define tls_pinitialized (28) | #define tls_pinitialized (28) | ||||||
| #define tls_sigmask (-3996) | #define tls_sigmask (-3964) | ||||||
| #define tls_psigmask (32) | #define tls_psigmask (32) | ||||||
| #define tls_sigwait_mask (-3992) | #define tls_sigwait_mask (-3960) | ||||||
| #define tls_psigwait_mask (36) | #define tls_psigwait_mask (36) | ||||||
| #define tls_sigwait_info (-3988) | #define tls_sigwait_info (-3956) | ||||||
| #define tls_psigwait_info (40) | #define tls_psigwait_info (40) | ||||||
| #define tls_threadkill (-3984) | #define tls_threadkill (-3952) | ||||||
| #define tls_pthreadkill (44) | #define tls_pthreadkill (44) | ||||||
| #define tls_infodata (-3980) | #define tls_infodata (-3948) | ||||||
| #define tls_pinfodata (48) | #define tls_pinfodata (48) | ||||||
| #define tls_tid (-3832) | #define tls_tid (-3800) | ||||||
| #define tls_ptid (196) | #define tls_ptid (196) | ||||||
| #define tls_local_clib (-3828) | #define tls_local_clib (-3796) | ||||||
| #define tls_plocal_clib (200) | #define tls_plocal_clib (200) | ||||||
| #define tls___dontuse (-3828) | #define tls___dontuse (-3796) | ||||||
| #define tls_p__dontuse (200) | #define tls_p__dontuse (200) | ||||||
| #define tls_locals (-2764) | #define tls_locals (-2732) | ||||||
| #define tls_plocals (1264) | #define tls_plocals (1264) | ||||||
| #define tls__ctinfo (-1132) | #define tls__ctinfo (-1100) | ||||||
| #define tls_p_ctinfo (2896) | #define tls_p_ctinfo (2896) | ||||||
| #define tls_el (-1128) | #define tls_el (-1096) | ||||||
| #define tls_pel (2900) | #define tls_pel (2900) | ||||||
| #define tls_andreas (-1088) | #define tls_andreas (-1088) | ||||||
| #define tls_pandreas (2940) | #define tls_pandreas (2908) | ||||||
| #define tls_wq (-1080) | #define tls_wq (-1080) | ||||||
| #define tls_pwq (2948) | #define tls_pwq (2916) | ||||||
| #define tls_prev (-1052) | #define tls_prev (-1052) | ||||||
| #define tls_pprev (2976) | #define tls_pprev (2944) | ||||||
| #define tls_next (-1048) | #define tls_next (-1048) | ||||||
| #define tls_pnext (2980) | #define tls_pnext (2948) | ||||||
| #define tls_stackptr (-1044) | #define tls_stackptr (-1044) | ||||||
| #define tls_pstackptr (2984) | #define tls_pstackptr (2952) | ||||||
| #define tls_sig (-1040) | #define tls_sig (-1040) | ||||||
| #define tls_psig (2988) | #define tls_psig (2956) | ||||||
| #define tls_incyg (-1036) | #define tls_incyg (-1036) | ||||||
| #define tls_pincyg (2992) | #define tls_pincyg (2960) | ||||||
| #define tls_spinning (-1032) | #define tls_spinning (-1032) | ||||||
| #define tls_pspinning (2996) | #define tls_pspinning (2964) | ||||||
| #define tls_stacklock (-1028) | #define tls_stacklock (-1028) | ||||||
| #define tls_pstacklock (3000) | #define tls_pstacklock (2968) | ||||||
| #define tls_stack (-1024) | #define tls_stack (-1024) | ||||||
| #define tls_pstack (3004) | #define tls_pstack (2972) | ||||||
| #define tls_padding (0) | #define tls_padding (0) | ||||||
| #define tls_ppadding (4028) | #define tls_ppadding (3996) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user