Drop has_set_thread_stack_guarantee flag
This commit is contained in:
@ -609,10 +609,9 @@ pthread_wrapper (PVOID arg)
|
||||
The below assembler code will release the OS stack after switching to our
|
||||
new stack. */
|
||||
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. */
|
||||
if (wincap.has_set_thread_stack_guarantee ()
|
||||
&& wrapper_arg.guardsize > wincap.def_guard_page_size ())
|
||||
if (wrapper_arg.guardsize > wincap.def_guard_page_size ())
|
||||
{
|
||||
wrapper_arg.guardsize -= wincap.page_size ();
|
||||
SetThreadStackGuarantee (&wrapper_arg.guardsize);
|
||||
@ -877,59 +876,38 @@ CygwinCreateThread (LPTHREAD_START_ROUTINE thread_func, PVOID thread_arg,
|
||||
#endif
|
||||
if (!real_stackaddr)
|
||||
return NULL;
|
||||
/* Set up committed region. We have two cases: */
|
||||
if (!wincap.has_set_thread_stack_guarantee ()
|
||||
&& real_guardsize != wincap.def_guard_page_size ())
|
||||
/* Set up committed region. 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;
|
||||
|
||||
if (!exe_commitsize)
|
||||
{
|
||||
/* 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;
|
||||
PIMAGE_DOS_HEADER dosheader;
|
||||
PIMAGE_NT_HEADERS ntheader;
|
||||
|
||||
dosheader = (PIMAGE_DOS_HEADER) GetModuleHandle (NULL);
|
||||
ntheader = (PIMAGE_NT_HEADERS)
|
||||
((PBYTE) dosheader + dosheader->e_lfanew);
|
||||
exe_commitsize = ntheader->OptionalHeader.SizeOfStackCommit;
|
||||
exe_commitsize = roundup2 (exe_commitsize, wincap.page_size ());
|
||||
}
|
||||
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;
|
||||
ULONG commitsize = exe_commitsize;
|
||||
if (commitsize > real_stacksize - real_guardsize - wincap.page_size ())
|
||||
commitsize = real_stacksize - real_guardsize - wincap.page_size ();
|
||||
else if (commitsize < PTHREAD_STACK_MIN)
|
||||
commitsize = PTHREAD_STACK_MIN;
|
||||
real_stacklimit = (PBYTE) real_stackaddr + real_stacksize
|
||||
- commitsize - real_guardsize;
|
||||
if (!VirtualAlloc (real_stacklimit, real_guardsize, MEM_COMMIT,
|
||||
PAGE_READWRITE | PAGE_GUARD))
|
||||
goto err;
|
||||
real_stacklimit += real_guardsize;
|
||||
if (!VirtualAlloc (real_stacklimit, commitsize, MEM_COMMIT,
|
||||
PAGE_READWRITE))
|
||||
goto err;
|
||||
|
||||
if (!exe_commitsize)
|
||||
{
|
||||
PIMAGE_DOS_HEADER dosheader;
|
||||
PIMAGE_NT_HEADERS ntheader;
|
||||
|
||||
dosheader = (PIMAGE_DOS_HEADER) GetModuleHandle (NULL);
|
||||
ntheader = (PIMAGE_NT_HEADERS)
|
||||
((PBYTE) dosheader + dosheader->e_lfanew);
|
||||
exe_commitsize = ntheader->OptionalHeader.SizeOfStackCommit;
|
||||
exe_commitsize = roundup2 (exe_commitsize, wincap.page_size ());
|
||||
}
|
||||
ULONG commitsize = exe_commitsize;
|
||||
if (commitsize > real_stacksize - real_guardsize
|
||||
- wincap.page_size ())
|
||||
commitsize = real_stacksize - real_guardsize - wincap.page_size ();
|
||||
else if (commitsize < PTHREAD_STACK_MIN)
|
||||
commitsize = PTHREAD_STACK_MIN;
|
||||
real_stacklimit = (PBYTE) real_stackaddr + real_stacksize
|
||||
- commitsize - real_guardsize;
|
||||
if (!VirtualAlloc (real_stacklimit, real_guardsize,
|
||||
MEM_COMMIT, PAGE_READWRITE | PAGE_GUARD))
|
||||
goto err;
|
||||
real_stacklimit += real_guardsize;
|
||||
if (!VirtualAlloc (real_stacklimit, commitsize, MEM_COMMIT,
|
||||
PAGE_READWRITE))
|
||||
goto err;
|
||||
}
|
||||
wrapper_arg->stackaddr = (PBYTE) real_stackaddr;
|
||||
wrapper_arg->stackbase = (PBYTE) real_stackaddr + real_stacksize;
|
||||
wrapper_arg->stacklimit = real_stacklimit;
|
||||
|
Reference in New Issue
Block a user