[newlib-cygwin] Drop has_set_thread_stack_guarantee flag

Corinna Vinschen corinna@sourceware.org
Fri Jun 24 14:36:00 GMT 2016


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=23a556f2c50c00dccec06f11d32eb9ca2d5e22f8

commit 23a556f2c50c00dccec06f11d32eb9ca2d5e22f8
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Tue Dec 15 16:00:20 2015 +0100

    Drop has_set_thread_stack_guarantee flag

Diff:
---
 winsup/cygwin/autoload.cc   |  1 -
 winsup/cygwin/dcrt0.cc      |  8 ++---
 winsup/cygwin/exceptions.cc |  7 ++--
 winsup/cygwin/miscfuncs.cc  | 84 +++++++++++++++++----------------------------
 winsup/cygwin/wincap.cc     |  7 ----
 winsup/cygwin/wincap.h      |  2 --
 6 files changed, 37 insertions(+), 72 deletions(-)

diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc
index d9bf96b..a4a872e 100644
--- a/winsup/cygwin/autoload.cc
+++ b/winsup/cygwin/autoload.cc
@@ -588,7 +588,6 @@ LoadDLLfuncEx (IdnToUnicode, 20, kernel32, 1)
 LoadDLLfunc (LocaleNameToLCID, 8, kernel32)
 LoadDLLfuncEx (PrefetchVirtualMemory, 16, kernel32, 1)
 LoadDLLfunc (SetThreadGroupAffinity, 12, kernel32)
-LoadDLLfunc (SetThreadStackGuarantee, 4, kernel32)
 
 /* ldap functions are cdecl! */
 #pragma push_macro ("mangle")
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index 822e36e..2b8b9f5 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -443,11 +443,9 @@ child_info_fork::alloc_stack ()
 	    api_fatal ("fork: couldn't allocate new stack guard page %p, %E",
 		       stack_ptr);
 	}
-      /* On post-XP systems, 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 ()
-	  && real_guardsize > wincap.def_guard_page_size ())
+      /* Set thread stack guarantee matching the guardsize.
+	 Note that the guardsize is one page bigger than the guarantee. */
+      if (real_guardsize > wincap.def_guard_page_size ())
 	{
 	  real_guardsize -= wincap.page_size ();
 	  SetThreadStackGuarantee (&real_guardsize);
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index 504fae4..d65f56e 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -1581,10 +1581,9 @@ altstack_wrapper (int sig, siginfo_t *siginfo, ucontext_t *sigctx,
       /* ...restore guard pages in original stack as if MSVCRT::_resetstkovlw
 	 has been called.
 
-	 Compute size of guard pages.  If SetThreadStackGuarantee isn't
-	 supported, or if it returns 0, use the default guard page size. */
-      if (wincap.has_set_thread_stack_guarantee ())
-	SetThreadStackGuarantee (&guard_size);
+	 Compute size of guard pages.  If SetThreadStackGuarantee returns 0,
+	 use the default guard page size. */
+      SetThreadStackGuarantee (&guard_size);
       if (!guard_size)
 	guard_size = wincap.def_guard_page_size ();
       else
diff --git a/winsup/cygwin/miscfuncs.cc b/winsup/cygwin/miscfuncs.cc
index 80fa954..d0e4bf7 100644
--- a/winsup/cygwin/miscfuncs.cc
+++ b/winsup/cygwin/miscfuncs.cc
@@ -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;
diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc
index caa3353..dd2bdff 100644
--- a/winsup/cygwin/wincap.cc
+++ b/winsup/cygwin/wincap.cc
@@ -29,7 +29,6 @@ wincaps wincap_xpsp2 __attribute__((section (".cygwin_dll_common"), shared)) = {
   terminate_thread_frees_stack:false,
   has_precise_system_time:false,
   has_microsoft_accounts:false,
-  has_set_thread_stack_guarantee:false,
   has_broken_rtl_query_process_debug_information:false,
   has_processor_groups:false,
   has_broken_prefetchvm:false,
@@ -49,7 +48,6 @@ wincaps wincap_2003 __attribute__((section (".cygwin_dll_common"), shared)) = {
   terminate_thread_frees_stack:false,
   has_precise_system_time:false,
   has_microsoft_accounts:false,
-  has_set_thread_stack_guarantee:true,
   has_broken_rtl_query_process_debug_information:true,
   has_processor_groups:false,
   has_broken_prefetchvm:false,
@@ -69,7 +67,6 @@ wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = {
   terminate_thread_frees_stack:true,
   has_precise_system_time:false,
   has_microsoft_accounts:false,
-  has_set_thread_stack_guarantee:true,
   has_broken_rtl_query_process_debug_information:false,
   has_processor_groups:false,
   has_broken_prefetchvm:false,
@@ -89,7 +86,6 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
   terminate_thread_frees_stack:true,
   has_precise_system_time:false,
   has_microsoft_accounts:false,
-  has_set_thread_stack_guarantee:true,
   has_broken_rtl_query_process_debug_information:false,
   has_processor_groups:true,
   has_broken_prefetchvm:false,
@@ -109,7 +105,6 @@ wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = {
   terminate_thread_frees_stack:true,
   has_precise_system_time:true,
   has_microsoft_accounts:true,
-  has_set_thread_stack_guarantee:true,
   has_broken_rtl_query_process_debug_information:false,
   has_processor_groups:true,
   has_broken_prefetchvm:false,
@@ -129,7 +124,6 @@ wincaps wincap_10 __attribute__((section (".cygwin_dll_common"), shared)) = {
   terminate_thread_frees_stack:true,
   has_precise_system_time:true,
   has_microsoft_accounts:true,
-  has_set_thread_stack_guarantee:true,
   has_broken_rtl_query_process_debug_information:false,
   has_processor_groups:true,
   has_broken_prefetchvm:true,
@@ -149,7 +143,6 @@ wincaps wincap_10_1511 __attribute__((section (".cygwin_dll_common"), shared)) =
   terminate_thread_frees_stack:true,
   has_precise_system_time:true,
   has_microsoft_accounts:true,
-  has_set_thread_stack_guarantee:true,
   has_broken_rtl_query_process_debug_information:false,
   has_processor_groups:true,
   has_broken_prefetchvm:false,
diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h
index d7ba0ec..b3e6134 100644
--- a/winsup/cygwin/wincap.h
+++ b/winsup/cygwin/wincap.h
@@ -22,7 +22,6 @@ struct wincaps
   unsigned terminate_thread_frees_stack			: 1;
   unsigned has_precise_system_time			: 1;
   unsigned has_microsoft_accounts			: 1;
-  unsigned has_set_thread_stack_guarantee		: 1;
   unsigned has_broken_rtl_query_process_debug_information : 1;
   unsigned has_processor_groups				: 1;
   unsigned has_broken_prefetchvm			: 1;
@@ -67,7 +66,6 @@ public:
   bool	IMPLEMENT (terminate_thread_frees_stack)
   bool	IMPLEMENT (has_precise_system_time)
   bool	IMPLEMENT (has_microsoft_accounts)
-  bool	IMPLEMENT (has_set_thread_stack_guarantee)
   bool	IMPLEMENT (has_broken_rtl_query_process_debug_information)
   bool	IMPLEMENT (has_processor_groups)
   bool	IMPLEMENT (has_broken_prefetchvm)



More information about the Cygwin-cvs mailing list