diff options
author | Bruno Haible <bruno@clisp.org> | 2021-09-17 22:22:50 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2021-09-17 22:22:50 +0200 |
commit | 7818455627c5e54813ac89924b8b67d0bc869146 (patch) | |
tree | f1ef55126546184464c7ac25085d7701177312ad | |
parent | bce94c07f9220c0a12d568f06674cb394556c64a (diff) | |
download | gnulib-7818455627c5e54813ac89924b8b67d0bc869146.tar.gz |
threadlib: Avoid crashes in thread-related functions on Cygwin 3.2.0.
Reported by Brian Inglis via Akim Demaille in
<https://lists.gnu.org/archive/html/bug-gnulib/2021-09/msg00063.html>.
* m4/threadlib.m4 (gl_WEAK_SYMBOLS): Force a "guessing no" result on
Cygwin.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | m4/threadlib.m4 | 62 |
2 files changed, 44 insertions, 26 deletions
@@ -1,3 +1,11 @@ +2021-09-17 Bruno Haible <bruno@clisp.org> + + threadlib: Avoid crashes in thread-related functions on Cygwin 3.2.0. + Reported by Brian Inglis via Akim Demaille in + <https://lists.gnu.org/archive/html/bug-gnulib/2021-09/msg00063.html>. + * m4/threadlib.m4 (gl_WEAK_SYMBOLS): Force a "guessing no" result on + Cygwin. + 2021-09-13 Bruno Haible <bruno@clisp.org> simple-atomic: Port to Oracle Studio 12.6. diff --git a/m4/threadlib.m4 b/m4/threadlib.m4 index 37b797c186..6b43bbdfa0 100644 --- a/m4/threadlib.m4 +++ b/m4/threadlib.m4 @@ -1,4 +1,4 @@ -# threadlib.m4 serial 31 +# threadlib.m4 serial 32 dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -84,38 +84,48 @@ AC_DEFUN([gl_WEAK_SYMBOLS], AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether imported symbols can be declared weak], [gl_cv_have_weak], - [gl_cv_have_weak=no - dnl First, test whether the compiler accepts it syntactically. - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[extern void xyzzy (); + [case "$host_os" in + cygwin*) + dnl On Cygwin 3.2.0 with gcc 10.2, the test below would succeed, but + dnl programs that use pthread_in_use() with weak symbol references + dnl crash miserably at runtime. + gl_cv_have_weak="guessing no" + ;; + *) + gl_cv_have_weak=no + dnl First, test whether the compiler accepts it syntactically. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[extern void xyzzy (); #pragma weak xyzzy]], - [[xyzzy();]])], - [gl_cv_have_weak=maybe]) - if test $gl_cv_have_weak = maybe; then - dnl Second, test whether it actually works. On Cygwin 1.7.2, with - dnl gcc 4.3, symbols declared weak always evaluate to the address 0. - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ + [[xyzzy();]])], + [gl_cv_have_weak=maybe]) + if test $gl_cv_have_weak = maybe; then + dnl Second, test whether it actually works. On Cygwin 1.7.2, with + dnl gcc 4.3, symbols declared weak always evaluate to the address 0. + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); }]])], - [gl_cv_have_weak=yes], - [gl_cv_have_weak=no], - [dnl When cross-compiling, assume that only ELF platforms support - dnl weak symbols. - AC_EGREP_CPP([Extensible Linking Format], - [#ifdef __ELF__ - Extensible Linking Format - #endif - ], - [gl_cv_have_weak="guessing yes"], - [gl_cv_have_weak="guessing no"]) - ]) - fi + [gl_cv_have_weak=yes], + [gl_cv_have_weak=no], + [dnl When cross-compiling, assume that only ELF platforms support + dnl weak symbols. + AC_EGREP_CPP([Extensible Linking Format], + [#ifdef __ELF__ + Extensible Linking Format + #endif + ], + [gl_cv_have_weak="guessing yes"], + [gl_cv_have_weak="guessing no"]) + ]) + fi + ;; + esac dnl But when linking statically, weak symbols don't work. case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; |