From 6215837523703c2c0b58200341ae3861d8b7a28d Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 25 May 2011 11:33:29 +0000 Subject: * init.cc (dll_entry): Reinstantiate wow64_test_stack_marker and previous stack tests. --- winsup/cygwin/init.cc | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'winsup/cygwin/init.cc') diff --git a/winsup/cygwin/init.cc b/winsup/cygwin/init.cc index 9f66c3ba2..037990bff 100644 --- a/winsup/cygwin/init.cc +++ b/winsup/cygwin/init.cc @@ -115,7 +115,7 @@ extern void __stdcall dll_crt0_0 (); extern "C" BOOL WINAPI dll_entry (HANDLE h, DWORD reason, void *static_load) { - PTEB teb; + BOOL wow64_test_stack_marker; switch (reason) { @@ -131,10 +131,9 @@ dll_entry (HANDLE h, DWORD reason, void *static_load) the auto load address of DLLs? Check if we're running in WOW64 on a 64 bit machine *and* are spawned by a genuine 64 bit process. If so, respawn. */ - teb = NtCurrentTeb (); if (wincap.is_wow64 () - && teb->Tib.StackLimit >= (PBOOL) 0x400000 - && teb->Tib.StackBase <= (PBOOL) 0x10000000) + && &wow64_test_stack_marker >= (PBOOL) 0x400000 + && &wow64_test_stack_marker <= (PBOOL) 0x10000000) respawn_wow64_process (); dll_crt0_0 (); @@ -150,19 +149,17 @@ dll_entry (HANDLE h, DWORD reason, void *static_load) munge_threadfunc (); break; case DLL_THREAD_DETACH: - teb = NtCurrentTeb (); if (dll_finished_loading - && (PVOID) &teb >= teb->Tib.StackLimit - && (PVOID) &teb < teb->Tib.StackBase + && (PVOID) &_my_tls > (PVOID) &wow64_test_stack_marker && _my_tls.isinitialized ()) _my_tls.remove (0); /* Windows 2000 has a bug in NtTerminateThread. Instead of releasing the stack at teb->DeallocationStack it uses the value of teb->Tib.StackLimit to evaluate the stack address. So we just claim there is no stack. */ - if (teb->DeallocationStack == NULL + if (NtCurrentTeb ()->DeallocationStack == NULL && !wincap.has_stack_size_param_is_a_reservation ()) - teb->Tib.StackLimit = NULL; + NtCurrentTeb ()->Tib.StackLimit = NULL; break; } -- cgit v1.2.3