summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/gcc/11.2.0/0010-libstdc-Check-for-TLS-support-on-mingw-cross-compile.patch251
1 files changed, 251 insertions, 0 deletions
diff --git a/packages/gcc/11.2.0/0010-libstdc-Check-for-TLS-support-on-mingw-cross-compile.patch b/packages/gcc/11.2.0/0010-libstdc-Check-for-TLS-support-on-mingw-cross-compile.patch
new file mode 100644
index 0000000..a4b4ec2
--- /dev/null
+++ b/packages/gcc/11.2.0/0010-libstdc-Check-for-TLS-support-on-mingw-cross-compile.patch
@@ -0,0 +1,251 @@
+From cc1e28878a228b6c4a0872e56d97ac88971b7725 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= <hugo@beauzee.fr>
+Date: Tue, 14 Sep 2021 16:41:37 +0100
+Subject: [PATCH] libstdc++: Check for TLS support on mingw cross-compilers
+
+Native mingw builds enable TLS, but crosses don't because we don't use
+GCC_CHECK_TLS in the cross-compiler config.
+
+libstdc++-v3/ChangeLog:
+
+ * crossconfig.m4: Check for TLS support on mingw.
+ * configure: Regenerate.
+---
+ libstdc++-v3/configure | 208 ++++++++++++++++++++++++++++++++++++
+ libstdc++-v3/crossconfig.m4 | 1 +
+ 2 files changed, 209 insertions(+)
+
+diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
+index 13d52eb0c0e..c1aea827070 100755
+--- a/libstdc++-v3/configure
++++ b/libstdc++-v3/configure
+@@ -60242,6 +60242,214 @@ _ACEOF
+ fi
+ done
+
++
++
++ # Check whether --enable-tls was given.
++if test "${enable_tls+set}" = set; then :
++ enableval=$enable_tls;
++ case "$enableval" in
++ yes|no) ;;
++ *) as_fn_error $? "Argument to enable/disable tls must be yes or no" "$LINENO" 5 ;;
++ esac
++
++else
++ enable_tls=yes
++fi
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target supports thread-local storage" >&5
++$as_echo_n "checking whether the target supports thread-local storage... " >&6; }
++if ${gcc_cv_have_tls+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++
++ if test "$cross_compiling" = yes; then :
++ if test x$gcc_no_link = xyes; then
++ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
++fi
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++__thread int a; int b; int main() { return a = b; }
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ chktls_save_LDFLAGS="$LDFLAGS"
++ case $host in
++ *-*-linux* | -*-uclinuxfdpic*)
++ LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
++ ;;
++ esac
++ chktls_save_CFLAGS="$CFLAGS"
++ CFLAGS="-fPIC $CFLAGS"
++ if test x$gcc_no_link = xyes; then
++ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
++fi
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++int f() { return 0; }
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ if test x$gcc_no_link = xyes; then
++ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
++fi
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++__thread int a; int b; int f() { return a = b; }
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ gcc_cv_have_tls=yes
++else
++ gcc_cv_have_tls=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++else
++ gcc_cv_have_tls=yes
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ CFLAGS="$chktls_save_CFLAGS"
++ LDFLAGS="$chktls_save_LDFLAGS"
++else
++ gcc_cv_have_tls=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++
++
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++__thread int a; int b; int main() { return a = b; }
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ chktls_save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="-static $LDFLAGS"
++ if test x$gcc_no_link = xyes; then
++ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
++fi
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++int main() { return 0; }
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ if test "$cross_compiling" = yes; then :
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error $? "cannot run test program while cross compiling
++See \`config.log' for more details" "$LINENO" 5; }
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++__thread int a; int b; int main() { return a = b; }
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ gcc_cv_have_tls=yes
++else
++ gcc_cv_have_tls=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++else
++ gcc_cv_have_tls=yes
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ LDFLAGS="$chktls_save_LDFLAGS"
++ if test $gcc_cv_have_tls = yes; then
++ chktls_save_CFLAGS="$CFLAGS"
++ thread_CFLAGS=failed
++ for flag in '' '-pthread' '-lpthread'; do
++ CFLAGS="$flag $chktls_save_CFLAGS"
++ if test x$gcc_no_link = xyes; then
++ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
++fi
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <pthread.h>
++ void *g(void *d) { return NULL; }
++int
++main ()
++{
++pthread_t t; pthread_create(&t,NULL,g,NULL);
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ thread_CFLAGS="$flag"
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ if test "X$thread_CFLAGS" != Xfailed; then
++ break
++ fi
++ done
++ CFLAGS="$chktls_save_CFLAGS"
++ if test "X$thread_CFLAGS" != Xfailed; then
++ CFLAGS="$thread_CFLAGS $chktls_save_CFLAGS"
++ if test "$cross_compiling" = yes; then :
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error $? "cannot run test program while cross compiling
++See \`config.log' for more details" "$LINENO" 5; }
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <pthread.h>
++ __thread int a;
++ static int *volatile a_in_other_thread;
++ static void *
++ thread_func (void *arg)
++ {
++ a_in_other_thread = &a;
++ return (void *)0;
++ }
++int
++main ()
++{
++pthread_t thread;
++ void *thread_retval;
++ int *volatile a_in_main_thread;
++ a_in_main_thread = &a;
++ if (pthread_create (&thread, (pthread_attr_t *)0,
++ thread_func, (void *)0))
++ return 0;
++ if (pthread_join (thread, &thread_retval))
++ return 0;
++ return (a_in_other_thread == a_in_main_thread);
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ gcc_cv_have_tls=yes
++else
++ gcc_cv_have_tls=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++ CFLAGS="$chktls_save_CFLAGS"
++ fi
++ fi
++else
++ gcc_cv_have_tls=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_have_tls" >&5
++$as_echo "$gcc_cv_have_tls" >&6; }
++ if test "$enable_tls $gcc_cv_have_tls" = "yes yes"; then
++
++$as_echo "#define HAVE_TLS 1" >>confdefs.h
++
++ fi
+ ;;
+ *-netbsd* | *-openbsd*)
+ SECTION_FLAGS='-ffunction-sections -fdata-sections'
+diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4
+index ff44d5ae019..ae5283b7ad3 100644
+--- a/libstdc++-v3/crossconfig.m4
++++ b/libstdc++-v3/crossconfig.m4
+@@ -204,6 +204,7 @@ case "${host}" in
+ GLIBCXX_CHECK_STDLIB_SUPPORT
+ AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc)
+ AC_CHECK_FUNCS(_wfopen)
++ GCC_CHECK_TLS
+ ;;
+ *-netbsd* | *-openbsd*)
+ SECTION_FLAGS='-ffunction-sections -fdata-sections'
+--
+2.33.0.windows.2
+