]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libphobos: Increase size of defaultStackPages on OSX X86_64 targets.
authorIain Buclaw <ibuclaw@gdcproject.org>
Fri, 19 Nov 2021 13:43:07 +0000 (14:43 +0100)
committerIain Buclaw <ibuclaw@gdcproject.org>
Fri, 19 Nov 2021 14:13:52 +0000 (15:13 +0100)
As of macOS 11, libunwind now requires more stack space than 16k, so
default to a larger stack size. This is only applied to X86 as the
PAGESIZE is still 4k, however on AArch64 it is 16k.

libphobos/ChangeLog:

* libdruntime/core/thread.d (defaultStackPages): New constant.
(Fiber.this): Set stack size to be a multiple of defaultStackPages.

(cherry picked from commit f316727e5f6a4c58b63bdee9ad6be785f97f5ee7)

libphobos/libdruntime/core/thread.d

index e1a68057ca1901496b41c2c3a660ea3017c9b534..79cd40c6fdd5f2b895e5456bea87975a0b372107 100644 (file)
@@ -4146,6 +4146,24 @@ class Fiber
     // Initialization
     ///////////////////////////////////////////////////////////////////////////
 
+    version (Windows)
+        // exception handling walks the stack, invoking DbgHelp.dll which
+        // needs up to 16k of stack space depending on the version of DbgHelp.dll,
+        // the existence of debug symbols and other conditions. Avoid causing
+        // stack overflows by defaulting to a larger stack size
+        enum defaultStackPages = 8;
+    else version (OSX)
+    {
+        version (X86_64)
+            // libunwind on macOS 11 now requires more stack space than 16k, so
+            // default to a larger stack size. This is only applied to X86 as
+            // the PAGESIZE is still 4k, however on AArch64 it is 16k.
+            enum defaultStackPages = 8;
+        else
+            enum defaultStackPages = 4;
+    }
+    else
+        enum defaultStackPages = 4;
 
     /**
      * Initializes a fiber object which is associated with a static
@@ -4160,7 +4178,7 @@ class Fiber
      * In:
      *  fn must not be null.
      */
-    this( void function() fn, size_t sz = PAGESIZE*4,
+    this( void function() fn, size_t sz = PAGESIZE * defaultStackPages,
           size_t guardPageSize = PAGESIZE ) nothrow
     in
     {
@@ -4186,7 +4204,7 @@ class Fiber
      * In:
      *  dg must not be null.
      */
-    this( void delegate() dg, size_t sz = PAGESIZE*4,
+    this( void delegate() dg, size_t sz = PAGESIZE * defaultStackPages,
           size_t guardPageSize = PAGESIZE ) nothrow
     in
     {