Cygwin: x86_64: pthreads: Install exception handler after switching stack
After creating a pthread, the stack gets moved to the desired memory location. While the 32 bit thread wrapper copies the exception handler information to the new stack (so we have at least *some* exception handler present), the x86_64 code didn't perform any exception handler magic. Fix that. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
ba3e20894d
commit
9a5abcc896
|
@ -30,6 +30,7 @@ details. */
|
||||||
#include "cygheap.h"
|
#include "cygheap.h"
|
||||||
#include "ntdll.h"
|
#include "ntdll.h"
|
||||||
#include "cygwait.h"
|
#include "cygwait.h"
|
||||||
|
#include "exception.h"
|
||||||
|
|
||||||
extern "C" void __fp_lock_all ();
|
extern "C" void __fp_lock_all ();
|
||||||
extern "C" void __fp_unlock_all ();
|
extern "C" void __fp_unlock_all ();
|
||||||
|
@ -1990,6 +1991,7 @@ pthread_spinlock::unlock ()
|
||||||
DWORD WINAPI
|
DWORD WINAPI
|
||||||
pthread::thread_init_wrapper (void *arg)
|
pthread::thread_init_wrapper (void *arg)
|
||||||
{
|
{
|
||||||
|
exception protect;
|
||||||
pthread *thread = (pthread *) arg;
|
pthread *thread = (pthread *) arg;
|
||||||
/* This *must* be set prior to calling set_tls_self_pointer or there is
|
/* This *must* be set prior to calling set_tls_self_pointer or there is
|
||||||
a race with the signal processing code which may miss the signal mask
|
a race with the signal processing code which may miss the signal mask
|
||||||
|
|
Loading…
Reference in New Issue