Always zero all elements of siginfo_t throughout.
* cygtls.h (_cygtls::thread_context): Declare new field. (_cygtls::thread_id): Ditto. (_cygtls::signal_exit): Move into this class. (_cygtls::copy_context): Declare new function. (_cygtls::signal_debugger): Ditto. * cygtls.cc (_cygtls::init_thread): Fill out thread id field. * exceptions.cc (exception): Change message when exception info is unknown. Copy context to thread local storage. (_cygtls::handle_exceptions): Avoid double test for fault_guarded. Reflect move of signal_exit to _cygtls class. (sigpacket::process): Copy context to thread local storage. (_cygtls::signal_exit): Move to _cygtls class. Call signal_debugger to notify debugger of exiting signal (WIP). Call stackdump here (WIP). (_cygtls::copy_context): Define new function. (_cygtls::signal_debugger): Ditto. * tlsoffsets.h: Regenerate. * include/cygwin.h (_fpstate): New internal structure. (ucontext): Declare new structure (WIP). (__COPY_CONTEXT_SIZE): New define. * exceptions.cc (_cygtls::interrupt_setup): Clear "threadkill" field when there is no sigwaiting thread. (setup_handler): Move event handling into interrupt_setup.
This commit is contained in:
@@ -149,6 +149,8 @@ struct _cygtls
|
||||
sigset_t sigmask;
|
||||
sigset_t sigwait_mask;
|
||||
siginfo_t *sigwait_info;
|
||||
struct ucontext thread_context;
|
||||
DWORD thread_id;
|
||||
unsigned threadkill;
|
||||
siginfo_t infodata;
|
||||
struct pthread *tid;
|
||||
@@ -193,6 +195,9 @@ struct _cygtls
|
||||
static int handle_threadlist_exception (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *c, void *);
|
||||
void init_exception_handler (int (*) (EXCEPTION_RECORD *, exception_list *, CONTEXT *, void*));
|
||||
void init_threadlist_exceptions ();
|
||||
void signal_exit (int) __attribute__ ((noreturn, regparm(2)));
|
||||
void copy_context (CONTEXT *) __attribute__ ((regparm(2)));
|
||||
void signal_debugger (int) __attribute__ ((regparm(2)));
|
||||
|
||||
#ifdef _THREAD_H
|
||||
operator HANDLE () const {return tid->win32_obj_id;}
|
||||
|
Reference in New Issue
Block a user