Re: bison segv under Cygwin 64 at fatal-signal.c:318

Brian Inglis <[email protected]> Sat, 18 Sep 2021 07:22:30 -0600
Newsgroups gmane.comp.lib.gnulib.bugs,gmane.comp.parsers.bison.bugs
Organization Systematic Software
Message-ID <[email protected]>
On 2021-09-17 14:25, Bruno Haible wrote:
> Brian Inglis wrote:
>>> Can you also try to build it through
>>>
>>>     gl_cv_have_weak=no ../configure -C && make && make check
>>>
>>> in a different subdirectory?
>>>
>>> Please send the config.log, config.cache, config.status, and
>>> gltests/test-suite.log for each run.
>>
>> Done and attached
> 
> Thanks! Indeed, gl_cv_have_weak=no appears to make the essential difference.
> Therefore, I'm applying this fix.
> 
> 
> 2021-09-17  Bruno Haible  <[email protected]>
> 
> 	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.
> 
> diff -w --git a/m4/threadlib.m4 b/m4/threadlib.m4
> index 37b797c18..6b43bbdfa 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,7 +84,15 @@ 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
> +    [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(
> @@ -116,6 +124,8 @@ int main ()
>                   [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 ;;

Patch would not apply as included gnulib and bison threadlib.m4 appear 
to be from July and August.
Respun and applied patch successfully to glm4/threadlib.m4.
Still did not change gnulib or bison builds to configure weak=no or 
check successfully.
Were there additional conditions required to ensure that was used?

Had to configure with explicit gl_cv_have_weak=no arg to successfully 
configure and run tests.

Please see attached tars for logs and config.*.

Patch also made no difference to bison build, but adding to CYGCONF_ARGS 
explicit gl_cv_have_weak=no allowed all tests to run:

* D, Java, 129: Output file name: `~!..., 150: Tabulations and multibyte 
characters, 283-287: syncline escapes, 647: LAC: Exploratory stack, were 
skipped;

* all but two others 672-673: Doxygen Public-Private Documentation were 
successful.

Please see attached bison...check.log.gz.

So the diagnosis and cure were correct and worked, but the patch did not 
seem to make any difference?

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.
[Data in binary units and prefixes, physical quantities in SI.]
bison-3.8.1-0-check.log.gz (application/x-gzip, 12.7 KB) - not displayed
gnulib-testdir-build.tar.xz (application/octet-stream, 36 KB) - not displayed
gnulib-testdir-weak-no.tar.xz (application/octet-stream, 35.7 KB) - not displayed