Drop has_set_thread_stack_guarantee flag
This commit is contained in:
parent
8b8c6c014b
commit
23a556f2c5
@ -588,7 +588,6 @@ LoadDLLfuncEx (IdnToUnicode, 20, kernel32, 1)
|
|||||||
LoadDLLfunc (LocaleNameToLCID, 8, kernel32)
|
LoadDLLfunc (LocaleNameToLCID, 8, kernel32)
|
||||||
LoadDLLfuncEx (PrefetchVirtualMemory, 16, kernel32, 1)
|
LoadDLLfuncEx (PrefetchVirtualMemory, 16, kernel32, 1)
|
||||||
LoadDLLfunc (SetThreadGroupAffinity, 12, kernel32)
|
LoadDLLfunc (SetThreadGroupAffinity, 12, kernel32)
|
||||||
LoadDLLfunc (SetThreadStackGuarantee, 4, kernel32)
|
|
||||||
|
|
||||||
/* ldap functions are cdecl! */
|
/* ldap functions are cdecl! */
|
||||||
#pragma push_macro ("mangle")
|
#pragma push_macro ("mangle")
|
||||||
|
@ -443,11 +443,9 @@ child_info_fork::alloc_stack ()
|
|||||||
api_fatal ("fork: couldn't allocate new stack guard page %p, %E",
|
api_fatal ("fork: couldn't allocate new stack guard page %p, %E",
|
||||||
stack_ptr);
|
stack_ptr);
|
||||||
}
|
}
|
||||||
/* On post-XP systems, set thread stack guarantee matching the
|
/* Set thread stack guarantee matching the guardsize.
|
||||||
guardsize. Note that the guardsize is one page bigger than
|
Note that the guardsize is one page bigger than the guarantee. */
|
||||||
the guarantee. */
|
if (real_guardsize > wincap.def_guard_page_size ())
|
||||||
if (wincap.has_set_thread_stack_guarantee ()
|
|
||||||
&& real_guardsize > wincap.def_guard_page_size ())
|
|
||||||
{
|
{
|
||||||
real_guardsize -= wincap.page_size ();
|
real_guardsize -= wincap.page_size ();
|
||||||
SetThreadStackGuarantee (&real_guardsize);
|
SetThreadStackGuarantee (&real_guardsize);
|
||||||
|
@ -1581,9 +1581,8 @@ altstack_wrapper (int sig, siginfo_t *siginfo, ucontext_t *sigctx,
|
|||||||
/* ...restore guard pages in original stack as if MSVCRT::_resetstkovlw
|
/* ...restore guard pages in original stack as if MSVCRT::_resetstkovlw
|
||||||
has been called.
|
has been called.
|
||||||
|
|
||||||
Compute size of guard pages. If SetThreadStackGuarantee isn't
|
Compute size of guard pages. If SetThreadStackGuarantee returns 0,
|
||||||
supported, or if it returns 0, use the default guard page size. */
|
use the default guard page size. */
|
||||||
if (wincap.has_set_thread_stack_guarantee ())
|
|
||||||
SetThreadStackGuarantee (&guard_size);
|
SetThreadStackGuarantee (&guard_size);
|
||||||
if (!guard_size)
|
if (!guard_size)
|
||||||
guard_size = wincap.def_guard_page_size ();
|
guard_size = wincap.def_guard_page_size ();
|
||||||
|
@ -609,10 +609,9 @@ pthread_wrapper (PVOID arg)
|
|||||||
The below assembler code will release the OS stack after switching to our
|
The below assembler code will release the OS stack after switching to our
|
||||||
new stack. */
|
new stack. */
|
||||||
wrapper_arg.stackaddr = dealloc_addr;
|
wrapper_arg.stackaddr = dealloc_addr;
|
||||||
/* On post-XP systems, set thread stack guarantee matching the guardsize.
|
/* Set thread stack guarantee matching the guardsize.
|
||||||
Note that the guardsize is one page bigger than the guarantee. */
|
Note that the guardsize is one page bigger than the guarantee. */
|
||||||
if (wincap.has_set_thread_stack_guarantee ()
|
if (wrapper_arg.guardsize > wincap.def_guard_page_size ())
|
||||||
&& wrapper_arg.guardsize > wincap.def_guard_page_size ())
|
|
||||||
{
|
{
|
||||||
wrapper_arg.guardsize -= wincap.page_size ();
|
wrapper_arg.guardsize -= wincap.page_size ();
|
||||||
SetThreadStackGuarantee (&wrapper_arg.guardsize);
|
SetThreadStackGuarantee (&wrapper_arg.guardsize);
|
||||||
@ -877,30 +876,10 @@ CygwinCreateThread (LPTHREAD_START_ROUTINE thread_func, PVOID thread_arg,
|
|||||||
#endif
|
#endif
|
||||||
if (!real_stackaddr)
|
if (!real_stackaddr)
|
||||||
return NULL;
|
return NULL;
|
||||||
/* Set up committed region. We have two cases: */
|
/* Set up committed region. We set up the stack like the OS does,
|
||||||
if (!wincap.has_set_thread_stack_guarantee ()
|
with a reserved region, the guard pages, and a commited region.
|
||||||
&& real_guardsize != wincap.def_guard_page_size ())
|
We commit the stack commit size from the executable header, but
|
||||||
{
|
at least PTHREAD_STACK_MIN (64K). */
|
||||||
/* If guardsize is set to something other than the default guard page
|
|
||||||
size, and if we're running on Windows XP 32 bit, we commit the
|
|
||||||
entire stack, and, if guardsize is > 0, set up a guard page. */
|
|
||||||
real_stacklimit = (PBYTE) real_stackaddr + wincap.page_size ();
|
|
||||||
if (real_guardsize
|
|
||||||
&& !VirtualAlloc (real_stacklimit, real_guardsize, MEM_COMMIT,
|
|
||||||
PAGE_READWRITE | PAGE_GUARD))
|
|
||||||
goto err;
|
|
||||||
real_stacklimit += real_guardsize;
|
|
||||||
if (!VirtualAlloc (real_stacklimit, real_stacksize - real_guardsize
|
|
||||||
- wincap.page_size (),
|
|
||||||
MEM_COMMIT, PAGE_READWRITE))
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Otherwise we set up the stack like the OS does, with a reserved
|
|
||||||
region, the guard pages, and a commited region. We commit the
|
|
||||||
stack commit size from the executable header, but at least
|
|
||||||
PTHREAD_STACK_MIN (64K). */
|
|
||||||
static ULONG exe_commitsize;
|
static ULONG exe_commitsize;
|
||||||
|
|
||||||
if (!exe_commitsize)
|
if (!exe_commitsize)
|
||||||
@ -915,21 +894,20 @@ CygwinCreateThread (LPTHREAD_START_ROUTINE thread_func, PVOID thread_arg,
|
|||||||
exe_commitsize = roundup2 (exe_commitsize, wincap.page_size ());
|
exe_commitsize = roundup2 (exe_commitsize, wincap.page_size ());
|
||||||
}
|
}
|
||||||
ULONG commitsize = exe_commitsize;
|
ULONG commitsize = exe_commitsize;
|
||||||
if (commitsize > real_stacksize - real_guardsize
|
if (commitsize > real_stacksize - real_guardsize - wincap.page_size ())
|
||||||
- wincap.page_size ())
|
|
||||||
commitsize = real_stacksize - real_guardsize - wincap.page_size ();
|
commitsize = real_stacksize - real_guardsize - wincap.page_size ();
|
||||||
else if (commitsize < PTHREAD_STACK_MIN)
|
else if (commitsize < PTHREAD_STACK_MIN)
|
||||||
commitsize = PTHREAD_STACK_MIN;
|
commitsize = PTHREAD_STACK_MIN;
|
||||||
real_stacklimit = (PBYTE) real_stackaddr + real_stacksize
|
real_stacklimit = (PBYTE) real_stackaddr + real_stacksize
|
||||||
- commitsize - real_guardsize;
|
- commitsize - real_guardsize;
|
||||||
if (!VirtualAlloc (real_stacklimit, real_guardsize,
|
if (!VirtualAlloc (real_stacklimit, real_guardsize, MEM_COMMIT,
|
||||||
MEM_COMMIT, PAGE_READWRITE | PAGE_GUARD))
|
PAGE_READWRITE | PAGE_GUARD))
|
||||||
goto err;
|
goto err;
|
||||||
real_stacklimit += real_guardsize;
|
real_stacklimit += real_guardsize;
|
||||||
if (!VirtualAlloc (real_stacklimit, commitsize, MEM_COMMIT,
|
if (!VirtualAlloc (real_stacklimit, commitsize, MEM_COMMIT,
|
||||||
PAGE_READWRITE))
|
PAGE_READWRITE))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
|
||||||
wrapper_arg->stackaddr = (PBYTE) real_stackaddr;
|
wrapper_arg->stackaddr = (PBYTE) real_stackaddr;
|
||||||
wrapper_arg->stackbase = (PBYTE) real_stackaddr + real_stacksize;
|
wrapper_arg->stackbase = (PBYTE) real_stackaddr + real_stacksize;
|
||||||
wrapper_arg->stacklimit = real_stacklimit;
|
wrapper_arg->stacklimit = real_stacklimit;
|
||||||
|
@ -29,7 +29,6 @@ wincaps wincap_xpsp2 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
terminate_thread_frees_stack:false,
|
terminate_thread_frees_stack:false,
|
||||||
has_precise_system_time:false,
|
has_precise_system_time:false,
|
||||||
has_microsoft_accounts:false,
|
has_microsoft_accounts:false,
|
||||||
has_set_thread_stack_guarantee:false,
|
|
||||||
has_broken_rtl_query_process_debug_information:false,
|
has_broken_rtl_query_process_debug_information:false,
|
||||||
has_processor_groups:false,
|
has_processor_groups:false,
|
||||||
has_broken_prefetchvm:false,
|
has_broken_prefetchvm:false,
|
||||||
@ -49,7 +48,6 @@ wincaps wincap_2003 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
terminate_thread_frees_stack:false,
|
terminate_thread_frees_stack:false,
|
||||||
has_precise_system_time:false,
|
has_precise_system_time:false,
|
||||||
has_microsoft_accounts:false,
|
has_microsoft_accounts:false,
|
||||||
has_set_thread_stack_guarantee:true,
|
|
||||||
has_broken_rtl_query_process_debug_information:true,
|
has_broken_rtl_query_process_debug_information:true,
|
||||||
has_processor_groups:false,
|
has_processor_groups:false,
|
||||||
has_broken_prefetchvm:false,
|
has_broken_prefetchvm:false,
|
||||||
@ -69,7 +67,6 @@ wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
terminate_thread_frees_stack:true,
|
terminate_thread_frees_stack:true,
|
||||||
has_precise_system_time:false,
|
has_precise_system_time:false,
|
||||||
has_microsoft_accounts:false,
|
has_microsoft_accounts:false,
|
||||||
has_set_thread_stack_guarantee:true,
|
|
||||||
has_broken_rtl_query_process_debug_information:false,
|
has_broken_rtl_query_process_debug_information:false,
|
||||||
has_processor_groups:false,
|
has_processor_groups:false,
|
||||||
has_broken_prefetchvm:false,
|
has_broken_prefetchvm:false,
|
||||||
@ -89,7 +86,6 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
terminate_thread_frees_stack:true,
|
terminate_thread_frees_stack:true,
|
||||||
has_precise_system_time:false,
|
has_precise_system_time:false,
|
||||||
has_microsoft_accounts:false,
|
has_microsoft_accounts:false,
|
||||||
has_set_thread_stack_guarantee:true,
|
|
||||||
has_broken_rtl_query_process_debug_information:false,
|
has_broken_rtl_query_process_debug_information:false,
|
||||||
has_processor_groups:true,
|
has_processor_groups:true,
|
||||||
has_broken_prefetchvm:false,
|
has_broken_prefetchvm:false,
|
||||||
@ -109,7 +105,6 @@ wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
terminate_thread_frees_stack:true,
|
terminate_thread_frees_stack:true,
|
||||||
has_precise_system_time:true,
|
has_precise_system_time:true,
|
||||||
has_microsoft_accounts:true,
|
has_microsoft_accounts:true,
|
||||||
has_set_thread_stack_guarantee:true,
|
|
||||||
has_broken_rtl_query_process_debug_information:false,
|
has_broken_rtl_query_process_debug_information:false,
|
||||||
has_processor_groups:true,
|
has_processor_groups:true,
|
||||||
has_broken_prefetchvm:false,
|
has_broken_prefetchvm:false,
|
||||||
@ -129,7 +124,6 @@ wincaps wincap_10 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
terminate_thread_frees_stack:true,
|
terminate_thread_frees_stack:true,
|
||||||
has_precise_system_time:true,
|
has_precise_system_time:true,
|
||||||
has_microsoft_accounts:true,
|
has_microsoft_accounts:true,
|
||||||
has_set_thread_stack_guarantee:true,
|
|
||||||
has_broken_rtl_query_process_debug_information:false,
|
has_broken_rtl_query_process_debug_information:false,
|
||||||
has_processor_groups:true,
|
has_processor_groups:true,
|
||||||
has_broken_prefetchvm:true,
|
has_broken_prefetchvm:true,
|
||||||
@ -149,7 +143,6 @@ wincaps wincap_10_1511 __attribute__((section (".cygwin_dll_common"), shared)) =
|
|||||||
terminate_thread_frees_stack:true,
|
terminate_thread_frees_stack:true,
|
||||||
has_precise_system_time:true,
|
has_precise_system_time:true,
|
||||||
has_microsoft_accounts:true,
|
has_microsoft_accounts:true,
|
||||||
has_set_thread_stack_guarantee:true,
|
|
||||||
has_broken_rtl_query_process_debug_information:false,
|
has_broken_rtl_query_process_debug_information:false,
|
||||||
has_processor_groups:true,
|
has_processor_groups:true,
|
||||||
has_broken_prefetchvm:false,
|
has_broken_prefetchvm:false,
|
||||||
|
@ -22,7 +22,6 @@ struct wincaps
|
|||||||
unsigned terminate_thread_frees_stack : 1;
|
unsigned terminate_thread_frees_stack : 1;
|
||||||
unsigned has_precise_system_time : 1;
|
unsigned has_precise_system_time : 1;
|
||||||
unsigned has_microsoft_accounts : 1;
|
unsigned has_microsoft_accounts : 1;
|
||||||
unsigned has_set_thread_stack_guarantee : 1;
|
|
||||||
unsigned has_broken_rtl_query_process_debug_information : 1;
|
unsigned has_broken_rtl_query_process_debug_information : 1;
|
||||||
unsigned has_processor_groups : 1;
|
unsigned has_processor_groups : 1;
|
||||||
unsigned has_broken_prefetchvm : 1;
|
unsigned has_broken_prefetchvm : 1;
|
||||||
@ -67,7 +66,6 @@ public:
|
|||||||
bool IMPLEMENT (terminate_thread_frees_stack)
|
bool IMPLEMENT (terminate_thread_frees_stack)
|
||||||
bool IMPLEMENT (has_precise_system_time)
|
bool IMPLEMENT (has_precise_system_time)
|
||||||
bool IMPLEMENT (has_microsoft_accounts)
|
bool IMPLEMENT (has_microsoft_accounts)
|
||||||
bool IMPLEMENT (has_set_thread_stack_guarantee)
|
|
||||||
bool IMPLEMENT (has_broken_rtl_query_process_debug_information)
|
bool IMPLEMENT (has_broken_rtl_query_process_debug_information)
|
||||||
bool IMPLEMENT (has_processor_groups)
|
bool IMPLEMENT (has_processor_groups)
|
||||||
bool IMPLEMENT (has_broken_prefetchvm)
|
bool IMPLEMENT (has_broken_prefetchvm)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user