public inbox for
help / color / mirror / Atom feed
* [newlib-cygwin] Cygwin: move x86_64 thread stack area
@ 2022-05-03 13:16 Corinna Vinschen
  0 siblings, 0 replies; only message in thread
From: Corinna Vinschen @ 2022-05-03 13:16 UTC (permalink / raw)
  To: cygwin-cvs;h=28970dae34522059e094eb7db466404facb09460

commit 28970dae34522059e094eb7db466404facb09460
Author: Corinna Vinschen <>
Date:   Tue May 3 15:10:24 2022 +0200

    Cygwin: move x86_64 thread stack area
    The x86_64 thread stack area collides with the share user data in
    recent versions of Windows. Let's get ourselvels get out of the
    way and move the thread stack area in the former slack space
    between DLL area and heap, from 0x6:00000000 to 0x8:00000000.
    That quadruplicates the stack area, so allow bigger maximum stack
    Signed-off-by: Corinna Vinschen <>

 winsup/cygwin/      |  5 +++--
 winsup/cygwin/ | 11 ++++++-----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/winsup/cygwin/ b/winsup/cygwin/
index f27f81bc4..fa2c8391e 100644
--- a/winsup/cygwin/
+++ b/winsup/cygwin/
@@ -34,8 +34,9 @@ eval_start_address ()
      executable starts at 0x1:00400000L, the Cygwin DLL starts at
      0x1:80040000L, other rebased DLLs are located in the region from
      0x2:00000000L up to 0x4:00000000L, -auto-image-based DLLs are located
-     in the region from 0x4:00000000L up to 0x6:00000000L.  Leave another
-     8 Gigs slack space, so lets start the heap at 0x8:00000000L. */
+     in the region from 0x4:00000000L up to 0x6:00000000L.  Thread stacks
+     are located in the region from 0x6:00000000L up to 0x8:00000000L.
+     So the heap starts at 0x8:00000000L. */
   uintptr_t start_address = 0x800000000L;
   /* Windows performs heap ASLR.  This spoils the entire region below
diff --git a/winsup/cygwin/ b/winsup/cygwin/
index 905c242c5..4a5db6f2e 100644
--- a/winsup/cygwin/
+++ b/winsup/cygwin/
@@ -513,13 +513,14 @@ pthread_wrapper (PVOID arg)
 #ifdef __x86_64__
-/* The memory region used for thread stacks */
-#define THREAD_STORAGE_LOW	0x080000000L
-#define THREAD_STORAGE_HIGH	0x100000000L
+/* The memory region used for thread stacks. The memory layout is outlined
+   in, function eval_start_address(). */
+#define THREAD_STORAGE_LOW	0x600000000L
+#define THREAD_STORAGE_HIGH	0x800000000L
 /* We provide the stacks always in 1 Megabyte slots */
-#define THREAD_STACK_SLOT	0x100000L	/* 1 Meg */
+#define THREAD_STACK_SLOT	0x000100000L	/* 1 Meg */
 /* Maximum stack size returned from the pool. */
-#define THREAD_STACK_MAX	0x10000000L	/* 256 Megs */
+#define THREAD_STACK_MAX	0x040000000L	/* 1 Gig */
 class thread_allocator

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-03 13:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-03 13:16 [newlib-cygwin] Cygwin: move x86_64 thread stack area Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).