aboutsummaryrefslogtreecommitdiff
path: root/libphobos
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2020-04-10 10:21:19 -0700
committerIan Lance Taylor <iant@golang.org>2020-04-10 10:21:19 -0700
commit3cdc95b9f8d6c90c4a279783fd3da961c5afb22c (patch)
treed077f53179e7b563e42ea71b385e59912a45d055 /libphobos
parentcaf99f28b0311c3ffb368819218e7ce4d245627e (diff)
parente26bd694c790b7c8f68c6736b2683c60a8fcbcfe (diff)
downloadgcc-3cdc95b9f8d6c90c4a279783fd3da961c5afb22c.zip
gcc-3cdc95b9f8d6c90c4a279783fd3da961c5afb22c.tar.gz
gcc-3cdc95b9f8d6c90c4a279783fd3da961c5afb22c.tar.bz2
Merge from trunk revision e26bd694c790b7c8f68c6736b2683c60a8fcbcfe
Diffstat (limited to 'libphobos')
-rw-r--r--libphobos/ChangeLog81
-rw-r--r--libphobos/Makefile.in2
-rwxr-xr-xlibphobos/configure230
-rw-r--r--libphobos/configure.ac35
-rw-r--r--libphobos/d_rules.am11
-rw-r--r--libphobos/libdruntime/MERGE2
-rw-r--r--libphobos/libdruntime/Makefile.am46
-rw-r--r--libphobos/libdruntime/Makefile.in337
-rw-r--r--libphobos/libdruntime/config/s390/get_tls_offset.S25
-rw-r--r--libphobos/libdruntime/config/systemz/get_tls_offset.S79
-rw-r--r--libphobos/libdruntime/gcc/sections/elf_shared.d10
-rw-r--r--libphobos/libdruntime/gcstub/gc.d388
-rw-r--r--libphobos/m4/druntime.m416
-rw-r--r--libphobos/m4/druntime/cpu.m410
-rw-r--r--libphobos/m4/druntime/libraries.m426
-rw-r--r--libphobos/m4/druntime/os.m431
-rw-r--r--libphobos/src/MERGE2
-rw-r--r--libphobos/src/Makefile.am17
-rw-r--r--libphobos/src/Makefile.in35
-rw-r--r--libphobos/src/std/math.d292
-rw-r--r--libphobos/testsuite/Makefile.in2
-rw-r--r--libphobos/testsuite/lib/libphobos.exp4
-rwxr-xr-xlibphobos/testsuite/testsuite_flags.in3
23 files changed, 781 insertions, 903 deletions
diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog
index 3791d4a..653f481 100644
--- a/libphobos/ChangeLog
+++ b/libphobos/ChangeLog
@@ -1,3 +1,84 @@
+2020-04-10 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * d_rules.am (libdgruntime_la_LINK): Move to libdruntime/Makefile.am.
+ (libgphobos_la_LINK): Move to src/Makefile.am
+ * libdruntime/Makefile.am: Add libgdruntime_convenience library.
+ * libdruntime/Makefile.in: Regenerate.
+ * src/Makefile.am (libgphobos_la_LIBADD): Add libgdruntime_convenience
+ library.
+ (libgphobos_la_DEPENDENCIES): Likewise.
+ * src/Makefile.in: Regenerate.
+ * testsuite/lib/libphobos.exp: Remove libdruntime library paths.
+ * testsuite/testsuite_flags.in: Likewise.
+
+2020-04-09 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * configure: Regenerate.
+ * libdruntime/Makefile.am (ALL_DRUNTIME_INSTALL_DSOURCES): Remove
+ DRUNTIME_DSOURCES_GC and DRUNTIME_DSOURCES_GCSTUB.
+ (DRUNTIME_DSOURCES): Add gc/*.d sources.
+ (DRUNTIME_DSOURCES_GC): Remove.
+ (DRUNTIME_DSOURCES_GCSTUB): Remove.
+ * libdruntime/Makefile.in: Regenerate.
+ * libdruntime/gcstub/gc.d: Remove.
+ * m4/druntime.m4 (DRUNTIME_GC): Remove.
+
+2020-04-09 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/94305
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * configure.ac: Add --enable-libphobos-checking and substitute
+ CHECKING_DFLAGS. Remove -frelease from GDCFLAGS.
+ * libdruntime/Makefile.am: Add CHECKING_DFLAGS to AM_DFLAGS.
+ * libdruntime/Makefile.in: Regenerate.
+ * src/Makefile.am: Add CHECKING_DFLAGS to AM_DFLAGS.
+ * src/Makefile.in: Regenerate.
+ * testsuite/Makefile.in: Regenerate.
+ * testsuite/testsuite_flags.in: Add -fno-release -funittest to
+ --gdcflags.
+
+2020-04-09 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * configure: Regenerate.
+ * configure.ac: Use AC_SEARCH_LIBS for pthread_create.
+ * m4/druntime/libraries.m4: Remove DRUNTIME_LIBRARIES_THREAD.
+
+2020-04-08 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * configure: Regenerate.
+ * configure.ac: Remove DRUNTIME_OS_UNIX.
+ * libdruntime/Makefile.am: Add DRUNTIME_DSOURCES_POSIX if
+ DRUNTIME_OS_POSIX is true.
+ * libdruntime/Makefile.in: Regenerate.
+ * m4/druntime/os.m4 (DRUNTIME_OS_UNIX): Remove, move AM_CONDITIONAL
+ logic to...
+ (DRUNTIME_OS_SOURCES): ...here. Rename conditional to
+ DRUNTIME_OS_POSIX.
+
+2020-04-08 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * configure.ac: Substite WARN_DFLAGS independently of GDCFLAGS.
+ * libdruntime/Makefile.am: Add WARN_DFLAGS to AM_DFLAGS.
+ * libdruntime/Makefile.in: Regenerate.
+ * src/Makefile.am: Add WARN_DFLAGS to AM_DFLAGS.
+ * src/Makefile.in: Regenerate.
+ * testsuite/Makefile.in: Regenerate.
+ * testsuite/testsuite_flags.in: Add WARN_DFLAGS to --gdcflags.
+
+2020-04-07 Robin Dapp <rdapp@linux.ibm.com>
+ Stefan Liebler <stli@linux.ibm.com>
+
+ * configure: Regenerate.
+ * libdruntime/Makefile.am: Add s390x and s390.
+ * libdruntime/Makefile.in: Regenerate.
+ * libdruntime/config/s390/get_tls_offset.S: New file.
+ * libdruntime/config/systemz/get_tls_offset.S: New file.
+ * libdruntime/gcc/sections/elf_shared.d: Use ibmz_get_tls_offset.
+ * m4/druntime/cpu.m4: Add s390x and s390.
+
2020-04-07 Stefan Liebler <stli@linux.ibm.com>
* libdruntime/core/sys/posix/signal.d:
diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in
index 6a774e9..b464d60 100644
--- a/libphobos/Makefile.in
+++ b/libphobos/Makefile.in
@@ -207,6 +207,7 @@ CCASFLAGS = @CCASFLAGS@
CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+CHECKING_DFLAGS = @CHECKING_DFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
@@ -272,6 +273,7 @@ SHELL = @SHELL@
SPEC_PHOBOS_DEPS = @SPEC_PHOBOS_DEPS@
STRIP = @STRIP@
VERSION = @VERSION@
+WARN_DFLAGS = @WARN_DFLAGS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
diff --git a/libphobos/configure b/libphobos/configure
index 9cad270..a6f5aec 100755
--- a/libphobos/configure
+++ b/libphobos/configure
@@ -633,9 +633,11 @@ ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
+WARN_DFLAGS
GDCFLAGSX
libtool_VERSION
SPEC_PHOBOS_DEPS
+CHECKING_DFLAGS
ENABLE_LIBPHOBOS_FALSE
ENABLE_LIBPHOBOS_TRUE
gdc_include_dir
@@ -661,6 +663,8 @@ DRUNTIME_OS_ARM_EABI_UNWINDER_FALSE
DRUNTIME_OS_ARM_EABI_UNWINDER_TRUE
DCFG_ARM_EABI_UNWINDER
DCFG_THREAD_MODEL
+DRUNTIME_OS_POSIX_FALSE
+DRUNTIME_OS_POSIX_TRUE
DRUNTIME_OS_SOLARIS_FALSE
DRUNTIME_OS_SOLARIS_TRUE
DRUNTIME_OS_MINGW_FALSE
@@ -681,8 +685,10 @@ DRUNTIME_OS_ANDROID_FALSE
DRUNTIME_OS_ANDROID_TRUE
DRUNTIME_OS_AIX_FALSE
DRUNTIME_OS_AIX_TRUE
-DRUNTIME_OS_UNIX_FALSE
-DRUNTIME_OS_UNIX_TRUE
+DRUNTIME_CPU_S390_FALSE
+DRUNTIME_CPU_S390_TRUE
+DRUNTIME_CPU_SYSTEMZ_FALSE
+DRUNTIME_CPU_SYSTEMZ_TRUE
DRUNTIME_CPU_X86_FALSE
DRUNTIME_CPU_X86_TRUE
DRUNTIME_CPU_POWERPC64_FALSE
@@ -695,8 +701,6 @@ DRUNTIME_CPU_ARM_FALSE
DRUNTIME_CPU_ARM_TRUE
DRUNTIME_CPU_AARCH64_FALSE
DRUNTIME_CPU_AARCH64_TRUE
-DRUNTIME_GC_ENABLE_FALSE
-DRUNTIME_GC_ENABLE_TRUE
libphobos_srcdir
libphobos_builddir
get_gcc_base_ver
@@ -829,9 +833,6 @@ with_gnu_ld
enable_libtool_lock
with_gcc_major_version_only
enable_werror
-enable_druntime_gc
-enable_unix
-enable_thread_lib
with_libatomic
with_libbacktrace
with_target_system_zlib
@@ -839,6 +840,7 @@ with_cross_host
enable_version_specific_runtime_libs
with_toolexeclibdir
enable_libphobos
+enable_libphobos_checking
'
ac_precious_vars='build_alias
host_alias
@@ -1480,16 +1482,15 @@ Optional Features:
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
--enable-werror turns on -Werror [default=no]
- --enable-druntime-gc enable D runtime garbage collector (default: yes)
- --enable-unix enables Unix runtime (default: yes, for Unix
- targets)
- --enable-thread-lib=<arg>
- specify linker option for the system thread library
- (default: autodetect)
--enable-version-specific-runtime-libs
Specify that runtime libraries should be installed
in a compiler-specific directory
--enable-libphobos Enable libphobos
+ --enable-libphobos-checking[=LIST]
+ enable expensive run-time checks. With LIST, enable
+ only specific categories of checks. Categories are:
+ yes,no,all,none,release. Flags are: assert or other
+ strings
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -11644,7 +11645,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11647 "configure"
+#line 11648 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11750,7 +11751,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11753 "configure"
+#line 11754 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13976,24 +13977,7 @@ fi
WERROR_FLAG="-Werror"
fi
-
- # Check whether --enable-druntime-gc was given.
-if test "${enable_druntime_gc+set}" = set; then :
- enableval=$enable_druntime_gc; enable_druntime_gc=no
-else
- enable_druntime_gc=yes
-fi
-
-
- if test "$enable_druntime_gc" = "yes"; then
- DRUNTIME_GC_ENABLE_TRUE=
- DRUNTIME_GC_ENABLE_FALSE='#'
-else
- DRUNTIME_GC_ENABLE_TRUE='#'
- DRUNTIME_GC_ENABLE_FALSE=
-fi
-
-
+DRUNTIME_GC
druntime_target_cpu_parsed=""
case "$target_cpu" in
@@ -14012,6 +13996,12 @@ fi
i[34567]86|x86_64)
druntime_target_cpu_parsed="x86"
;;
+ s390x)
+ druntime_target_cpu_parsed="s390x"
+ ;;
+ s390)
+ druntime_target_cpu_parsed="s390"
+ ;;
esac
if test "$druntime_target_cpu_parsed" = "aarch64"; then
DRUNTIME_CPU_AARCH64_TRUE=
@@ -14061,6 +14051,22 @@ else
DRUNTIME_CPU_X86_FALSE=
fi
+ if test "$druntime_target_cpu_parsed" = "s390x"; then
+ DRUNTIME_CPU_SYSTEMZ_TRUE=
+ DRUNTIME_CPU_SYSTEMZ_FALSE='#'
+else
+ DRUNTIME_CPU_SYSTEMZ_TRUE='#'
+ DRUNTIME_CPU_SYSTEMZ_FALSE=
+fi
+
+ if test "$druntime_target_cpu_parsed" = "s390"; then
+ DRUNTIME_CPU_S390_TRUE=
+ DRUNTIME_CPU_S390_FALSE='#'
+else
+ DRUNTIME_CPU_S390_TRUE='#'
+ DRUNTIME_CPU_S390_FALSE=
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for target OS" >&5
@@ -14078,31 +14084,6 @@ fi
- # Check whether --enable-unix was given.
-if test "${enable_unix+set}" = set; then :
- enableval=$enable_unix; :
-else
- enable_unix=auto
-fi
-
-
- case "$druntime_cv_target_os" in
- aix*|*bsd*|cygwin*|darwin*|gnu*|linux*|skyos*|*solaris*|sysv*) d_have_unix=1 ;;
- esac
- if test -n "$d_have_unix" && test "$enable_unix" = auto ; then
- enable_unix=yes
- fi
- if test "$enable_unix" = "yes"; then
- DRUNTIME_OS_UNIX_TRUE=
- DRUNTIME_OS_UNIX_FALSE='#'
-else
- DRUNTIME_OS_UNIX_TRUE='#'
- DRUNTIME_OS_UNIX_FALSE=
-fi
-
-
-
-
druntime_target_os_parsed=""
case "$druntime_cv_target_os" in
@@ -14212,6 +14193,21 @@ else
fi
+ druntime_target_posix="no"
+ case "$druntime_cv_target_os" in
+ aix*|*bsd*|cygwin*|darwin*|gnu*|linux*|skyos*|*solaris*|sysv*)
+ druntime_target_posix="yes"
+ ;;
+ esac
+ if test "$druntime_target_posix" = "yes"; then
+ DRUNTIME_OS_POSIX_TRUE=
+ DRUNTIME_OS_POSIX_FALSE='#'
+else
+ DRUNTIME_OS_POSIX_TRUE='#'
+ DRUNTIME_OS_POSIX_FALSE=
+fi
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread model used by GDC" >&5
@@ -14466,17 +14462,7 @@ if test "$ac_res" != no; then :
fi
-
- enable_thread_lib=yes
- # Check whether --enable-thread-lib was given.
-if test "${enable_thread_lib+set}" = set; then :
- enableval=$enable_thread_lib;
-fi
-
-
- if test "x$enable_thread_lib" = "xyes"; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_create" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_create" >&5
$as_echo_n "checking for library containing pthread_create... " >&6; }
if ${ac_cv_search_pthread_create+:} false; then :
$as_echo_n "(cached) " >&6
@@ -14522,64 +14508,6 @@ if test "$ac_res" != no; then :
fi
-
-else
-
- if test "x$enable_thread_lib" = "xno"; then :
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread library" >&5
-$as_echo_n "checking for thread library... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
-$as_echo "disabled" >&6; }
-
-else
-
- as_ac_Lib=`$as_echo "ac_cv_lib_$enable_thread_lib''_pthread_create" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -l$enable_thread_lib" >&5
-$as_echo_n "checking for pthread_create in -l$enable_thread_lib... " >&6; }
-if eval \${$as_ac_Lib+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-l$enable_thread_lib $LIBS"
-cat > conftest.$ac_ext <<_ACEOF
-module mod;
- extern(C) int pthread_create();
-
-extern(C) int main() {
- pthread_create(); return 0;
-}
-_ACEOF
-if ac_fn_d_try_link "$LINENO"; then :
- eval "$as_ac_Lib=yes"
-else
- eval "$as_ac_Lib=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-eval ac_res=\$$as_ac_Lib
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_LIB$enable_thread_lib" | $as_tr_cpp` 1
-_ACEOF
-
- LIBS="-l$enable_thread_lib $LIBS"
-
-else
-
- as_fn_error $? "Thread library not found" "$LINENO" 5
-
-fi
-
-
-fi
-
-fi
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cosf" >&5
$as_echo_n "checking for library containing cosf... " >&6; }
if ${ac_cv_search_cosf+:} false; then :
@@ -15346,6 +15274,31 @@ else
fi
+# Enable expensive internal checks
+# Check whether --enable-libphobos-checking was given.
+if test "${enable_libphobos_checking+set}" = set; then :
+ enableval=$enable_libphobos_checking; ac_checking_flags="${enableval}"
+else
+ ac_checking_flags=release
+fi
+
+IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS,"
+for check in release $ac_checking_flags
+do
+ case $check in
+ # These set all the flags to specific states
+ yes|all) RELEASE_FLAG="-fno-release" ; ASSERT_FLAG= ;;
+ no|none|release) RELEASE_FLAG="-frelease" ; ASSERT_FLAG= ;;
+ # These enable particular checks
+ assert) ASSERT_FLAG="-fassert" ;;
+ # Accept
+ *) ;;
+ esac
+done
+IFS="$ac_save_IFS"
+CHECKING_DFLAGS="$RELEASE_FLAG $ASSERT_FLAG"
+
+
# Add drtbegin.o/drtend.o to startfile/endfile specs in libgphobos.spec
if test "$DCFG_MINFO_BRACKETING" = "false"; then
DRTSTUFF_SPEC=$srcdir/src/drtstuff.spec
@@ -15364,15 +15317,18 @@ libtool_VERSION=1:0:0
# Set default flags (after DRUNTIME_WERROR!)
if test -z "$GDCFLAGS"; then
- GDCFLAGS="-Wall $WERROR_FLAG -g -frelease -O2"
+ GDCFLAGS="-g -O2"
fi
if test -z "$GDCFLAGSX"; then
- GDCFLAGSX="-Wall $WERROR_FLAG -g -fno-release -funittest"
+ GDCFLAGSX="-g"
fi
+WARN_DFLAGS="-Wall $WERROR_FLAG"
+
+
# Sanity check for the cross-compilation case:
ac_fn_c_check_header_mongrel "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default"
if test "x$ac_cv_header_stdio_h" = xyes; then :
@@ -15533,10 +15489,6 @@ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${DRUNTIME_GC_ENABLE_TRUE}" && test -z "${DRUNTIME_GC_ENABLE_FALSE}"; then
- as_fn_error $? "conditional \"DRUNTIME_GC_ENABLE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${DRUNTIME_CPU_AARCH64_TRUE}" && test -z "${DRUNTIME_CPU_AARCH64_FALSE}"; then
as_fn_error $? "conditional \"DRUNTIME_CPU_AARCH64\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -15561,8 +15513,12 @@ if test -z "${DRUNTIME_CPU_X86_TRUE}" && test -z "${DRUNTIME_CPU_X86_FALSE}"; th
as_fn_error $? "conditional \"DRUNTIME_CPU_X86\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${DRUNTIME_OS_UNIX_TRUE}" && test -z "${DRUNTIME_OS_UNIX_FALSE}"; then
- as_fn_error $? "conditional \"DRUNTIME_OS_UNIX\" was never defined.
+if test -z "${DRUNTIME_CPU_SYSTEMZ_TRUE}" && test -z "${DRUNTIME_CPU_SYSTEMZ_FALSE}"; then
+ as_fn_error $? "conditional \"DRUNTIME_CPU_SYSTEMZ\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DRUNTIME_CPU_S390_TRUE}" && test -z "${DRUNTIME_CPU_S390_FALSE}"; then
+ as_fn_error $? "conditional \"DRUNTIME_CPU_S390\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${DRUNTIME_OS_AIX_TRUE}" && test -z "${DRUNTIME_OS_AIX_FALSE}"; then
@@ -15605,6 +15561,10 @@ if test -z "${DRUNTIME_OS_SOLARIS_TRUE}" && test -z "${DRUNTIME_OS_SOLARIS_FALSE
as_fn_error $? "conditional \"DRUNTIME_OS_SOLARIS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${DRUNTIME_OS_POSIX_TRUE}" && test -z "${DRUNTIME_OS_POSIX_FALSE}"; then
+ as_fn_error $? "conditional \"DRUNTIME_OS_POSIX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${DRUNTIME_OS_ARM_EABI_UNWINDER_TRUE}" && test -z "${DRUNTIME_OS_ARM_EABI_UNWINDER_FALSE}"; then
as_fn_error $? "conditional \"DRUNTIME_OS_ARM_EABI_UNWINDER\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/libphobos/configure.ac b/libphobos/configure.ac
index 69c635f..ffd1298 100644
--- a/libphobos/configure.ac
+++ b/libphobos/configure.ac
@@ -122,7 +122,6 @@ DRUNTIME_MULTILIB
DRUNTIME_WERROR
DRUNTIME_GC
DRUNTIME_CPU_SOURCES
-DRUNTIME_OS_UNIX
DRUNTIME_OS_SOURCES
DRUNTIME_OS_THREAD_MODEL
DRUNTIME_OS_ARM_EABI_UNWINDER
@@ -134,7 +133,7 @@ DRUNTIME_LIBRARIES_CLIB
WITH_LOCAL_DRUNTIME([
AC_LANG_PUSH([D])
AC_SEARCH_LIBS([malloc], [c])
- DRUNTIME_LIBRARIES_THREAD
+ AC_SEARCH_LIBS([pthread_create], [pthread])
AC_SEARCH_LIBS([cosf], [m])
AC_SEARCH_LIBS([clock_gettime], [rt])
DRUNTIME_ENABLE_ATOMIC_BUILTINS
@@ -188,6 +187,31 @@ yes:*) use_libphobos=yes ;;
esac
AM_CONDITIONAL(ENABLE_LIBPHOBOS, test x$use_libphobos = xyes)
+# Enable expensive internal checks
+AC_ARG_ENABLE(libphobos-checking,
+[AS_HELP_STRING([[--enable-libphobos-checking[=LIST]]],
+ [enable expensive run-time checks. With LIST,
+ enable only specific categories of checks.
+ Categories are: yes,no,all,none,release.
+ Flags are: assert or other strings])],
+[ac_checking_flags="${enableval}"],[ac_checking_flags=release])
+IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS,"
+for check in release $ac_checking_flags
+do
+ case $check in
+ # These set all the flags to specific states
+ yes|all) RELEASE_FLAG="-fno-release" ; ASSERT_FLAG= ;;
+ no|none|release) RELEASE_FLAG="-frelease" ; ASSERT_FLAG= ;;
+ # These enable particular checks
+ assert) ASSERT_FLAG="-fassert" ;;
+ # Accept
+ *) ;;
+ esac
+done
+IFS="$ac_save_IFS"
+CHECKING_DFLAGS="$RELEASE_FLAG $ASSERT_FLAG"
+AC_SUBST(CHECKING_DFLAGS)
+
# Add drtbegin.o/drtend.o to startfile/endfile specs in libgphobos.spec
if test "$DCFG_MINFO_BRACKETING" = "false"; then
DRTSTUFF_SPEC=$srcdir/src/drtstuff.spec
@@ -206,15 +230,18 @@ AC_SUBST(libtool_VERSION)
# Set default flags (after DRUNTIME_WERROR!)
if test -z "$GDCFLAGS"; then
- GDCFLAGS="-Wall $WERROR_FLAG -g -frelease -O2"
+ GDCFLAGS="-g -O2"
fi
AC_SUBST(GDCFLAGS)
if test -z "$GDCFLAGSX"; then
- GDCFLAGSX="-Wall $WERROR_FLAG -g -fno-release -funittest"
+ GDCFLAGSX="-g"
fi
AC_SUBST(GDCFLAGSX)
+WARN_DFLAGS="-Wall $WERROR_FLAG"
+AC_SUBST(WARN_DFLAGS)
+
# Sanity check for the cross-compilation case:
AC_CHECK_HEADER(stdio.h,:,
[AC_MSG_ERROR([cannot find stdio.h.])])
diff --git a/libphobos/d_rules.am b/libphobos/d_rules.am
index 979142b..c05c8e8 100644
--- a/libphobos/d_rules.am
+++ b/libphobos/d_rules.am
@@ -32,14 +32,3 @@ toolexeclibdir = $(libphobos_toolexeclibdir)
LTDCOMPILE = $(LIBTOOL) --tag=D $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(GDC) $(AM_DFLAGS)
-
-# Also override library link commands: This is not strictly
-# required, but we want to record additional dependencies such
-# as pthread in the library
-libgdruntime_la_LINK = $(LIBTOOL) --tag=D $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(GDC) $(AM_CFLAGS) $(CFLAGS) \
- $(libgdruntime_la_LDFLAGS) $(LDFLAGS) -o $@
-
-libgphobos_la_LINK = $(LIBTOOL) --tag=D $(libgphobos_la_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(GDC) $(AM_CFLAGS) $(CFLAGS) \
- $(libgphobos_la_LDFLAGS) $(LDFLAGS) -o $@
diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE
index 54ae72f..18d479d 100644
--- a/libphobos/libdruntime/MERGE
+++ b/libphobos/libdruntime/MERGE
@@ -1,4 +1,4 @@
-6c45dd3a6523a21887cb9a883eeb3abd40375dc1
+c9c209e2c62ce43a2c08ddd61d647730716b2d0f
The first line of this file holds the git revision number of the last
merge done from the dlang/druntime repository.
diff --git a/libphobos/libdruntime/Makefile.am b/libphobos/libdruntime/Makefile.am
index ef18fb1..e1a3815 100644
--- a/libphobos/libdruntime/Makefile.am
+++ b/libphobos/libdruntime/Makefile.am
@@ -22,11 +22,12 @@ include $(top_srcdir)/d_rules.am
D_EXTRA_DFLAGS=-nostdinc -I $(srcdir) -I .
# D flags for compilation
-AM_DFLAGS=$(phobos_compiler_pic_flag)
+AM_DFLAGS= \
+ $(phobos_compiler_pic_flag) \
+ $(WARN_DFLAGS) $(CHECKING_DFLAGS)
# Install all D and DI files
ALL_DRUNTIME_INSTALL_DSOURCES = $(DRUNTIME_DSOURCES) \
- $(DRUNTIME_DSOURCES_GC) $(DRUNTIME_DSOURCES_GCSTUB) \
$(DRUNTIME_DSOURCES_BIONIC) $(DRUNTIME_DSOURCES_DARWIN) \
$(DRUNTIME_DSOURCES_DRAGONFLYBSD) $(DRUNTIME_DSOURCES_FREEBSD) \
$(DRUNTIME_DSOURCES_LINUX) $(DRUNTIME_DSOURCES_NETBSD) \
@@ -38,14 +39,8 @@ ALL_DRUNTIME_INSTALL_DSOURCES = $(DRUNTIME_DSOURCES) \
# Setup source files depending on configure
DRUNTIME_SOURCES_CONFIGURED =
-# GC sources
-if DRUNTIME_GC_ENABLE
- DRUNTIME_SOURCES_CONFIGURED += $(DRUNTIME_DSOURCES_GC)
-else
- DRUNTIME_SOURCES_CONFIGURED += $(DRUNTIME_DSOURCES_GCSTUB)
-endif
# OS specific sources
-if DRUNTIME_OS_UNIX
+if DRUNTIME_OS_POSIX
DRUNTIME_SOURCES_CONFIGURED += $(DRUNTIME_DSOURCES_POSIX)
endif
if DRUNTIME_OS_DARWIN
@@ -98,6 +93,12 @@ else
DRUNTIME_SOURCES_CONFIGURED += config/x86/switchcontext.S
endif
endif
+if DRUNTIME_CPU_SYSTEMZ
+ DRUNTIME_SOURCES_CONFIGURED += config/systemz/get_tls_offset.S
+endif
+if DRUNTIME_CPU_S390
+ DRUNTIME_SOURCES_CONFIGURED += config/s390/get_tls_offset.S
+endif
# Provide __start_minfo, __stop_minfo if linker doesn't.
if !DRUNTIME_OS_MINFO_BRACKETING
@@ -118,6 +119,8 @@ DRUNTIME_DSOURCES_GENERATED = gcc/config.d gcc/libbacktrace.d
ALL_DRUNTIME_SOURCES = $(DRUNTIME_DSOURCES) $(DRUNTIME_CSOURCES) \
$(DRUNTIME_SOURCES_CONFIGURED) $(DRUNTIME_DSOURCES_GENERATED)
+# Need this library to both be part of libgphobos.a, and installed separately.
+# 1) separate libgdruntime.la
toolexeclib_LTLIBRARIES = libgdruntime.la
libgdruntime_la_SOURCES = $(ALL_DRUNTIME_SOURCES)
libgdruntime_la_LIBTOOLFLAGS =
@@ -125,6 +128,21 @@ libgdruntime_la_LDFLAGS = -Wc,-nophoboslib,-dstartfiles,-B../src,-Bgcc \
-version-info $(libtool_VERSION)
libgdruntime_la_LIBADD = $(LIBATOMIC) $(LIBBACKTRACE)
libgdruntime_la_DEPENDENCIES = $(DRTSTUFF)
+# Also override library link commands: This is not strictly
+# required, but we want to record additional dependencies such
+# as pthread in the library
+libgdruntime_la_LINK = $(LIBTOOL) --tag=D $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(GDC) $(AM_CFLAGS) $(CFLAGS) \
+ $(libgdruntime_la_LDFLAGS) $(LDFLAGS) -o $@
+
+# 2) integrated libgdruntime_convenience.la that is to be part of libgphobos.a
+noinst_LTLIBRARIES = libgdruntime_convenience.la
+libgdruntime_convenience_la_SOURCES = $(libgdruntime_la_SOURCES)
+libgdruntime_convenience_la_LIBTOOLFLAGS = $(libgdruntime_la_LIBTOOLFLAGS)
+libgdruntime_convenience_la_LDFLAGS = $(libgdruntime_la_LDFLAGS)
+libgdruntime_convenience_la_LIBADD = $(libgdruntime_la_LIBADD)
+libgdruntime_convenience_la_DEPENDENCIES = $(libgdruntime_la_DEPENDENCIES)
+libgdruntime_convenience_la_LINK = $(libgdruntime_la_LINK)
# Handles generated files as well
install-data-local:
@@ -160,7 +178,9 @@ DRUNTIME_DSOURCES = core/atomic.d core/attribute.d core/bitop.d \
core/stdc/wctype.d core/sync/barrier.d core/sync/condition.d \
core/sync/config.d core/sync/exception.d core/sync/mutex.d \
core/sync/rwmutex.d core/sync/semaphore.d core/thread.d core/time.d \
- core/vararg.d gcc/attribute.d gcc/backtrace.d gcc/builtins.d gcc/deh.d \
+ core/vararg.d gc/bits.d gc/config.d gc/gcinterface.d \
+ gc/impl/conservative/gc.d gc/impl/manual/gc.d gc/os.d gc/pooltable.d \
+ gc/proxy.d gcc/attribute.d gcc/backtrace.d gcc/builtins.d gcc/deh.d \
gcc/emutls.d gcc/gthread.d gcc/sections/android.d \
gcc/sections/elf_shared.d gcc/sections/osx.d gcc/sections/package.d \
gcc/sections/win32.d gcc/sections/win64.d gcc/unwind/arm.d \
@@ -191,12 +211,6 @@ DRUNTIME_DSOURCES = core/atomic.d core/attribute.d core/bitop.d \
DRUNTIME_DSOURCES_STDCXX = core/stdcpp/exception.d \
core/stdcpp/typeinfo.d
-DRUNTIME_DSOURCES_GC = gc/bits.d gc/config.d gc/gcinterface.d \
- gc/impl/conservative/gc.d gc/impl/manual/gc.d gc/os.d gc/pooltable.d \
- gc/proxy.d
-
-DRUNTIME_DSOURCES_GCSTUB = gcstub/gc.d
-
DRUNTIME_DSOURCES_BIONIC = core/sys/bionic/fcntl.d \
core/sys/bionic/string.d core/sys/bionic/unistd.d
diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in
index 44361f9..3bb023f 100644
--- a/libphobos/libdruntime/Makefile.in
+++ b/libphobos/libdruntime/Makefile.in
@@ -108,28 +108,27 @@ build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-# GC sources
-@DRUNTIME_GC_ENABLE_TRUE@am__append_1 = $(DRUNTIME_DSOURCES_GC)
-@DRUNTIME_GC_ENABLE_FALSE@am__append_2 = $(DRUNTIME_DSOURCES_GCSTUB)
# OS specific sources
-@DRUNTIME_OS_UNIX_TRUE@am__append_3 = $(DRUNTIME_DSOURCES_POSIX)
-@DRUNTIME_OS_DARWIN_TRUE@am__append_4 = $(DRUNTIME_DSOURCES_DARWIN)
-@DRUNTIME_OS_DRAGONFLYBSD_TRUE@am__append_5 = $(DRUNTIME_DSOURCES_DRAGONFLYBSD)
-@DRUNTIME_OS_ANDROID_TRUE@am__append_6 = $(DRUNTIME_DSOURCES_BIONIC)
-@DRUNTIME_OS_FREEBSD_TRUE@am__append_7 = $(DRUNTIME_DSOURCES_FREEBSD)
-@DRUNTIME_OS_NETBSD_TRUE@am__append_8 = $(DRUNTIME_DSOURCES_NETBSD)
-@DRUNTIME_OS_OPENBSD_TRUE@am__append_9 = $(DRUNTIME_DSOURCES_OPENBSD)
-@DRUNTIME_OS_LINUX_TRUE@am__append_10 = $(DRUNTIME_DSOURCES_LINUX)
-@DRUNTIME_OS_MINGW_TRUE@am__append_11 = $(DRUNTIME_DSOURCES_WINDOWS)
-@DRUNTIME_OS_SOLARIS_TRUE@am__append_12 = $(DRUNTIME_DSOURCES_SOLARIS)
+@DRUNTIME_OS_POSIX_TRUE@am__append_1 = $(DRUNTIME_DSOURCES_POSIX)
+@DRUNTIME_OS_DARWIN_TRUE@am__append_2 = $(DRUNTIME_DSOURCES_DARWIN)
+@DRUNTIME_OS_DRAGONFLYBSD_TRUE@am__append_3 = $(DRUNTIME_DSOURCES_DRAGONFLYBSD)
+@DRUNTIME_OS_ANDROID_TRUE@am__append_4 = $(DRUNTIME_DSOURCES_BIONIC)
+@DRUNTIME_OS_FREEBSD_TRUE@am__append_5 = $(DRUNTIME_DSOURCES_FREEBSD)
+@DRUNTIME_OS_NETBSD_TRUE@am__append_6 = $(DRUNTIME_DSOURCES_NETBSD)
+@DRUNTIME_OS_OPENBSD_TRUE@am__append_7 = $(DRUNTIME_DSOURCES_OPENBSD)
+@DRUNTIME_OS_LINUX_TRUE@am__append_8 = $(DRUNTIME_DSOURCES_LINUX)
+@DRUNTIME_OS_MINGW_TRUE@am__append_9 = $(DRUNTIME_DSOURCES_WINDOWS)
+@DRUNTIME_OS_SOLARIS_TRUE@am__append_10 = $(DRUNTIME_DSOURCES_SOLARIS)
# CPU specific sources
-@DRUNTIME_CPU_AARCH64_TRUE@am__append_13 = config/aarch64/switchcontext.S
-@DRUNTIME_CPU_ARM_TRUE@am__append_14 = config/arm/switchcontext.S
-@DRUNTIME_CPU_MIPS_TRUE@am__append_15 = config/mips/switchcontext.S
-@DRUNTIME_CPU_POWERPC_TRUE@am__append_16 = config/powerpc/switchcontext.S
-@DRUNTIME_CPU_POWERPC64_TRUE@am__append_17 = config/powerpc64/callwithstack.S
-@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__append_18 = config/mingw/switchcontext.S
-@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__append_19 = config/x86/switchcontext.S
+@DRUNTIME_CPU_AARCH64_TRUE@am__append_11 = config/aarch64/switchcontext.S
+@DRUNTIME_CPU_ARM_TRUE@am__append_12 = config/arm/switchcontext.S
+@DRUNTIME_CPU_MIPS_TRUE@am__append_13 = config/mips/switchcontext.S
+@DRUNTIME_CPU_POWERPC_TRUE@am__append_14 = config/powerpc/switchcontext.S
+@DRUNTIME_CPU_POWERPC64_TRUE@am__append_15 = config/powerpc64/callwithstack.S
+@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__append_16 = config/mingw/switchcontext.S
+@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__append_17 = config/x86/switchcontext.S
+@DRUNTIME_CPU_SYSTEMZ_TRUE@am__append_18 = config/systemz/get_tls_offset.S
+@DRUNTIME_CPU_S390_TRUE@am__append_19 = config/s390/get_tls_offset.S
subdir = libdruntime
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
@@ -182,7 +181,7 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(toolexeclibdir)" \
"$(DESTDIR)$(toolexeclibdir)"
-LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
+LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
am__DEPENDENCIES_1 =
am__dirstamp = $(am__leading_dot)dirstamp
am__objects_1 = core/atomic.lo core/attribute.lo core/bitop.lo \
@@ -203,7 +202,9 @@ am__objects_1 = core/atomic.lo core/attribute.lo core/bitop.lo \
core/sync/condition.lo core/sync/config.lo \
core/sync/exception.lo core/sync/mutex.lo core/sync/rwmutex.lo \
core/sync/semaphore.lo core/thread.lo core/time.lo \
- core/vararg.lo gcc/attribute.lo gcc/backtrace.lo \
+ core/vararg.lo gc/bits.lo gc/config.lo gc/gcinterface.lo \
+ gc/impl/conservative/gc.lo gc/impl/manual/gc.lo gc/os.lo \
+ gc/pooltable.lo gc/proxy.lo gcc/attribute.lo gcc/backtrace.lo \
gcc/builtins.lo gcc/deh.lo gcc/emutls.lo gcc/gthread.lo \
gcc/sections/android.lo gcc/sections/elf_shared.lo \
gcc/sections/osx.lo gcc/sections/package.lo \
@@ -239,13 +240,7 @@ am__objects_1 = core/atomic.lo core/attribute.lo core/bitop.lo \
rt/util/container/treap.lo rt/util/random.lo \
rt/util/typeinfo.lo rt/util/utf.lo
am__objects_2 = core/stdc/libgdruntime_la-errno_.lo
-am__objects_3 = gc/bits.lo gc/config.lo gc/gcinterface.lo \
- gc/impl/conservative/gc.lo gc/impl/manual/gc.lo gc/os.lo \
- gc/pooltable.lo gc/proxy.lo
-@DRUNTIME_GC_ENABLE_TRUE@am__objects_4 = $(am__objects_3)
-am__objects_5 = gcstub/gc.lo
-@DRUNTIME_GC_ENABLE_FALSE@am__objects_6 = $(am__objects_5)
-am__objects_7 = core/sys/posix/aio.lo core/sys/posix/arpa/inet.lo \
+am__objects_3 = core/sys/posix/aio.lo core/sys/posix/arpa/inet.lo \
core/sys/posix/config.lo core/sys/posix/dirent.lo \
core/sys/posix/dlfcn.lo core/sys/posix/fcntl.lo \
core/sys/posix/grp.lo core/sys/posix/iconv.lo \
@@ -270,8 +265,8 @@ am__objects_7 = core/sys/posix/aio.lo core/sys/posix/arpa/inet.lo \
core/sys/posix/syslog.lo core/sys/posix/termios.lo \
core/sys/posix/time.lo core/sys/posix/ucontext.lo \
core/sys/posix/unistd.lo core/sys/posix/utime.lo
-@DRUNTIME_OS_UNIX_TRUE@am__objects_8 = $(am__objects_7)
-am__objects_9 = core/sys/darwin/crt_externs.lo \
+@DRUNTIME_OS_POSIX_TRUE@am__objects_4 = $(am__objects_3)
+am__objects_5 = core/sys/darwin/crt_externs.lo \
core/sys/darwin/dlfcn.lo core/sys/darwin/execinfo.lo \
core/sys/darwin/mach/dyld.lo core/sys/darwin/mach/getsect.lo \
core/sys/darwin/mach/kern_return.lo \
@@ -281,8 +276,8 @@ am__objects_9 = core/sys/darwin/crt_externs.lo \
core/sys/darwin/netinet/in_.lo core/sys/darwin/pthread.lo \
core/sys/darwin/string.lo core/sys/darwin/sys/cdefs.lo \
core/sys/darwin/sys/event.lo core/sys/darwin/sys/mman.lo
-@DRUNTIME_OS_DARWIN_TRUE@am__objects_10 = $(am__objects_9)
-am__objects_11 = core/sys/dragonflybsd/dlfcn.lo \
+@DRUNTIME_OS_DARWIN_TRUE@am__objects_6 = $(am__objects_5)
+am__objects_7 = core/sys/dragonflybsd/dlfcn.lo \
core/sys/dragonflybsd/execinfo.lo \
core/sys/dragonflybsd/netinet/in_.lo \
core/sys/dragonflybsd/pthread_np.lo \
@@ -299,11 +294,11 @@ am__objects_11 = core/sys/dragonflybsd/dlfcn.lo \
core/sys/dragonflybsd/sys/mman.lo \
core/sys/dragonflybsd/sys/socket.lo \
core/sys/dragonflybsd/time.lo
-@DRUNTIME_OS_DRAGONFLYBSD_TRUE@am__objects_12 = $(am__objects_11)
-am__objects_13 = core/sys/bionic/fcntl.lo core/sys/bionic/string.lo \
+@DRUNTIME_OS_DRAGONFLYBSD_TRUE@am__objects_8 = $(am__objects_7)
+am__objects_9 = core/sys/bionic/fcntl.lo core/sys/bionic/string.lo \
core/sys/bionic/unistd.lo
-@DRUNTIME_OS_ANDROID_TRUE@am__objects_14 = $(am__objects_13)
-am__objects_15 = core/sys/freebsd/dlfcn.lo \
+@DRUNTIME_OS_ANDROID_TRUE@am__objects_10 = $(am__objects_9)
+am__objects_11 = core/sys/freebsd/dlfcn.lo \
core/sys/freebsd/execinfo.lo core/sys/freebsd/netinet/in_.lo \
core/sys/freebsd/pthread_np.lo core/sys/freebsd/string.lo \
core/sys/freebsd/sys/_bitset.lo \
@@ -314,23 +309,23 @@ am__objects_15 = core/sys/freebsd/dlfcn.lo \
core/sys/freebsd/sys/event.lo core/sys/freebsd/sys/link_elf.lo \
core/sys/freebsd/sys/mman.lo core/sys/freebsd/sys/mount.lo \
core/sys/freebsd/time.lo core/sys/freebsd/unistd.lo
-@DRUNTIME_OS_FREEBSD_TRUE@am__objects_16 = $(am__objects_15)
-am__objects_17 = core/sys/netbsd/dlfcn.lo core/sys/netbsd/execinfo.lo \
+@DRUNTIME_OS_FREEBSD_TRUE@am__objects_12 = $(am__objects_11)
+am__objects_13 = core/sys/netbsd/dlfcn.lo core/sys/netbsd/execinfo.lo \
core/sys/netbsd/string.lo core/sys/netbsd/sys/elf.lo \
core/sys/netbsd/sys/elf32.lo core/sys/netbsd/sys/elf64.lo \
core/sys/netbsd/sys/elf_common.lo core/sys/netbsd/sys/event.lo \
core/sys/netbsd/sys/featuretest.lo \
core/sys/netbsd/sys/link_elf.lo core/sys/netbsd/sys/mman.lo \
core/sys/netbsd/time.lo
-@DRUNTIME_OS_NETBSD_TRUE@am__objects_18 = $(am__objects_17)
-am__objects_19 = core/sys/openbsd/dlfcn.lo core/sys/openbsd/string.lo \
+@DRUNTIME_OS_NETBSD_TRUE@am__objects_14 = $(am__objects_13)
+am__objects_15 = core/sys/openbsd/dlfcn.lo core/sys/openbsd/string.lo \
core/sys/openbsd/sys/cdefs.lo core/sys/openbsd/sys/elf.lo \
core/sys/openbsd/sys/elf32.lo core/sys/openbsd/sys/elf64.lo \
core/sys/openbsd/sys/elf_common.lo \
core/sys/openbsd/sys/link_elf.lo core/sys/openbsd/sys/mman.lo \
core/sys/openbsd/time.lo
-@DRUNTIME_OS_OPENBSD_TRUE@am__objects_20 = $(am__objects_19)
-am__objects_21 = core/sys/linux/config.lo core/sys/linux/dlfcn.lo \
+@DRUNTIME_OS_OPENBSD_TRUE@am__objects_16 = $(am__objects_15)
+am__objects_17 = core/sys/linux/config.lo core/sys/linux/dlfcn.lo \
core/sys/linux/elf.lo core/sys/linux/epoll.lo \
core/sys/linux/errno.lo core/sys/linux/execinfo.lo \
core/sys/linux/fcntl.lo core/sys/linux/ifaddrs.lo \
@@ -346,8 +341,8 @@ am__objects_21 = core/sys/linux/config.lo core/sys/linux/dlfcn.lo \
core/sys/linux/termios.lo core/sys/linux/time.lo \
core/sys/linux/timerfd.lo core/sys/linux/tipc.lo \
core/sys/linux/unistd.lo
-@DRUNTIME_OS_LINUX_TRUE@am__objects_22 = $(am__objects_21)
-am__objects_23 = core/sys/windows/accctrl.lo \
+@DRUNTIME_OS_LINUX_TRUE@am__objects_18 = $(am__objects_17)
+am__objects_19 = core/sys/windows/accctrl.lo \
core/sys/windows/aclapi.lo core/sys/windows/aclui.lo \
core/sys/windows/basetsd.lo core/sys/windows/basetyps.lo \
core/sys/windows/cderr.lo core/sys/windows/cguid.lo \
@@ -430,8 +425,8 @@ am__objects_23 = core/sys/windows/accctrl.lo \
core/sys/windows/winspool.lo core/sys/windows/winsvc.lo \
core/sys/windows/winuser.lo core/sys/windows/winver.lo \
core/sys/windows/wtsapi32.lo core/sys/windows/wtypes.lo
-@DRUNTIME_OS_MINGW_TRUE@am__objects_24 = $(am__objects_23)
-am__objects_25 = core/sys/solaris/dlfcn.lo core/sys/solaris/elf.lo \
+@DRUNTIME_OS_MINGW_TRUE@am__objects_20 = $(am__objects_19)
+am__objects_21 = core/sys/solaris/dlfcn.lo core/sys/solaris/elf.lo \
core/sys/solaris/execinfo.lo core/sys/solaris/libelf.lo \
core/sys/solaris/link.lo core/sys/solaris/sys/elf.lo \
core/sys/solaris/sys/elf_386.lo \
@@ -442,26 +437,52 @@ am__objects_25 = core/sys/solaris/dlfcn.lo core/sys/solaris/elf.lo \
core/sys/solaris/sys/priocntl.lo \
core/sys/solaris/sys/procset.lo core/sys/solaris/sys/types.lo \
core/sys/solaris/time.lo
-@DRUNTIME_OS_SOLARIS_TRUE@am__objects_26 = $(am__objects_25)
-@DRUNTIME_CPU_AARCH64_TRUE@am__objects_27 = config/aarch64/libgdruntime_la-switchcontext.lo
-@DRUNTIME_CPU_ARM_TRUE@am__objects_28 = config/arm/libgdruntime_la-switchcontext.lo
-@DRUNTIME_CPU_MIPS_TRUE@am__objects_29 = config/mips/libgdruntime_la-switchcontext.lo
-@DRUNTIME_CPU_POWERPC_TRUE@am__objects_30 = config/powerpc/libgdruntime_la-switchcontext.lo
-@DRUNTIME_CPU_POWERPC64_TRUE@am__objects_31 = config/powerpc64/libgdruntime_la-callwithstack.lo
-@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__objects_32 = config/mingw/libgdruntime_la-switchcontext.lo
-@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__objects_33 = config/x86/libgdruntime_la-switchcontext.lo
-am__objects_34 = $(am__objects_4) $(am__objects_6) $(am__objects_8) \
+@DRUNTIME_OS_SOLARIS_TRUE@am__objects_22 = $(am__objects_21)
+@DRUNTIME_CPU_AARCH64_TRUE@am__objects_23 = config/aarch64/libgdruntime_la-switchcontext.lo
+@DRUNTIME_CPU_ARM_TRUE@am__objects_24 = config/arm/libgdruntime_la-switchcontext.lo
+@DRUNTIME_CPU_MIPS_TRUE@am__objects_25 = config/mips/libgdruntime_la-switchcontext.lo
+@DRUNTIME_CPU_POWERPC_TRUE@am__objects_26 = config/powerpc/libgdruntime_la-switchcontext.lo
+@DRUNTIME_CPU_POWERPC64_TRUE@am__objects_27 = config/powerpc64/libgdruntime_la-callwithstack.lo
+@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__objects_28 = config/mingw/libgdruntime_la-switchcontext.lo
+@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__objects_29 = config/x86/libgdruntime_la-switchcontext.lo
+@DRUNTIME_CPU_SYSTEMZ_TRUE@am__objects_30 = config/systemz/libgdruntime_la-get_tls_offset.lo
+@DRUNTIME_CPU_S390_TRUE@am__objects_31 = config/s390/libgdruntime_la-get_tls_offset.lo
+am__objects_32 = $(am__objects_4) $(am__objects_6) $(am__objects_8) \
$(am__objects_10) $(am__objects_12) $(am__objects_14) \
$(am__objects_16) $(am__objects_18) $(am__objects_20) \
- $(am__objects_22) $(am__objects_24) $(am__objects_26) \
- $(am__objects_27) $(am__objects_28) $(am__objects_29) \
- $(am__objects_30) $(am__objects_31) $(am__objects_32) \
+ $(am__objects_22) $(am__objects_23) $(am__objects_24) \
+ $(am__objects_25) $(am__objects_26) $(am__objects_27) \
+ $(am__objects_28) $(am__objects_29) $(am__objects_30) \
+ $(am__objects_31)
+am__objects_33 = gcc/config.lo gcc/libbacktrace.lo
+am__objects_34 = $(am__objects_1) $(am__objects_2) $(am__objects_32) \
$(am__objects_33)
-am__objects_35 = gcc/config.lo gcc/libbacktrace.lo
-am__objects_36 = $(am__objects_1) $(am__objects_2) $(am__objects_34) \
- $(am__objects_35)
-am_libgdruntime_la_OBJECTS = $(am__objects_36)
+am_libgdruntime_la_OBJECTS = $(am__objects_34)
libgdruntime_la_OBJECTS = $(am_libgdruntime_la_OBJECTS)
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am__objects_35 = core/stdc/libgdruntime_convenience_la-errno_.lo
+@DRUNTIME_CPU_AARCH64_TRUE@am__objects_36 = config/aarch64/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_ARM_TRUE@am__objects_37 = config/arm/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_MIPS_TRUE@am__objects_38 = config/mips/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_POWERPC_TRUE@am__objects_39 = config/powerpc/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_POWERPC64_TRUE@am__objects_40 = config/powerpc64/libgdruntime_convenience_la-callwithstack.lo
+@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_TRUE@am__objects_41 = config/mingw/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_X86_TRUE@@DRUNTIME_OS_MINGW_FALSE@am__objects_42 = config/x86/libgdruntime_convenience_la-switchcontext.lo
+@DRUNTIME_CPU_SYSTEMZ_TRUE@am__objects_43 = config/systemz/libgdruntime_convenience_la-get_tls_offset.lo
+@DRUNTIME_CPU_S390_TRUE@am__objects_44 = config/s390/libgdruntime_convenience_la-get_tls_offset.lo
+am__objects_45 = $(am__objects_4) $(am__objects_6) $(am__objects_8) \
+ $(am__objects_10) $(am__objects_12) $(am__objects_14) \
+ $(am__objects_16) $(am__objects_18) $(am__objects_20) \
+ $(am__objects_22) $(am__objects_36) $(am__objects_37) \
+ $(am__objects_38) $(am__objects_39) $(am__objects_40) \
+ $(am__objects_41) $(am__objects_42) $(am__objects_43) \
+ $(am__objects_44)
+am__objects_46 = $(am__objects_1) $(am__objects_35) $(am__objects_45) \
+ $(am__objects_33)
+am__objects_47 = $(am__objects_46)
+am_libgdruntime_convenience_la_OBJECTS = $(am__objects_47)
+libgdruntime_convenience_la_OBJECTS = \
+ $(am_libgdruntime_convenience_la_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -508,7 +529,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libgdruntime_la_SOURCES)
+SOURCES = $(libgdruntime_la_SOURCES) \
+ $(libgdruntime_convenience_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -551,6 +573,7 @@ CCASFLAGS = @CCASFLAGS@
CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+CHECKING_DFLAGS = @CHECKING_DFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
@@ -616,6 +639,7 @@ SHELL = @SHELL@
SPEC_PHOBOS_DEPS = @SPEC_PHOBOS_DEPS@
STRIP = @STRIP@
VERSION = @VERSION@
+WARN_DFLAGS = @WARN_DFLAGS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
@@ -690,29 +714,19 @@ LTDCOMPILE = $(LIBTOOL) --tag=D $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(GDC) $(AM_DFLAGS)
-# Also override library link commands: This is not strictly
-# required, but we want to record additional dependencies such
-# as pthread in the library
-libgdruntime_la_LINK = $(LIBTOOL) --tag=D $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(GDC) $(AM_CFLAGS) $(CFLAGS) \
- $(libgdruntime_la_LDFLAGS) $(LDFLAGS) -o $@
-
-libgphobos_la_LINK = $(LIBTOOL) --tag=D $(libgphobos_la_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(GDC) $(AM_CFLAGS) $(CFLAGS) \
- $(libgphobos_la_LDFLAGS) $(LDFLAGS) -o $@
-
-
# Include D build rules
# Make sure GDC can find libdruntime include files
D_EXTRA_DFLAGS = -nostdinc -I $(srcdir) -I .
# D flags for compilation
-AM_DFLAGS = $(phobos_compiler_pic_flag)
+AM_DFLAGS = \
+ $(phobos_compiler_pic_flag) \
+ $(WARN_DFLAGS) $(CHECKING_DFLAGS)
+
# Install all D and DI files
ALL_DRUNTIME_INSTALL_DSOURCES = $(DRUNTIME_DSOURCES) \
- $(DRUNTIME_DSOURCES_GC) $(DRUNTIME_DSOURCES_GCSTUB) \
$(DRUNTIME_DSOURCES_BIONIC) $(DRUNTIME_DSOURCES_DARWIN) \
$(DRUNTIME_DSOURCES_DRAGONFLYBSD) $(DRUNTIME_DSOURCES_FREEBSD) \
$(DRUNTIME_DSOURCES_LINUX) $(DRUNTIME_DSOURCES_NETBSD) \
@@ -740,6 +754,9 @@ DRUNTIME_DSOURCES_GENERATED = gcc/config.d gcc/libbacktrace.d
ALL_DRUNTIME_SOURCES = $(DRUNTIME_DSOURCES) $(DRUNTIME_CSOURCES) \
$(DRUNTIME_SOURCES_CONFIGURED) $(DRUNTIME_DSOURCES_GENERATED)
+
+# Need this library to both be part of libgphobos.a, and installed separately.
+# 1) separate libgdruntime.la
toolexeclib_LTLIBRARIES = libgdruntime.la
libgdruntime_la_SOURCES = $(ALL_DRUNTIME_SOURCES)
libgdruntime_la_LIBTOOLFLAGS =
@@ -748,6 +765,22 @@ libgdruntime_la_LDFLAGS = -Wc,-nophoboslib,-dstartfiles,-B../src,-Bgcc \
libgdruntime_la_LIBADD = $(LIBATOMIC) $(LIBBACKTRACE)
libgdruntime_la_DEPENDENCIES = $(DRTSTUFF)
+# Also override library link commands: This is not strictly
+# required, but we want to record additional dependencies such
+# as pthread in the library
+libgdruntime_la_LINK = $(LIBTOOL) --tag=D $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(GDC) $(AM_CFLAGS) $(CFLAGS) \
+ $(libgdruntime_la_LDFLAGS) $(LDFLAGS) -o $@
+
+
+# 2) integrated libgdruntime_convenience.la that is to be part of libgphobos.a
+noinst_LTLIBRARIES = libgdruntime_convenience.la
+libgdruntime_convenience_la_SOURCES = $(libgdruntime_la_SOURCES)
+libgdruntime_convenience_la_LIBTOOLFLAGS = $(libgdruntime_la_LIBTOOLFLAGS)
+libgdruntime_convenience_la_LDFLAGS = $(libgdruntime_la_LDFLAGS)
+libgdruntime_convenience_la_LIBADD = $(libgdruntime_la_LIBADD)
+libgdruntime_convenience_la_DEPENDENCIES = $(libgdruntime_la_DEPENDENCIES)
+libgdruntime_convenience_la_LINK = $(libgdruntime_la_LINK)
# Source file definitions. Boring stuff, auto-generated with
# https://gist.github.com/jpf91/8ad1dbc9902d6ad876313f134c6527d1
@@ -769,7 +802,9 @@ DRUNTIME_DSOURCES = core/atomic.d core/attribute.d core/bitop.d \
core/stdc/wctype.d core/sync/barrier.d core/sync/condition.d \
core/sync/config.d core/sync/exception.d core/sync/mutex.d \
core/sync/rwmutex.d core/sync/semaphore.d core/thread.d core/time.d \
- core/vararg.d gcc/attribute.d gcc/backtrace.d gcc/builtins.d gcc/deh.d \
+ core/vararg.d gc/bits.d gc/config.d gc/gcinterface.d \
+ gc/impl/conservative/gc.d gc/impl/manual/gc.d gc/os.d gc/pooltable.d \
+ gc/proxy.d gcc/attribute.d gcc/backtrace.d gcc/builtins.d gcc/deh.d \
gcc/emutls.d gcc/gthread.d gcc/sections/android.d \
gcc/sections/elf_shared.d gcc/sections/osx.d gcc/sections/package.d \
gcc/sections/win32.d gcc/sections/win64.d gcc/unwind/arm.d \
@@ -800,11 +835,6 @@ DRUNTIME_DSOURCES = core/atomic.d core/attribute.d core/bitop.d \
DRUNTIME_DSOURCES_STDCXX = core/stdcpp/exception.d \
core/stdcpp/typeinfo.d
-DRUNTIME_DSOURCES_GC = gc/bits.d gc/config.d gc/gcinterface.d \
- gc/impl/conservative/gc.d gc/impl/manual/gc.d gc/os.d gc/pooltable.d \
- gc/proxy.d
-
-DRUNTIME_DSOURCES_GCSTUB = gcstub/gc.d
DRUNTIME_DSOURCES_BIONIC = core/sys/bionic/fcntl.d \
core/sys/bionic/string.d core/sys/bionic/unistd.d
@@ -1026,6 +1056,17 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@list='$(toolexeclib_LTLIBRARIES)'; test -n "$(toolexeclibdir)" || list=; \
@@ -1122,6 +1163,23 @@ core/sync/semaphore.lo: core/sync/$(am__dirstamp)
core/thread.lo: core/$(am__dirstamp)
core/time.lo: core/$(am__dirstamp)
core/vararg.lo: core/$(am__dirstamp)
+gc/$(am__dirstamp):
+ @$(MKDIR_P) gc
+ @: > gc/$(am__dirstamp)
+gc/bits.lo: gc/$(am__dirstamp)
+gc/config.lo: gc/$(am__dirstamp)
+gc/gcinterface.lo: gc/$(am__dirstamp)
+gc/impl/conservative/$(am__dirstamp):
+ @$(MKDIR_P) gc/impl/conservative
+ @: > gc/impl/conservative/$(am__dirstamp)
+gc/impl/conservative/gc.lo: gc/impl/conservative/$(am__dirstamp)
+gc/impl/manual/$(am__dirstamp):
+ @$(MKDIR_P) gc/impl/manual
+ @: > gc/impl/manual/$(am__dirstamp)
+gc/impl/manual/gc.lo: gc/impl/manual/$(am__dirstamp)
+gc/os.lo: gc/$(am__dirstamp)
+gc/pooltable.lo: gc/$(am__dirstamp)
+gc/proxy.lo: gc/$(am__dirstamp)
gcc/$(am__dirstamp):
@$(MKDIR_P) gcc
@: > gcc/$(am__dirstamp)
@@ -1229,27 +1287,6 @@ rt/util/random.lo: rt/util/$(am__dirstamp)
rt/util/typeinfo.lo: rt/util/$(am__dirstamp)
rt/util/utf.lo: rt/util/$(am__dirstamp)
core/stdc/libgdruntime_la-errno_.lo: core/stdc/$(am__dirstamp)
-gc/$(am__dirstamp):
- @$(MKDIR_P) gc
- @: > gc/$(am__dirstamp)
-gc/bits.lo: gc/$(am__dirstamp)
-gc/config.lo: gc/$(am__dirstamp)
-gc/gcinterface.lo: gc/$(am__dirstamp)
-gc/impl/conservative/$(am__dirstamp):
- @$(MKDIR_P) gc/impl/conservative
- @: > gc/impl/conservative/$(am__dirstamp)
-gc/impl/conservative/gc.lo: gc/impl/conservative/$(am__dirstamp)
-gc/impl/manual/$(am__dirstamp):
- @$(MKDIR_P) gc/impl/manual
- @: > gc/impl/manual/$(am__dirstamp)
-gc/impl/manual/gc.lo: gc/impl/manual/$(am__dirstamp)
-gc/os.lo: gc/$(am__dirstamp)
-gc/pooltable.lo: gc/$(am__dirstamp)
-gc/proxy.lo: gc/$(am__dirstamp)
-gcstub/$(am__dirstamp):
- @$(MKDIR_P) gcstub
- @: > gcstub/$(am__dirstamp)
-gcstub/gc.lo: gcstub/$(am__dirstamp)
core/sys/posix/$(am__dirstamp):
@$(MKDIR_P) core/sys/posix
@: > core/sys/posix/$(am__dirstamp)
@@ -1736,11 +1773,44 @@ config/x86/$(am__dirstamp):
@: > config/x86/$(am__dirstamp)
config/x86/libgdruntime_la-switchcontext.lo: \
config/x86/$(am__dirstamp)
+config/systemz/$(am__dirstamp):
+ @$(MKDIR_P) config/systemz
+ @: > config/systemz/$(am__dirstamp)
+config/systemz/libgdruntime_la-get_tls_offset.lo: \
+ config/systemz/$(am__dirstamp)
+config/s390/$(am__dirstamp):
+ @$(MKDIR_P) config/s390
+ @: > config/s390/$(am__dirstamp)
+config/s390/libgdruntime_la-get_tls_offset.lo: \
+ config/s390/$(am__dirstamp)
gcc/config.lo: gcc/$(am__dirstamp)
gcc/libbacktrace.lo: gcc/$(am__dirstamp)
libgdruntime.la: $(libgdruntime_la_OBJECTS) $(libgdruntime_la_DEPENDENCIES) $(EXTRA_libgdruntime_la_DEPENDENCIES)
$(AM_V_GEN)$(libgdruntime_la_LINK) -rpath $(toolexeclibdir) $(libgdruntime_la_OBJECTS) $(libgdruntime_la_LIBADD) $(LIBS)
+core/stdc/libgdruntime_convenience_la-errno_.lo: \
+ core/stdc/$(am__dirstamp)
+config/aarch64/libgdruntime_convenience_la-switchcontext.lo: \
+ config/aarch64/$(am__dirstamp)
+config/arm/libgdruntime_convenience_la-switchcontext.lo: \
+ config/arm/$(am__dirstamp)
+config/mips/libgdruntime_convenience_la-switchcontext.lo: \
+ config/mips/$(am__dirstamp)
+config/powerpc/libgdruntime_convenience_la-switchcontext.lo: \
+ config/powerpc/$(am__dirstamp)
+config/powerpc64/libgdruntime_convenience_la-callwithstack.lo: \
+ config/powerpc64/$(am__dirstamp)
+config/mingw/libgdruntime_convenience_la-switchcontext.lo: \
+ config/mingw/$(am__dirstamp)
+config/x86/libgdruntime_convenience_la-switchcontext.lo: \
+ config/x86/$(am__dirstamp)
+config/systemz/libgdruntime_convenience_la-get_tls_offset.lo: \
+ config/systemz/$(am__dirstamp)
+config/s390/libgdruntime_convenience_la-get_tls_offset.lo: \
+ config/s390/$(am__dirstamp)
+
+libgdruntime_convenience.la: $(libgdruntime_convenience_la_OBJECTS) $(libgdruntime_convenience_la_DEPENDENCIES) $(EXTRA_libgdruntime_convenience_la_DEPENDENCIES)
+ $(AM_V_GEN)$(libgdruntime_convenience_la_LINK) $(libgdruntime_convenience_la_OBJECTS) $(libgdruntime_convenience_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -1756,6 +1826,10 @@ mostlyclean-compile:
-rm -f config/powerpc/*.lo
-rm -f config/powerpc64/*.$(OBJEXT)
-rm -f config/powerpc64/*.lo
+ -rm -f config/s390/*.$(OBJEXT)
+ -rm -f config/s390/*.lo
+ -rm -f config/systemz/*.$(OBJEXT)
+ -rm -f config/systemz/*.lo
-rm -f config/x86/*.$(OBJEXT)
-rm -f config/x86/*.lo
-rm -f core/*.$(OBJEXT)
@@ -1832,8 +1906,6 @@ mostlyclean-compile:
-rm -f gcc/sections/*.lo
-rm -f gcc/unwind/*.$(OBJEXT)
-rm -f gcc/unwind/*.lo
- -rm -f gcstub/*.$(OBJEXT)
- -rm -f gcstub/*.lo
-rm -f rt/*.$(OBJEXT)
-rm -f rt/*.lo
-rm -f rt/typeinfo/*.$(OBJEXT)
@@ -1876,6 +1948,39 @@ config/mingw/libgdruntime_la-switchcontext.lo: config/mingw/switchcontext.S
config/x86/libgdruntime_la-switchcontext.lo: config/x86/switchcontext.S
$(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/x86/libgdruntime_la-switchcontext.lo `test -f 'config/x86/switchcontext.S' || echo '$(srcdir)/'`config/x86/switchcontext.S
+config/systemz/libgdruntime_la-get_tls_offset.lo: config/systemz/get_tls_offset.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/systemz/libgdruntime_la-get_tls_offset.lo `test -f 'config/systemz/get_tls_offset.S' || echo '$(srcdir)/'`config/systemz/get_tls_offset.S
+
+config/s390/libgdruntime_la-get_tls_offset.lo: config/s390/get_tls_offset.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/s390/libgdruntime_la-get_tls_offset.lo `test -f 'config/s390/get_tls_offset.S' || echo '$(srcdir)/'`config/s390/get_tls_offset.S
+
+config/aarch64/libgdruntime_convenience_la-switchcontext.lo: config/aarch64/switchcontext.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/aarch64/libgdruntime_convenience_la-switchcontext.lo `test -f 'config/aarch64/switchcontext.S' || echo '$(srcdir)/'`config/aarch64/switchcontext.S
+
+config/arm/libgdruntime_convenience_la-switchcontext.lo: config/arm/switchcontext.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/arm/libgdruntime_convenience_la-switchcontext.lo `test -f 'config/arm/switchcontext.S' || echo '$(srcdir)/'`config/arm/switchcontext.S
+
+config/mips/libgdruntime_convenience_la-switchcontext.lo: config/mips/switchcontext.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/mips/libgdruntime_convenience_la-switchcontext.lo `test -f 'config/mips/switchcontext.S' || echo '$(srcdir)/'`config/mips/switchcontext.S
+
+config/powerpc/libgdruntime_convenience_la-switchcontext.lo: config/powerpc/switchcontext.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/powerpc/libgdruntime_convenience_la-switchcontext.lo `test -f 'config/powerpc/switchcontext.S' || echo '$(srcdir)/'`config/powerpc/switchcontext.S
+
+config/powerpc64/libgdruntime_convenience_la-callwithstack.lo: config/powerpc64/callwithstack.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/powerpc64/libgdruntime_convenience_la-callwithstack.lo `test -f 'config/powerpc64/callwithstack.S' || echo '$(srcdir)/'`config/powerpc64/callwithstack.S
+
+config/mingw/libgdruntime_convenience_la-switchcontext.lo: config/mingw/switchcontext.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/mingw/libgdruntime_convenience_la-switchcontext.lo `test -f 'config/mingw/switchcontext.S' || echo '$(srcdir)/'`config/mingw/switchcontext.S
+
+config/x86/libgdruntime_convenience_la-switchcontext.lo: config/x86/switchcontext.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/x86/libgdruntime_convenience_la-switchcontext.lo `test -f 'config/x86/switchcontext.S' || echo '$(srcdir)/'`config/x86/switchcontext.S
+
+config/systemz/libgdruntime_convenience_la-get_tls_offset.lo: config/systemz/get_tls_offset.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/systemz/libgdruntime_convenience_la-get_tls_offset.lo `test -f 'config/systemz/get_tls_offset.S' || echo '$(srcdir)/'`config/systemz/get_tls_offset.S
+
+config/s390/libgdruntime_convenience_la-get_tls_offset.lo: config/s390/get_tls_offset.S
+ $(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o config/s390/libgdruntime_convenience_la-get_tls_offset.lo `test -f 'config/s390/get_tls_offset.S' || echo '$(srcdir)/'`config/s390/get_tls_offset.S
+
.c.o:
$(AM_V_CC)$(COMPILE) -c -o $@ $<
@@ -1888,6 +1993,9 @@ config/x86/libgdruntime_la-switchcontext.lo: config/x86/switchcontext.S
core/stdc/libgdruntime_la-errno_.lo: core/stdc/errno_.c
$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgdruntime_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o core/stdc/libgdruntime_la-errno_.lo `test -f 'core/stdc/errno_.c' || echo '$(srcdir)/'`core/stdc/errno_.c
+core/stdc/libgdruntime_convenience_la-errno_.lo: core/stdc/errno_.c
+ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgdruntime_convenience_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o core/stdc/libgdruntime_convenience_la-errno_.lo `test -f 'core/stdc/errno_.c' || echo '$(srcdir)/'`core/stdc/errno_.c
+
mostlyclean-libtool:
-rm -f *.lo
@@ -1899,6 +2007,8 @@ clean-libtool:
-rm -rf config/mips/.libs config/mips/_libs
-rm -rf config/powerpc/.libs config/powerpc/_libs
-rm -rf config/powerpc64/.libs config/powerpc64/_libs
+ -rm -rf config/s390/.libs config/s390/_libs
+ -rm -rf config/systemz/.libs config/systemz/_libs
-rm -rf config/x86/.libs config/x86/_libs
-rm -rf core/.libs core/_libs
-rm -rf core/internal/.libs core/internal/_libs
@@ -1937,7 +2047,6 @@ clean-libtool:
-rm -rf gcc/.libs gcc/_libs
-rm -rf gcc/sections/.libs gcc/sections/_libs
-rm -rf gcc/unwind/.libs gcc/unwind/_libs
- -rm -rf gcstub/.libs gcstub/_libs
-rm -rf rt/.libs rt/_libs
-rm -rf rt/typeinfo/.libs rt/typeinfo/_libs
-rm -rf rt/util/.libs rt/util/_libs
@@ -2054,6 +2163,8 @@ distclean-generic:
-rm -f config/mips/$(am__dirstamp)
-rm -f config/powerpc/$(am__dirstamp)
-rm -f config/powerpc64/$(am__dirstamp)
+ -rm -f config/s390/$(am__dirstamp)
+ -rm -f config/systemz/$(am__dirstamp)
-rm -f config/x86/$(am__dirstamp)
-rm -f core/$(am__dirstamp)
-rm -f core/internal/$(am__dirstamp)
@@ -2092,7 +2203,6 @@ distclean-generic:
-rm -f gcc/$(am__dirstamp)
-rm -f gcc/sections/$(am__dirstamp)
-rm -f gcc/unwind/$(am__dirstamp)
- -rm -f gcstub/$(am__dirstamp)
-rm -f rt/$(am__dirstamp)
-rm -f rt/typeinfo/$(am__dirstamp)
-rm -f rt/util/$(am__dirstamp)
@@ -2103,8 +2213,8 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-toolexeclibLTLIBRARIES \
- mostlyclean-am
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ clean-toolexeclibLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f Makefile
@@ -2175,8 +2285,9 @@ uninstall-am: uninstall-toolexeclibDATA \
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-toolexeclibLTLIBRARIES cscopelist-am ctags \
- ctags-am distclean distclean-compile distclean-generic \
+ clean-libtool clean-noinstLTLIBRARIES \
+ clean-toolexeclibLTLIBRARIES cscopelist-am ctags ctags-am \
+ distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags dvi dvi-am html html-am info \
info-am install install-am install-data install-data-am \
install-data-local install-dvi install-dvi-am install-exec \
diff --git a/libphobos/libdruntime/config/s390/get_tls_offset.S b/libphobos/libdruntime/config/s390/get_tls_offset.S
new file mode 100644
index 0000000..aaca05c
--- /dev/null
+++ b/libphobos/libdruntime/config/s390/get_tls_offset.S
@@ -0,0 +1,25 @@
+/* IBM Z support code for TLS offsets.
+ Copyright (C) 2020 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../systemz/get_tls_offset.S"
diff --git a/libphobos/libdruntime/config/systemz/get_tls_offset.S b/libphobos/libdruntime/config/systemz/get_tls_offset.S
new file mode 100644
index 0000000..e9e6dc7
--- /dev/null
+++ b/libphobos/libdruntime/config/systemz/get_tls_offset.S
@@ -0,0 +1,79 @@
+/* IBM Z support code for TLS offsets.
+ Copyright (C) 2020 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* __tls_get_offset expects the GOT pointer in %r12 and adds
+ it to its argument in %r2. In order to get the offset of
+ ti, we load it into %r2, subtract the current %r12 from %r2
+ so the addition will result in a nop (%r2 - %r12 + %r12).
+
+ Note: This file is shared between systemz and s390 as the
+ same file is used in multilib case for s390x and s390. */
+
+#include "../common/threadasm.S"
+
+ .text
+ .globl CSYM(__ibmz_get_tls_offset)
+ .type CSYM(__ibmz_get_tls_offset), @function
+ .align 8
+CSYM(__ibmz_get_tls_offset):
+ .cfi_startproc
+
+#ifdef __s390x__
+ .machinemode zarch
+ stmg %r14,%r15,112(%r15)
+ .cfi_offset 14, -48
+ .cfi_offset 15, -40
+ aghi %r15,-160
+ .cfi_def_cfa_offset 320
+ sgr %r2,%r12
+ brasl %r14,__tls_get_offset@PLT
+ lg %r4,272(%r15)
+ lmg %r14,%r15,272(%r15)
+ .cfi_restore 15
+ .cfi_restore 14
+ .cfi_def_cfa_offset 160
+ br %r4
+#else
+ .machinemode esa
+ stm %r12,%r15,48(%r15)
+ .cfi_offset 12, -48
+ .cfi_offset 13, -44
+ .cfi_offset 14, -40
+ .cfi_offset 15, -36
+ ahi %r15,-96
+ .cfi_def_cfa_offset 192
+ larl %r12,_GLOBAL_OFFSET_TABLE_
+ sr %r2,%r12
+ brasl %r14,__tls_get_offset@PLT
+ l %r4,152(%r15)
+ lm %r12,%r15,144(%r15)
+ .cfi_restore 15
+ .cfi_restore 14
+ .cfi_restore 13
+ .cfi_restore 12
+ .cfi_def_cfa_offset 96
+ br %r4
+#endif
+ .cfi_endproc
+ .size __ibmz_get_tls_offset, .-__ibmz_get_tls_offset
diff --git a/libphobos/libdruntime/gcc/sections/elf_shared.d b/libphobos/libdruntime/gcc/sections/elf_shared.d
index b28c8dc..7ff87a8 100644
--- a/libphobos/libdruntime/gcc/sections/elf_shared.d
+++ b/libphobos/libdruntime/gcc/sections/elf_shared.d
@@ -1028,7 +1028,7 @@ struct tls_index
}
extern(C) void* __tls_get_addr(tls_index* ti) nothrow @nogc;
-extern(C) void* __tls_get_addr_internal(tls_index* ti) nothrow @nogc;
+extern(C) void* __ibmz_get_tls_offset(tls_index *ti) nothrow @nogc;
/* The dynamic thread vector (DTV) pointers may point 0x8000 past the start of
* each TLS block. This is at least true for PowerPC and Mips platforms.
@@ -1086,9 +1086,11 @@ void[] getTLSRange(size_t mod, size_t sz) nothrow @nogc
auto ti = tls_index(mod, 0);
version (IBMZ_Any)
{
- auto idx = cast(void *)__tls_get_addr_internal(&ti)
- + cast(ulong)__builtin_thread_pointer();
- return idx[0 .. sz];
+ // IBM Z only provides __tls_get_offset instead of __tls_get_addr
+ // which returns an offset relative to the thread pointer.
+ auto addr = __ibmz_get_tls_offset(&ti);
+ addr = addr + cast(c_ulong)__builtin_thread_pointer();
+ return addr[0 .. sz];
}
else
return (__tls_get_addr(&ti)-TLS_DTV_OFFSET)[0 .. sz];
diff --git a/libphobos/libdruntime/gcstub/gc.d b/libphobos/libdruntime/gcstub/gc.d
deleted file mode 100644
index 9124a78..0000000
--- a/libphobos/libdruntime/gcstub/gc.d
+++ /dev/null
@@ -1,388 +0,0 @@
-/**
- * This module contains a minimal garbage collector implementation according to
- * published requirements. This library is mostly intended to serve as an
- * example, but it is usable in applications which do not rely on a garbage
- * collector to clean up memory (ie. when dynamic array resizing is not used,
- * and all memory allocated with 'new' is freed deterministically with
- * 'delete').
- *
- * Please note that block attribute data must be tracked, or at a minimum, the
- * FINALIZE bit must be tracked for any allocated memory block because calling
- * rt_finalize on a non-object block can result in an access violation. In the
- * allocator below, this tracking is done via a leading uint bitmask. A real
- * allocator may do better to store this data separately, similar to the basic
- * GC.
- *
- * Copyright: Copyright Sean Kelly 2005 - 2009.
- * License: $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
- * Authors: Sean Kelly
- */
-
-/* Copyright Sean Kelly 2005 - 2009.
- * Distributed under the Boost Software License, Version 1.0.
- * (See accompanying file LICENSE or copy at
- * http://www.boost.org/LICENSE_1_0.txt)
- */
-module gc.gc;
-
-private
-{
- import core.stdc.stdlib;
- import core.stdc.stdio;
-
- static import core.memory;
- private alias BlkAttr = core.memory.GC.BlkAttr;
- private alias BlkInfo = core.memory.GC.BlkInfo;
-
- extern (C) void thread_init();
- extern (C) void onOutOfMemoryError(void* pretend_sideffect = null) @trusted pure nothrow @nogc; /* dmd @@@BUG11461@@@ */
-
- struct Proxy
- {
- extern (C) void function() gc_enable;
- extern (C) void function() gc_disable;
- extern (C) void function() gc_collect;
- extern (C) void function() gc_minimize;
-
- extern (C) uint function(void*) gc_getAttr;
- extern (C) uint function(void*, uint) gc_setAttr;
- extern (C) uint function(void*, uint) gc_clrAttr;
-
- extern (C) void* function(size_t, uint, const TypeInfo) gc_malloc;
- extern (C) BlkInfo function(size_t, uint, const TypeInfo) gc_qalloc;
- extern (C) void* function(size_t, uint, const TypeInfo) gc_calloc;
- extern (C) void* function(void*, size_t, uint ba, const TypeInfo) gc_realloc;
- extern (C) size_t function(void*, size_t, size_t, const TypeInfo) gc_extend;
- extern (C) size_t function(size_t) gc_reserve;
- extern (C) void function(void*) gc_free;
-
- extern (C) void* function(void*) gc_addrOf;
- extern (C) size_t function(void*) gc_sizeOf;
-
- extern (C) BlkInfo function(void*) gc_query;
-
- extern (C) void function(void*) gc_addRoot;
- extern (C) void function(void*, size_t, const TypeInfo ti) gc_addRange;
-
- extern (C) void function(void*) gc_removeRoot;
- extern (C) void function(void*) gc_removeRange;
- extern (C) void function(in void[]) gc_runFinalizers;
-
- extern (C) bool function() gc_inFinalizer;
- }
-
- __gshared Proxy pthis;
- __gshared Proxy* proxy;
-
- void initProxy()
- {
- pthis.gc_enable = &gc_enable;
- pthis.gc_disable = &gc_disable;
- pthis.gc_collect = &gc_collect;
- pthis.gc_minimize = &gc_minimize;
-
- pthis.gc_getAttr = &gc_getAttr;
- pthis.gc_setAttr = &gc_setAttr;
- pthis.gc_clrAttr = &gc_clrAttr;
-
- pthis.gc_malloc = &gc_malloc;
- pthis.gc_qalloc = &gc_qalloc;
- pthis.gc_calloc = &gc_calloc;
- pthis.gc_realloc = &gc_realloc;
- pthis.gc_extend = &gc_extend;
- pthis.gc_reserve = &gc_reserve;
- pthis.gc_free = &gc_free;
-
- pthis.gc_addrOf = &gc_addrOf;
- pthis.gc_sizeOf = &gc_sizeOf;
-
- pthis.gc_query = &gc_query;
-
- pthis.gc_addRoot = &gc_addRoot;
- pthis.gc_addRange = &gc_addRange;
-
- pthis.gc_removeRoot = &gc_removeRoot;
- pthis.gc_removeRange = &gc_removeRange;
- pthis.gc_runFinalizers = &gc_runFinalizers;
-
- pthis.gc_inFinalizer = &gc_inFinalizer;
- }
-
- __gshared void** roots = null;
- __gshared size_t nroots = 0;
-
- struct Range
- {
- void* pos;
- size_t len;
- TypeInfo ti; // should be tail const, but doesn't exist for references
- }
-
- __gshared Range* ranges = null;
- __gshared size_t nranges = 0;
-}
-
-extern (C) void gc_init()
-{
- // NOTE: The GC must initialize the thread library before its first
- // collection, and always before returning from gc_init().
- thread_init();
- initProxy();
-}
-
-extern (C) void gc_term()
-{
- free( roots );
- free( ranges );
-}
-
-extern (C) void gc_enable()
-{
- if ( proxy is null )
- return;
- return proxy.gc_enable();
-}
-
-extern (C) void gc_disable()
-{
- if ( proxy is null )
- return;
- return proxy.gc_disable();
-}
-
-extern (C) void gc_collect()
-{
- if ( proxy is null )
- return;
- return proxy.gc_collect();
-}
-
-extern (C) void gc_minimize()
-{
- if ( proxy is null )
- return;
- return proxy.gc_minimize();
-}
-
-extern (C) uint gc_getAttr( void* p )
-{
- if ( proxy is null )
- return 0;
- return proxy.gc_getAttr( p );
-}
-
-extern (C) uint gc_setAttr( void* p, uint a )
-{
- if ( proxy is null )
- return 0;
- return proxy.gc_setAttr( p, a );
-}
-
-extern (C) uint gc_clrAttr( void* p, uint a )
-{
- if ( proxy is null )
- return 0;
- return proxy.gc_clrAttr( p, a );
-}
-
-extern (C) void* gc_malloc( size_t sz, uint ba = 0, const TypeInfo ti = null )
-{
- if ( proxy is null )
- {
- void* p = malloc( sz );
-
- if ( sz && p is null )
- onOutOfMemoryError();
- return p;
- }
- return proxy.gc_malloc( sz, ba, ti );
-}
-
-extern (C) BlkInfo gc_qalloc( size_t sz, uint ba = 0, const TypeInfo ti = null )
-{
- if ( proxy is null )
- {
- BlkInfo retval;
- retval.base = gc_malloc(sz, ba);
- retval.size = sz;
- retval.attr = ba;
- return retval;
- }
- return proxy.gc_qalloc( sz, ba, ti );
-}
-
-extern (C) void* gc_calloc( size_t sz, uint ba = 0, const TypeInfo ti = null )
-{
- if ( proxy is null )
- {
- void* p = calloc( 1, sz );
-
- if ( sz && p is null )
- onOutOfMemoryError();
- return p;
- }
- return proxy.gc_calloc( sz, ba, ti );
-}
-
-extern (C) void* gc_realloc( void* p, size_t sz, uint ba = 0, const TypeInfo ti = null )
-{
- if ( proxy is null )
- {
- p = realloc( p, sz );
-
- if ( sz && p is null )
- onOutOfMemoryError();
- return p;
- }
- return proxy.gc_realloc( p, sz, ba, ti );
-}
-
-extern (C) size_t gc_extend( void* p, size_t mx, size_t sz, const TypeInfo ti = null )
-{
- if ( proxy is null )
- return 0;
- return proxy.gc_extend( p, mx, sz, ti );
-}
-
-extern (C) size_t gc_reserve( size_t sz )
-{
- if ( proxy is null )
- return 0;
- return proxy.gc_reserve( sz );
-}
-
-extern (C) void gc_free( void* p )
-{
- if ( proxy is null )
- return free( p );
- return proxy.gc_free( p );
-}
-
-extern (C) void* gc_addrOf( void* p )
-{
- if ( proxy is null )
- return null;
- return proxy.gc_addrOf( p );
-}
-
-extern (C) size_t gc_sizeOf( void* p )
-{
- if ( proxy is null )
- return 0;
- return proxy.gc_sizeOf( p );
-}
-
-extern (C) BlkInfo gc_query( void* p )
-{
- if ( proxy is null )
- return BlkInfo.init;
- return proxy.gc_query( p );
-}
-
-extern (C) void gc_addRoot( void* p )
-{
- if ( proxy is null )
- {
- void** r = cast(void**) realloc( roots,
- (nroots+1) * roots[0].sizeof );
- if ( r is null )
- onOutOfMemoryError();
- r[nroots++] = p;
- roots = r;
- return;
- }
- return proxy.gc_addRoot( p );
-}
-
-extern (C) void gc_addRange( void* p, size_t sz, const TypeInfo ti = null )
-{
- //printf("gcstub::gc_addRange() proxy = %p\n", proxy);
- if ( proxy is null )
- {
- Range* r = cast(Range*) realloc( ranges,
- (nranges+1) * ranges[0].sizeof );
- if ( r is null )
- onOutOfMemoryError();
- r[nranges].pos = p;
- r[nranges].len = sz;
- r[nranges].ti = cast()ti;
- ranges = r;
- ++nranges;
- return;
- }
- return proxy.gc_addRange( p, sz, ti );
-}
-
-extern (C) void gc_removeRoot( void *p )
-{
- if ( proxy is null )
- {
- for ( size_t i = 0; i < nroots; ++i )
- {
- if ( roots[i] is p )
- {
- roots[i] = roots[--nroots];
- return;
- }
- }
- assert( false );
- }
- return proxy.gc_removeRoot( p );
-}
-
-extern (C) void gc_removeRange( void *p )
-{
- if ( proxy is null )
- {
- for ( size_t i = 0; i < nranges; ++i )
- {
- if ( ranges[i].pos is p )
- {
- ranges[i] = ranges[--nranges];
- return;
- }
- }
- assert( false );
- }
- return proxy.gc_removeRange( p );
-}
-
-extern (C) void gc_runFinalizers( in void[] segment )
-{
- if ( proxy !is null )
- proxy.gc_runFinalizers( segment );
-}
-
-extern (C) bool gc_inFinalizer()
-{
- if ( proxy !is null )
- return proxy.gc_inFinalizer();
- return false;
-}
-
-extern (C) Proxy* gc_getProxy()
-{
- return &pthis;
-}
-
-export extern (C) void gc_setProxy( Proxy* p )
-{
- if ( proxy !is null )
- {
- // TODO: Decide if this is an error condition.
- }
- proxy = p;
- foreach ( r; roots[0 .. nroots] )
- proxy.gc_addRoot( r );
- foreach ( r; ranges[0 .. nranges] )
- proxy.gc_addRange( r.pos, r.len, r.ti );
-}
-
-export extern (C) void gc_clrProxy()
-{
- foreach ( r; ranges[0 .. nranges] )
- proxy.gc_removeRange( r.pos );
- foreach ( r; roots[0 .. nroots] )
- proxy.gc_removeRoot( r );
- proxy = null;
-}
diff --git a/libphobos/m4/druntime.m4 b/libphobos/m4/druntime.m4
index 3b6e474..7221712 100644
--- a/libphobos/m4/druntime.m4
+++ b/libphobos/m4/druntime.m4
@@ -116,19 +116,3 @@ AC_DEFUN([DRUNTIME_INSTALL_DIRECTORIES],
gdc_include_dir='$(libdir)/gcc/${target_alias}/${gcc_version}/include/d'
AC_SUBST(gdc_include_dir)
])
-
-
-# DRUNTIME_GC
-# -----------
-# Add the --enable-druntime-gc option and create the
-# DRUNTIME_GC_ENABLE conditional
-AC_DEFUN([DRUNTIME_GC],
-[
- dnl switch between gc and gcstub
- AC_ARG_ENABLE(druntime-gc,
- AC_HELP_STRING([--enable-druntime-gc],
- [enable D runtime garbage collector (default: yes)]),
- [enable_druntime_gc=no],[enable_druntime_gc=yes])
-
- AM_CONDITIONAL([DRUNTIME_GC_ENABLE], [test "$enable_druntime_gc" = "yes"])
-])
diff --git a/libphobos/m4/druntime/cpu.m4 b/libphobos/m4/druntime/cpu.m4
index aa5b5ea..4887248 100644
--- a/libphobos/m4/druntime/cpu.m4
+++ b/libphobos/m4/druntime/cpu.m4
@@ -25,6 +25,12 @@ AC_DEFUN([DRUNTIME_CPU_SOURCES],
i[[34567]]86|x86_64)
druntime_target_cpu_parsed="x86"
;;
+ s390x)
+ druntime_target_cpu_parsed="s390x"
+ ;;
+ s390)
+ druntime_target_cpu_parsed="s390"
+ ;;
esac
AM_CONDITIONAL([DRUNTIME_CPU_AARCH64],
[test "$druntime_target_cpu_parsed" = "aarch64"])
@@ -38,6 +44,10 @@ AC_DEFUN([DRUNTIME_CPU_SOURCES],
[test "$druntime_target_cpu_parsed" = "powerpc64"])
AM_CONDITIONAL([DRUNTIME_CPU_X86],
[test "$druntime_target_cpu_parsed" = "x86"])
+ AM_CONDITIONAL([DRUNTIME_CPU_SYSTEMZ],
+ [test "$druntime_target_cpu_parsed" = "s390x"])
+ AM_CONDITIONAL([DRUNTIME_CPU_S390],
+ [test "$druntime_target_cpu_parsed" = "s390"])
])
diff --git a/libphobos/m4/druntime/libraries.m4 b/libphobos/m4/druntime/libraries.m4
index a7aab4d..9e8e210 100644
--- a/libphobos/m4/druntime/libraries.m4
+++ b/libphobos/m4/druntime/libraries.m4
@@ -3,32 +3,6 @@
#
-# DRUNTIME_LIBRARIES_THREAD
-# -------------------------
-# Allow specifying the thread library to link with or autodetect
-# Add thread library to LIBS if necessary.
-AC_DEFUN([DRUNTIME_LIBRARIES_THREAD],
-[
- enable_thread_lib=yes
- AC_ARG_ENABLE(thread-lib,
- AC_HELP_STRING([--enable-thread-lib=<arg>],
- [specify linker option for the system thread library (default: autodetect)]))
-
- AS_IF([test "x$enable_thread_lib" = "xyes"], [
- AC_SEARCH_LIBS([pthread_create], [pthread])
- ], [
- AS_IF([test "x$enable_thread_lib" = "xno"], [
- AC_MSG_CHECKING([for thread library])
- AC_MSG_RESULT([disabled])
- ], [
- AC_CHECK_LIB([$enable_thread_lib], [pthread_create], [], [
- AC_MSG_ERROR([Thread library not found])
- ])
- ])
- ])
-])
-
-
# DRUNTIME_LIBRARIES_DLOPEN
# -----------------------
# Autodetect and add dl library to LIBS if necessary.
diff --git a/libphobos/m4/druntime/os.m4 b/libphobos/m4/druntime/os.m4
index 74167aa..47d4c6a 100644
--- a/libphobos/m4/druntime/os.m4
+++ b/libphobos/m4/druntime/os.m4
@@ -52,33 +52,12 @@ AC_DEFUN([DRUNTIME_OS_DETECT],
])
-# DRUNTIME_OS_UNIX
-# ----------------
-# Add --enable-unix option or autodetects if system is unix
-# and create the DRUNTIME_OS_UNIX conditional.
-AC_DEFUN([DRUNTIME_OS_UNIX],
-[
- AC_REQUIRE([DRUNTIME_OS_DETECT])
- AC_ARG_ENABLE(unix,
- AC_HELP_STRING([--enable-unix],
- [enables Unix runtime (default: yes, for Unix targets)]),
- :,[enable_unix=auto])
-
- case "$druntime_cv_target_os" in
- aix*|*bsd*|cygwin*|darwin*|gnu*|linux*|skyos*|*solaris*|sysv*) d_have_unix=1 ;;
- esac
- if test -n "$d_have_unix" && test "$enable_unix" = auto ; then
- enable_unix=yes
- fi
- AM_CONDITIONAL([DRUNTIME_OS_UNIX], [test "$enable_unix" = "yes"])
-])
-
-
# DRUNTIME_OS_SOURCES
# -------------------
# Detect target OS and add DRUNTIME_OS_AIX DRUNTIME_OS_DARWIN
# DRUNTIME_OS_FREEBSD DRUNTIME_OS_LINUX DRUNTIME_OS_MINGW
# DRUNTIME_OS_SOLARIS DRUNTIME_OS_OPENBSD conditionals.
+# If the system is posix, add DRUNTIME_OS_POSIX conditional.
AC_DEFUN([DRUNTIME_OS_SOURCES],
[
AC_REQUIRE([DRUNTIME_OS_DETECT])
@@ -130,6 +109,14 @@ AC_DEFUN([DRUNTIME_OS_SOURCES],
[test "$druntime_target_os_parsed" = "mingw"])
AM_CONDITIONAL([DRUNTIME_OS_SOLARIS],
[test "$druntime_target_os_parsed" = "solaris"])
+
+ druntime_target_posix="no"
+ case "$druntime_cv_target_os" in
+ aix*|*bsd*|cygwin*|darwin*|gnu*|linux*|skyos*|*solaris*|sysv*)
+ druntime_target_posix="yes"
+ ;;
+ esac
+ AM_CONDITIONAL([DRUNTIME_OS_POSIX], [test "$druntime_target_posix" = "yes"])
])
diff --git a/libphobos/src/MERGE b/libphobos/src/MERGE
index c7e4878..7570cd9 100644
--- a/libphobos/src/MERGE
+++ b/libphobos/src/MERGE
@@ -1,4 +1,4 @@
-68cc18adbcdbf2a62cb85a5cb2a34236af2ab05a
+fb4f6a713f5b78742f93e072cff6a6c4ecf9323d
The first line of this file holds the git revision number of the last
merge done from the dlang/phobos repository.
diff --git a/libphobos/src/Makefile.am b/libphobos/src/Makefile.am
index 764e225..51e3f50 100644
--- a/libphobos/src/Makefile.am
+++ b/libphobos/src/Makefile.am
@@ -23,7 +23,9 @@ D_EXTRA_DFLAGS=-nostdinc -I $(srcdir) \
-I $(top_srcdir)/libdruntime -I ../libdruntime -I .
# D flags for compilation
-AM_DFLAGS=$(phobos_compiler_pic_flag)
+AM_DFLAGS= \
+ $(phobos_compiler_pic_flag) \
+ $(WARN_DFLAGS) $(CHECKING_DFLAGS)
# Install all D files
ALL_PHOBOS_INSTALL_DSOURCES = $(PHOBOS_DSOURCES)
@@ -40,8 +42,17 @@ libgphobos_la_SOURCES = $(ALL_PHOBOS_SOURCES)
libgphobos_la_LIBTOOLFLAGS =
libgphobos_la_LDFLAGS = -Wc,-nophoboslib,-dstartfiles,-B../libdruntime/gcc \
-version-info $(libtool_VERSION)
-libgphobos_la_LIBADD = ../libdruntime/libgdruntime.la $(LIBZ)
-libgphobos_la_DEPENDENCIES = libgphobos.spec
+libgphobos_la_LIBADD = \
+ ../libdruntime/libgdruntime_convenience.la $(LIBZ)
+libgphobos_la_DEPENDENCIES = \
+ ../libdruntime/libgdruntime_convenience.la libgphobos.spec
+
+# Also override library link commands: This is not strictly
+# required, but we want to record additional dependencies such
+# as pthread in the library
+libgphobos_la_LINK = $(LIBTOOL) --tag=D $(libgphobos_la_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(GDC) $(AM_CFLAGS) $(CFLAGS) \
+ $(libgphobos_la_LDFLAGS) $(LDFLAGS) -o $@
# Handles generated files as well
install-data-local:
diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in
index c30b66d..da9ba83 100644
--- a/libphobos/src/Makefile.in
+++ b/libphobos/src/Makefile.in
@@ -278,6 +278,7 @@ CCASFLAGS = @CCASFLAGS@
CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+CHECKING_DFLAGS = @CHECKING_DFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
@@ -343,6 +344,7 @@ SHELL = @SHELL@
SPEC_PHOBOS_DEPS = @SPEC_PHOBOS_DEPS@
STRIP = @STRIP@
VERSION = @VERSION@
+WARN_DFLAGS = @WARN_DFLAGS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
@@ -417,18 +419,6 @@ LTDCOMPILE = $(LIBTOOL) --tag=D $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(GDC) $(AM_DFLAGS)
-# Also override library link commands: This is not strictly
-# required, but we want to record additional dependencies such
-# as pthread in the library
-libgdruntime_la_LINK = $(LIBTOOL) --tag=D $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(GDC) $(AM_CFLAGS) $(CFLAGS) \
- $(libgdruntime_la_LDFLAGS) $(LDFLAGS) -o $@
-
-libgphobos_la_LINK = $(LIBTOOL) --tag=D $(libgphobos_la_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(GDC) $(AM_CFLAGS) $(CFLAGS) \
- $(libgphobos_la_LDFLAGS) $(LDFLAGS) -o $@
-
-
# Include D build rules
# Make sure GDC can find libdruntime and libphobos include files
@@ -437,7 +427,10 @@ D_EXTRA_DFLAGS = -nostdinc -I $(srcdir) \
# D flags for compilation
-AM_DFLAGS = $(phobos_compiler_pic_flag)
+AM_DFLAGS = \
+ $(phobos_compiler_pic_flag) \
+ $(WARN_DFLAGS) $(CHECKING_DFLAGS)
+
# Install all D files
ALL_PHOBOS_INSTALL_DSOURCES = $(PHOBOS_DSOURCES)
@@ -454,8 +447,20 @@ libgphobos_la_LIBTOOLFLAGS =
libgphobos_la_LDFLAGS = -Wc,-nophoboslib,-dstartfiles,-B../libdruntime/gcc \
-version-info $(libtool_VERSION)
-libgphobos_la_LIBADD = ../libdruntime/libgdruntime.la $(LIBZ)
-libgphobos_la_DEPENDENCIES = libgphobos.spec
+libgphobos_la_LIBADD = \
+ ../libdruntime/libgdruntime_convenience.la $(LIBZ)
+
+libgphobos_la_DEPENDENCIES = \
+ ../libdruntime/libgdruntime_convenience.la libgphobos.spec
+
+
+# Also override library link commands: This is not strictly
+# required, but we want to record additional dependencies such
+# as pthread in the library
+libgphobos_la_LINK = $(LIBTOOL) --tag=D $(libgphobos_la_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(GDC) $(AM_CFLAGS) $(CFLAGS) \
+ $(libgphobos_la_LDFLAGS) $(LDFLAGS) -o $@
+
# Source file definitions. Boring stuff, auto-generated with
# https://gist.github.com/jpf91/8744acebc9dcf1e9d1a35cdff20afbb2
diff --git a/libphobos/src/std/math.d b/libphobos/src/std/math.d
index dedfa20..5cc3a85 100644
--- a/libphobos/src/std/math.d
+++ b/libphobos/src/std/math.d
@@ -195,6 +195,38 @@ else version (X86)
private alias haveSSE = core.cpuid.sse;
}
+version (D_SoftFloat)
+{
+ // Some soft float implementations may support IEEE floating flags.
+ // The implementation here supports hardware flags only and is so currently
+ // only available for supported targets.
+}
+else version (X86_Any) version = IeeeFlagsSupport;
+else version (PPC_Any) version = IeeeFlagsSupport;
+else version (RISCV_Any) version = IeeeFlagsSupport;
+else version (MIPS_Any) version = IeeeFlagsSupport;
+else version (ARM_Any) version = IeeeFlagsSupport;
+
+// Struct FloatingPointControl is only available if hardware FP units are available.
+version (D_HardFloat)
+{
+ // FloatingPointControl.clearExceptions() depends on version IeeeFlagsSupport
+ version (IeeeFlagsSupport) version = FloatingPointControlSupport;
+}
+
+version (GNU)
+{
+ // The compiler can unexpectedly rearrange floating point operations and
+ // access to the floating point status flags when optimizing. This means
+ // ieeeFlags tests cannot be reliably checked in optimized code.
+ // See https://github.com/ldc-developers/ldc/issues/888
+}
+else
+{
+ version = IeeeFlagsUnittest;
+ version = FloatingPointControlUnittest;
+}
+
version (unittest)
{
import core.stdc.stdio; // : sprintf;
@@ -1817,19 +1849,9 @@ real exp(real x) @trusted pure nothrow @nogc
if (isNaN(x))
return x;
if (x > OF)
- {
- if (__ctfe)
- return real.infinity;
- else
- return real.max * copysign(real.max, real.infinity);
- }
+ return real.infinity;
if (x < UF)
- {
- if (__ctfe)
- return 0.0;
- else
- return real.min_normal * copysign(real.min_normal, 0.0);
- }
+ return 0.0;
// Express: e^^x = e^^g * 2^^n
// = e^^g * e^^(n * LOG2E)
@@ -2102,12 +2124,7 @@ L_largenegative:
// Special cases. Raises an overflow flag, except in the case
// for CTFE, where there are no hardware controls.
if (x > OF)
- {
- if (__ctfe)
- return real.infinity;
- else
- return real.max * copysign(real.max, real.infinity);
- }
+ return real.infinity;
if (x == 0.0)
return x;
if (x < UF)
@@ -2402,19 +2419,9 @@ private real exp2Impl(real x) @nogc @trusted pure nothrow
if (isNaN(x))
return x;
if (x > OF)
- {
- if (__ctfe)
- return real.infinity;
- else
- return real.max * copysign(real.max, real.infinity);
- }
+ return real.infinity;
if (x < UF)
- {
- if (__ctfe)
- return 0.0;
- else
- return real.min_normal * copysign(real.min_normal, 0.0);
- }
+ return 0.0;
// Separate into integer and fractional parts.
int n = cast(int) floor(x + 0.5);
@@ -2453,10 +2460,13 @@ private real exp2Impl(real x) @nogc @trusted pure nothrow
@system unittest
{
- FloatingPointControl ctrl;
- if (FloatingPointControl.hasExceptionTraps)
- ctrl.disableExceptions(FloatingPointControl.allExceptions);
- ctrl.rounding = FloatingPointControl.roundToNearest;
+ version (FloatingPointControlSupport)
+ {
+ FloatingPointControl ctrl;
+ if (FloatingPointControl.hasExceptionTraps)
+ ctrl.disableExceptions(FloatingPointControl.allExceptions);
+ ctrl.rounding = FloatingPointControl.roundToNearest;
+ }
static if (real.mant_dig == 113)
{
@@ -2519,49 +2529,42 @@ private real exp2Impl(real x) @nogc @trusted pure nothrow
const minEqualDecimalDigits = real.dig - 3;
real x;
- IeeeFlags f;
+ version (IeeeFlagsSupport) IeeeFlags f;
foreach (ref pair; exptestpoints)
{
- resetIeeeFlags();
+ version (IeeeFlagsSupport) resetIeeeFlags();
x = exp(pair[0]);
- f = ieeeFlags;
assert(equalsDigit(x, pair[1], minEqualDecimalDigits));
-
- version (IeeeFlagsSupport)
- {
- // Check the overflow bit
- if (x == real.infinity)
- {
- // don't care about the overflow bit if input was inf
- // (e.g., the LLVM intrinsic doesn't set it on Linux x86_64)
- assert(pair[0] == real.infinity || f.overflow);
- }
- else
- assert(!f.overflow);
- // Check the underflow bit
- assert(f.underflow == (fabs(x) < real.min_normal));
- // Invalid and div by zero shouldn't be affected.
- assert(!f.invalid);
- assert(!f.divByZero);
- }
}
+
// Ideally, exp(0) would not set the inexact flag.
// Unfortunately, fldl2e sets it!
// So it's not realistic to avoid setting it.
assert(exp(0.0L) == 1.0);
// NaN propagation. Doesn't set flags, bcos was already NaN.
- resetIeeeFlags();
- x = exp(real.nan);
- f = ieeeFlags;
- assert(isIdentical(abs(x), real.nan));
- assert(f.flags == 0);
+ version (IeeeFlagsSupport)
+ {
+ resetIeeeFlags();
+ x = exp(real.nan);
+ f = ieeeFlags;
+ assert(isIdentical(abs(x), real.nan));
+ assert(f.flags == 0);
- resetIeeeFlags();
- x = exp(-real.nan);
- f = ieeeFlags;
- assert(isIdentical(abs(x), real.nan));
- assert(f.flags == 0);
+ resetIeeeFlags();
+ x = exp(-real.nan);
+ f = ieeeFlags;
+ assert(isIdentical(abs(x), real.nan));
+ assert(f.flags == 0);
+ }
+ else
+ {
+ x = exp(real.nan);
+ assert(isIdentical(abs(x), real.nan));
+
+ x = exp(-real.nan);
+ assert(isIdentical(abs(x), real.nan));
+ }
x = exp(NaN(0x123));
assert(isIdentical(x, NaN(0x123)));
@@ -4678,6 +4681,10 @@ real remquo(real x, real y, out int n) @trusted nothrow @nogc /// ditto
assert(0, "remquo not implemented");
}
+
+version (IeeeFlagsSupport)
+{
+
/** IEEE exception status flags ('sticky bits')
These flags indicate that an exceptional floating-point condition has occurred.
@@ -4813,13 +4820,14 @@ private:
else
assert(0, "Not yet supported");
}
+
static void resetIeeeFlags() @nogc
{
version (GNU)
{
version (X86_Any)
{
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"fnclex";
}
@@ -4828,12 +4836,12 @@ private:
if (haveSSE)
{
uint mxcsr;
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"stmxcsr %0" : "=m" (mxcsr);
}
mxcsr &= ~EXCEPTIONS_MASK;
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"ldmxcsr %0" : : "m" (mxcsr);
}
@@ -4847,7 +4855,7 @@ private:
{
uint old = FloatingPointControl.getControlState();
old &= ~0b11111; // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0408i/Chdfifdc.html
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"vmsr FPSCR, %0" : : "r" (old);
}
@@ -4860,7 +4868,7 @@ private:
else
{
uint newValues = 0x0;
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"fsflags %0" : : "r" (newValues);
}
@@ -4872,7 +4880,7 @@ private:
else
version (InlineAsm_X86_Any)
{
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
fnclex;
}
@@ -4935,27 +4943,25 @@ public:
}
///
-version (GNU)
-{
- // ieeeFlags test disabled, see LDC Issue #888.
-}
-else
+version (IeeeFlagsUnittest)
@system unittest
{
static void func() {
int a = 10 * 10;
}
-
- real a=3.5;
+ pragma(inline, false) static void blockopt(ref real x) {}
+ real a = 3.5;
// Set all the flags to zero
resetIeeeFlags();
assert(!ieeeFlags.divByZero);
+ blockopt(a); // avoid constant propagation by the optimizer
// Perform a division by zero.
- a/=0.0L;
+ a /= 0.0L;
assert(a == real.infinity);
assert(ieeeFlags.divByZero);
+ blockopt(a); // avoid constant propagation by the optimizer
// Create a NaN
- a*=0.0L;
+ a *= 0.0L;
assert(ieeeFlags.invalid);
assert(isNaN(a));
@@ -4966,11 +4972,7 @@ else
assert(ieeeFlags == f);
}
-version (GNU)
-{
- // ieeeFlags test disabled, see LDC Issue #888.
-}
-else
+version (IeeeFlagsUnittest)
@system unittest
{
import std.meta : AliasSeq;
@@ -5017,27 +5019,6 @@ else
}
}
-version (X86_Any)
-{
- version = IeeeFlagsSupport;
-}
-else version (PPC_Any)
-{
- version = IeeeFlagsSupport;
-}
-else version (RISCV_Any)
-{
- version = IeeeFlagsSupport;
-}
-else version (MIPS_Any)
-{
- version = IeeeFlagsSupport;
-}
-else version (ARM_Any)
-{
- version = IeeeFlagsSupport;
-}
-
/// Set all of the floating-point status flags to false.
void resetIeeeFlags() @nogc { IeeeFlags.resetIeeeFlags(); }
@@ -5047,6 +5028,12 @@ void resetIeeeFlags() @nogc { IeeeFlags.resetIeeeFlags(); }
return IeeeFlags(IeeeFlags.getIeeeFlags());
}
+} // IeeeFlagsSupport
+
+
+version (FloatingPointControlSupport)
+{
+
/** Control the Floating point hardware
Change the IEEE754 floating-point rounding mode and the floating-point
@@ -5418,7 +5405,10 @@ private:
// Clear all pending exceptions
static void clearExceptions() @nogc
{
- resetIeeeFlags();
+ version (IeeeFlagsSupport)
+ resetIeeeFlags();
+ else
+ static assert(false, "Not implemented for this architecture");
}
// Read from the control register
@@ -5479,7 +5469,7 @@ private:
version (D_InlineAsm_X86)
{
short cont;
- asm nothrow @nogc
+ asm pure nothrow @nogc
{
xor EAX, EAX;
fstcw cont;
@@ -5490,7 +5480,7 @@ private:
version (D_InlineAsm_X86_64)
{
short cont;
- asm nothrow @nogc
+ asm pure nothrow @nogc
{
xor RAX, RAX;
fstcw cont;
@@ -5508,7 +5498,7 @@ private:
{
version (X86_Any)
{
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"fclex; fldcw %0" : : "m" (newState);
}
@@ -5517,7 +5507,7 @@ private:
if (haveSSE)
{
uint mxcsr;
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"stmxcsr %0" : "=m" (mxcsr);
}
@@ -5532,7 +5522,7 @@ private:
mxcsr &= ~(allExceptions << 7); // delete old masks
mxcsr |= (newState & allExceptions) << 7; // write new exception masks
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"ldmxcsr %0" : : "m" (mxcsr);
}
@@ -5540,7 +5530,7 @@ private:
}
else version (AArch64)
{
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"msr FPCR, %0;" : : "r" (newState);
}
@@ -5551,7 +5541,7 @@ private:
return;
else
{
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"vmsr FPSCR, %0" : : "r" (newState);
}
@@ -5563,7 +5553,7 @@ private:
return;
else
{
- asm pure nothrow @nogc
+ asm nothrow @nogc
{
"fscsr %0" : : "r" (newState);
}
@@ -5605,7 +5595,7 @@ private:
}
}
-version (D_HardFloat) @system unittest
+@system unittest
{
void ensureDefaults()
{
@@ -5642,46 +5632,64 @@ version (D_HardFloat) @system unittest
ensureDefaults();
}
-version (D_HardFloat) @system unittest // rounding
+version (FloatingPointControlUnittest)
+@system unittest // rounding
{
import std.meta : AliasSeq;
foreach (T; AliasSeq!(float, double, real))
{
- FloatingPointControl fpctrl;
-
- fpctrl.rounding = FloatingPointControl.roundUp;
- T u = 1;
- u += 0.1;
-
- fpctrl.rounding = FloatingPointControl.roundDown;
- T d = 1;
- d += 0.1;
+ /* Be careful with changing the rounding mode, it interferes
+ * with common subexpressions. Changing rounding modes should
+ * be done with separate functions that are not inlined.
+ */
- fpctrl.rounding = FloatingPointControl.roundToZero;
- T z = 1;
- z += 0.1;
+ {
+ static T addRound(T)(uint rm)
+ {
+ pragma(inline, false) static void blockopt(ref T x) {}
+ pragma(inline, false);
+ FloatingPointControl fpctrl;
+ fpctrl.rounding = rm;
+ T x = 1;
+ blockopt(x); // avoid constant propagation by the optimizer
+ x += 0.1;
+ return x;
+ }
- assert(u > d);
- assert(z == d);
+ T u = addRound!(T)(FloatingPointControl.roundUp);
+ T d = addRound!(T)(FloatingPointControl.roundDown);
+ T z = addRound!(T)(FloatingPointControl.roundToZero);
- fpctrl.rounding = FloatingPointControl.roundUp;
- u = -1;
- u -= 0.1;
+ assert(u > d);
+ assert(z == d);
+ }
- fpctrl.rounding = FloatingPointControl.roundDown;
- d = -1;
- d -= 0.1;
+ {
+ static T subRound(T)(uint rm)
+ {
+ pragma(inline, false) static void blockopt(ref T x) {}
+ pragma(inline, false);
+ FloatingPointControl fpctrl;
+ fpctrl.rounding = rm;
+ T x = -1;
+ blockopt(x); // avoid constant propagation by the optimizer
+ x -= 0.1;
+ return x;
+ }
- fpctrl.rounding = FloatingPointControl.roundToZero;
- z = -1;
- z -= 0.1;
+ T u = subRound!(T)(FloatingPointControl.roundUp);
+ T d = subRound!(T)(FloatingPointControl.roundDown);
+ T z = subRound!(T)(FloatingPointControl.roundToZero);
- assert(u > d);
- assert(z == u);
+ assert(u > d);
+ assert(z == u);
+ }
}
}
+} // FloatingPointControlSupport
+
/*********************************
* Determines if $(D_PARAM x) is NaN.
diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in
index 72e6d04..6f0eaf8 100644
--- a/libphobos/testsuite/Makefile.in
+++ b/libphobos/testsuite/Makefile.in
@@ -151,6 +151,7 @@ CCASFLAGS = @CCASFLAGS@
CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+CHECKING_DFLAGS = @CHECKING_DFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
@@ -216,6 +217,7 @@ SHELL = @SHELL@
SPEC_PHOBOS_DEPS = @SPEC_PHOBOS_DEPS@
STRIP = @STRIP@
VERSION = @VERSION@
+WARN_DFLAGS = @WARN_DFLAGS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
diff --git a/libphobos/testsuite/lib/libphobos.exp b/libphobos/testsuite/lib/libphobos.exp
index 3ac0ccb..7e6e53e 100644
--- a/libphobos/testsuite/lib/libphobos.exp
+++ b/libphobos/testsuite/lib/libphobos.exp
@@ -162,10 +162,6 @@ proc libphobos_init { args } {
append ld_library_path ":${gccdir}"
}
- if { [file exists "${blddir}/libdruntime/.libs/libgdruntime.${shlib_ext}"] } {
- append ld_library_path ":${blddir}/libdruntime/.libs"
- }
-
if { [file exists "${blddir}/src/.libs/libgphobos.${shlib_ext}"] } {
append ld_library_path ":${blddir}/src/.libs"
}
diff --git a/libphobos/testsuite/testsuite_flags.in b/libphobos/testsuite/testsuite_flags.in
index fa57de2..c5dcac2 100755
--- a/libphobos/testsuite/testsuite_flags.in
+++ b/libphobos/testsuite/testsuite_flags.in
@@ -28,7 +28,7 @@ case ${query} in
;;
--gdcflags)
GDCFLAGS_default="-fmessage-length=0 -fno-show-column"
- GDCFLAGS_config="@GDCFLAGSX@"
+ GDCFLAGS_config="@WARN_DFLAGS@ @GDCFLAGSX@ -fno-release -funittest"
echo ${GDCFLAGS_default} ${GDCFLAGS_config}
;;
--gdcpaths)
@@ -42,7 +42,6 @@ case ${query} in
--gdcldflags)
GDCLDFLAGS="-B${BUILD_DIR}/src
-B${BUILD_DIR}/libdruntime/gcc
- -L${BUILD_DIR}/libdruntime/.libs
-L${BUILD_DIR}/src/.libs"
echo ${GDCLDFLAGS}
;;