From d0a41de7e9d8564611743236cb7ab4ec29ef91d6 Mon Sep 17 00:00:00 2001 From: ibuclaw Date: Fri, 18 Jan 2019 01:51:36 +0000 Subject: [PATCH] libphobos: Add Fiber/Thread support for StackGrowsUp. 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 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@268056 138bc75d-0d04-0410-961f-82ee72b054a4 --- libphobos/libdruntime/core/thread.d | 16 ++++++++++++---- libphobos/libdruntime/gc/impl/conservative/gc.d | 6 ------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/libphobos/libdruntime/core/thread.d b/libphobos/libdruntime/core/thread.d index 98a81425f472..e502072be7a7 100644 --- a/libphobos/libdruntime/core/thread.d +++ b/libphobos/libdruntime/core/thread.d @@ -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."); diff --git a/libphobos/libdruntime/gc/impl/conservative/gc.d b/libphobos/libdruntime/gc/impl/conservative/gc.d index 1437846f48b1..b7bb9b0c36f1 100644 --- a/libphobos/libdruntime/gc/impl/conservative/gc.d +++ b/libphobos/libdruntime/gc/impl/conservative/gc.d @@ -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; -- 2.47.2