libphobos: Add Fiber/Thread support for StackGrowsUp.
authorIain Buclaw <ibuclaw@gcc.gnu.org>
Fri, 18 Jan 2019 01:51:36 +0000 (01:51 +0000)
committerIain Buclaw <ibuclaw@gcc.gnu.org>
Fri, 18 Jan 2019 01:51:36 +0000 (01:51 +0000)
The StackGrowsDown version being turned off for hppa targets.

After other fixes in the compiler, this allows core.thread unittests to
all pass, as well as the garbage collector to work correctly.

Backported from upstream druntime 2.084.

Reviewed-on: https://github.com/dlang/druntime/pull/2410

From-SVN: r268056

libphobos/libdruntime/core/thread.d
libphobos/libdruntime/gc/impl/conservative/gc.d

index 98a81425f472717a8e96aa081638a8428659759b..e502072be7a7f2e2185d157318cc16fcc2297b78 100644 (file)
@@ -3254,7 +3254,9 @@ private void* getStackBottom() nothrow @nogc
         pthread_getattr_np(pthread_self(), &attr);
         pthread_attr_getstack(&attr, &addr, &size);
         pthread_attr_destroy(&attr);
-        return addr + size;
+        version (StackGrowsDown)
+            addr += size;
+        return addr;
     }
     else version (FreeBSD)
     {
@@ -3265,7 +3267,9 @@ private void* getStackBottom() nothrow @nogc
         pthread_attr_get_np(pthread_self(), &attr);
         pthread_attr_getstack(&attr, &addr, &size);
         pthread_attr_destroy(&attr);
-        return addr + size;
+        version (StackGrowsDown)
+            addr += size;
+        return addr;
     }
     else version (NetBSD)
     {
@@ -3276,7 +3280,9 @@ private void* getStackBottom() nothrow @nogc
         pthread_attr_get_np(pthread_self(), &attr);
         pthread_attr_getstack(&attr, &addr, &size);
         pthread_attr_destroy(&attr);
-        return addr + size;
+        version (StackGrowsDown)
+            addr += size;
+        return addr;
     }
     else version (Solaris)
     {
@@ -3293,7 +3299,9 @@ private void* getStackBottom() nothrow @nogc
         pthread_getattr_np(pthread_self(), &attr);
         pthread_attr_getstack(&attr, &addr, &size);
         pthread_attr_destroy(&attr);
-        return addr + size;
+        version (StackGrowsDown)
+            addr += size;
+        return addr;
     }
     else
         static assert(false, "Platform not supported.");
index 1437846f48b1e5dbf28cad7e2e372784239fb7b2..b7bb9b0c36f1a0268420296ad53fc81b67e7ba53 100644 (file)
@@ -30,12 +30,6 @@ module gc.impl.conservative.gc;
 //debug = INVARIANT;            // enable invariants
 //debug = PROFILE_API;          // profile API calls for config.profile > 1
 
-/*************** Configuration *********************/
-
-version = STACKGROWSDOWN;       // growing the stack means subtracting from the stack pointer
-                                // (use for Intel X86 CPUs)
-                                // else growing the stack means adding to the stack pointer
-
 /***************************************************/
 
 import gc.bits;