mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-26 14:24:18 +08:00
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:
parent
187bdbd564
commit
ac1a0a388c
@ -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
73
libphobos/configure
vendored
@ -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'
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
])
|
||||
|
Loading…
Reference in New Issue
Block a user