libphobos: Fix compilation dependencies on s390x-linux-musl

libphobos/ChangeLog:

	* configure: Regenerate.
	* configure.ac: Call DRUNTIME_LIBRARIES_UCONTEXT.
	* m4/druntime/libraries.m4 (DRUNTIME_LIBRARIES_UCONTEXT): Define to
	search libraries for swapcontext.
	* libdruntime/gcc/sections/elf_shared.d (getTLSRange): Always use
	__tls_get_addr on Musl.

Co-Authored-By: Mathias Lang <pro.mathias.lang@gmail.com>
This commit is contained in:
Iain Buclaw 2020-04-20 18:20:12 +02:00
parent 187bdbd564
commit ac1a0a388c
5 changed files with 111 additions and 1 deletions

View File

@ -1,3 +1,13 @@
2020-04-21 Mathias Lang <pro.mathias.lang@gmail.com>
Iain Buclaw <ibuclaw@gdcproject.org>
* configure: Regenerate.
* configure.ac: Call DRUNTIME_LIBRARIES_UCONTEXT.
* m4/druntime/libraries.m4 (DRUNTIME_LIBRARIES_UCONTEXT): Define to
search libraries for swapcontext.
* libdruntime/gcc/sections/elf_shared.d (getTLSRange): Always use
__tls_get_addr on Musl.
2020-04-20 Iain Buclaw <ibuclaw@gdcproject.org>
* configure: Regenerate.

73
libphobos/configure vendored
View File

@ -15047,6 +15047,79 @@ $as_echo "$druntime_cv_lib_sockets" >&6; }
LIBS="$LIBS $druntime_cv_lib_sockets"
# Keep this in sync with core/thread.d, set druntime_fiber_asm_external to
# "yes" for targets that have 'version = AsmExternal'.
druntime_fiber_asm_external=no
case "$target_cpu" in
aarch64* | \
arm* | \
i[34567]86|x86_64 | \
powerpc)
druntime_fiber_asm_external=yes
;;
esac
if test "$druntime_fiber_asm_external" = no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing swapcontext" >&5
$as_echo_n "checking for library containing swapcontext... " >&6; }
if ${ac_cv_search_swapcontext+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char swapcontext ();
int
main ()
{
return swapcontext ();
;
return 0;
}
_ACEOF
for ac_lib in '' c ucontext; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_swapcontext=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
if ${ac_cv_search_swapcontext+:} false; then :
break
fi
done
if ${ac_cv_search_swapcontext+:} false; then :
else
ac_cv_search_swapcontext=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_swapcontext" >&5
$as_echo "$ac_cv_search_swapcontext" >&6; }
ac_res=$ac_cv_search_swapcontext
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
else
as_fn_error $? "swapcontext required but not found" "$LINENO" 5
fi
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'

View File

@ -143,6 +143,7 @@ DRUNTIME_LIBRARIES_ATOMIC
DRUNTIME_LIBRARIES_BACKTRACE
DRUNTIME_LIBRARIES_DLOPEN
DRUNTIME_LIBRARIES_NET
DRUNTIME_LIBRARIES_UCONTEXT
DRUNTIME_LIBRARIES_ZLIB
DRUNTIME_INSTALL_DIRECTORIES

View File

@ -1084,7 +1084,9 @@ void[] getTLSRange(size_t mod, size_t sz) nothrow @nogc
// base offset
auto ti = tls_index(mod, 0);
version (IBMZ_Any)
version (CRuntime_Musl)
return (__tls_get_addr(&ti)-TLS_DTV_OFFSET)[0 .. sz];
else version (IBMZ_Any)
{
// IBM Z only provides __tls_get_offset instead of __tls_get_addr
// which returns an offset relative to the thread pointer.

View File

@ -212,3 +212,27 @@ AC_DEFUN([DRUNTIME_LIBRARIES_CLIB],
AC_SUBST(DCFG_HAVE_QSORT_R)
AC_LANG_POP([C])
])
# DRUNTIME_LIBRARIES_UCONTEXT
# ------------------------------
# Autodetect and add ucontext library to LIBS if necessary.
# This is only required if fiber_switchContext does not have
# its own internal asm implementation.
AC_DEFUN([DRUNTIME_LIBRARIES_UCONTEXT],
[
# Keep this in sync with core/thread.d, set druntime_fiber_asm_external to
# "yes" for targets that have 'version = AsmExternal'.
druntime_fiber_asm_external=no
case "$target_cpu" in
aarch64* | \
arm* | \
i[[34567]]86|x86_64 | \
powerpc)
druntime_fiber_asm_external=yes
;;
esac
if test "$druntime_fiber_asm_external" = no; then
AC_SEARCH_LIBS([swapcontext], [c ucontext], [],
AC_MSG_ERROR([swapcontext required but not found]))
fi
])