GNU bug report logs - #10235
guile 3.0.2 segfaults on FreeBSD 9

Previous Next

Package: guile;

Reported by: "Jim Pryor" <dubiousjim <at> gmail.com>

Date: Tue, 6 Dec 2011 17:27:02 UTC

Severity: normal

Tags: moreinfo

Done: Andy Wingo <wingo <at> pobox.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 10235 in the body.
You can then email your comments to 10235 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guile <at> gnu.org:
bug#10235; Package guile. (Tue, 06 Dec 2011 17:27:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to "Jim Pryor" <dubiousjim <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-guile <at> gnu.org. (Tue, 06 Dec 2011 17:27:03 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: "Jim Pryor" <dubiousjim <at> gmail.com>
To: bug-guile <at> gnu.org
Cc: Amatus <c11h15no2 <at> yahoo.com>
Subject: guile 3.0.2 segfaults on FreeBSD 9
Date: Tue, 06 Dec 2011 10:53:23 -0500
Hi I'm trying to build guile 3.0.2 on FreeBSD and am having some
problems. These are different than what's reported here
<http://savannah.gnu.org/bugs/?func=detailitem&item_id=33082>.

I'm running a custom kernel on FreeBSD 9-STABLE.

The latest packaging script is from guile 1.8.8 back in July 2011. Here
are some changes I made to the packaging script:

* added dependency on libunistring and the threaded version of the Boehm
GC library.
* added a patch to configure.ac, and requested the running of autoconf
and autoheader before the configure stage
* deleted some seemingly obsolete BSD patches (Specifically, I disabled
patches to Makefile.{am,in} and libguile/{eval,read,gc_os_dep}.c. I
folded a patch that formerly was applied to libguile/gc.c into a patch
to libguile/threads.c, which is where the code seems to have moved. And
I disabled patches to config.h.in and configure, since I think these
changes are now generated when we run autoconf and autoheader against
the patched configure.ac)
* had to remove one block from a patch to libguile/threads.c

The patch I made to configure.ac, and the remaining FreeBSD patches to a
few other files, are appended to the end of this email. Additionally,
the BSD packaging script runs this bit of code:

        REINPLACE_FILES=        libguile/smob.c libguile/gc.c \
                                libguile/mallocs.c libguile/gc-malloc.c

        post-extract:
                @find ${WRKSRC}/doc -name "*.info*" -delete

        post-patch:
                @cd ${WRKSRC} ; sed -e 's|<malloc\.h>|<stdlib.h>|g'
                ${REINPLACE_FILES}
                @sed -e 's|2.63|%%AUTOCONF_VERSION%%|g'
                ${WRKSRC}/aclocal.m4


I was able to compile all the .o files,  but was getting linking errors:

    CCLD   guile
    ./.libs/libguile-2.0.so: undefined reference to
    `GC_unregister_my_thread'
    ./.libs/libguile-2.0.so: undefined reference to `GC_pthread_create'
    ./.libs/libguile-2.0.so: undefined reference to
    `GC_register_my_thread'
    ./.libs/libguile-2.0.so: undefined reference to `GC_pthread_detach'
    gmake[3]: *** [guile] Error 1
    gmake[3]: Leaving directory
    `/usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile'
    gmake[2]: *** [all] Error 2
    gmake[2]: Leaving directory
    `/usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile'
    gmake[1]: *** [all-recursive] Error 1
    gmake[1]: Leaving directory
    `/usr/obj/usr/ports/lang/guile/work/guile-2.0.3'
    gmake: *** [all] Error 2
    *** Error code 1

    Stop in /usr/ports/lang/guile.


until I made this change in the configure.ac file:


    -PKG_CHECK_MODULES([BDW_GC], [bdw-gc])
    +PKG_CHECK_MODULES([BDW_GC], [bdw-gc-threaded])


Indeed the relevant symbols are located in the libraries installed by
our boehm-gc-threaded package, not the libraries installed by our
boehm-gc package.

OK, so with that change I can compile and link guile just fine. But when
I try to run it, I get a segfault. I noticed this because the `make`
process never even finishes. We get:

          SNARF  posix.doc
          SNARF  net_db.doc
          SNARF  socket.doc
          SNARF  regex-posix.doc
          GEN    guile-procedures.texi
        Segmentation fault (core dumped)
        gmake[3]: *** [guile-procedures.texi] Error 1
        gmake[3]: Leaving directory
        `/usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile'
        gmake[2]: *** [all] Error 2
        gmake[2]: Leaving directory
        `/usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile'
        gmake[1]: *** [all-recursive] Error 1
        gmake[1]: Leaving directory
        `/usr/obj/usr/ports/lang/guile/work/guile-2.0.3'
        gmake: *** [all] Error 2
        *** Error code 1

        Stop in /usr/ports/lang/guile.


And indeed if you just go to the libguile directory and execute the
build `guile` file manually, you get a segfault. Here is the backtrace:

$ libtool --mode=execute gdb guile guile.core
    GNU gdb 6.1.1 [FreeBSD]
    Copyright 2004 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and
    you are
    welcome to change it and/or distribute copies of it under certain
    conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for
    details.
    This GDB was configured as "amd64-marcel-freebsd"...(no debugging
    symbols found)...
    Core was generated by `guile'.
    Program terminated with signal 11, Segmentation fault.
    Reading symbols from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25...(no
    debugging symbols found)...done.
    Loaded symbols for
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    Reading symbols from /usr/local/lib/libgc-threaded.so.1...(no
    debugging symbols found)...done.
    Loaded symbols for /usr/local/lib/libgc-threaded.so.1
    Reading symbols from /usr/local/lib/libffi.so.5...done.
    Loaded symbols for /usr/local/lib/libffi.so.5
    Reading symbols from /usr/local/lib/libintl.so.9...done.
    Loaded symbols for /usr/local/lib/libintl.so.9
    Reading symbols from /usr/local/lib/libunistring.so.1...done.
    Loaded symbols for /usr/local/lib/libunistring.so.1
    Reading symbols from /usr/local/lib/libiconv.so.3...done.
    Loaded symbols for /usr/local/lib/libiconv.so.3
    Reading symbols from /usr/local/lib/libgmp.so.10...done.
    Loaded symbols for /usr/local/lib/libgmp.so.10
    Reading symbols from /usr/local/lib/libltdl.so.7...done.
    Loaded symbols for /usr/local/lib/libltdl.so.7
    Reading symbols from /lib/libcrypt.so.5...done.
    Loaded symbols for /lib/libcrypt.so.5
    Reading symbols from /lib/libm.so.5...done.
    Loaded symbols for /lib/libm.so.5
    Reading symbols from /lib/libthr.so.3...done.
    Loaded symbols for /lib/libthr.so.3
    Reading symbols from /lib/libc.so.7...done.
    Loaded symbols for /lib/libc.so.7
    Reading symbols from /libexec/ld-elf.so.1...done.
    Loaded symbols for /libexec/ld-elf.so.1
    #0  0x000000080091f8a5 in scm_c_vm_run () from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    [New Thread 802807400 (LWP 104574/guile)]
    (gdb) bt
    #0  0x000000080091f8a5 in scm_c_vm_run () from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    #1  0x0000000800895e17 in scm_async_click () from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    #2  0x00000008008f952f in scm_make_smob_type () from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    #3  0x0000000800890f42 in scm_init_arbiters () from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    #4  0x00000008008c72c5 in scm_i_init_guile () from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    #5  0x000000080091b094 in scm_i_init_thread_for_guile () from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    #6  0x000000080091b0f7 in with_guile_and_parent () from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    #7  0x0000000800bd3805 in GC_call_with_stack_base () from
    /usr/local/lib/libgc-threaded.so.1
    #8  0x000000080091af81 in scm_i_with_guile_and_parent () from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    #9  0x00000008008c7135 in scm_boot_guile () from
    /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
    #10 0x0000000000400af0 in main ()
    (gdb) 




Finally, here are the patches currently being applied to the guile 3.0.2
tarball before running autoconf/autoheader/configure.


----- files/patch-configure.ac -----
--- ./configure.ac.orig 2011-10-07 19:49:48.000000000 -0400
+++ ./configure.ac      2011-12-06 09:35:02.484201526 -0500
@@ -657,7 +657,7 @@
 #
 AC_CHECK_HEADERS([complex.h fenv.h io.h libc.h limits.h malloc.h
 memory.h process.h string.h \
 regex.h rxposix.h rx/rxposix.h sys/dir.h sys/ioctl.h sys/select.h \
-sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \
+sys/time.h sys/times.h sys/stdtypes.h sys/types.h \
 sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \
 direct.h langinfo.h nl_types.h machine/fpu.h poll.h sched.h])
 
@@ -775,6 +775,7 @@
 #   sys/param.h - not in mingw
 #   pthread.h - only available with pthreads.  ACX_PTHREAD doesn't
 #       check this specifically, we need it for the timespec test
 below.
+#   pthread_np.h - available on FreeBSD
 #   sethostname - the function itself check because it's not in mingw,
 #       the DECL is checked because Solaris 10 doens't have in any
 header
 #   hstrerror - on Tru64 5.1b the symbol is available in libc but the
@@ -782,7 +783,7 @@
 #   cuserid - on Tru64 5.1b the declaration is documented to be
 available
 #       only with `_XOPEN_SOURCE' or some such.
 #
-AC_CHECK_HEADERS([crypt.h netdb.h pthread.h sys/param.h sys/resource.h
sys/file.h sys/mman.h])
+AC_CHECK_HEADERS([crypt.h netdb.h pthread.h pthread_np.h sys/param.h
sys/resource.h sys/file.h sys/mman.h])
 AC_CHECK_FUNCS(chroot flock getlogin cuserid getpriority setpriority
 getpass sethostname gethostname)
 AC_CHECK_DECLS([sethostname, hstrerror, cuserid])
 
@@ -1253,7 +1254,7 @@
 # Boehm's GC library
 #
 #--------------------------------------------------------------------
-PKG_CHECK_MODULES([BDW_GC], [bdw-gc])
+PKG_CHECK_MODULES([BDW_GC], [bdw-gc-threaded])
 
 save_LIBS="$LIBS"
 LIBS="$BDW_GC_LIBS $LIBS"
@@ -1364,9 +1365,11 @@
     #         all; not present on MacOS X or Solaris 10
     #     pthread_get_stackaddr_np - "np" meaning "non portable" says
     it
     #         all; specific to MacOS X
+    #     pthread_attr_get_np - "np" meaning "non portable" says it
+    #         all; specific to FreeBSD
     #     pthread_sigmask - not available on mingw
     #
-    AC_CHECK_FUNCS(pthread_attr_getstack pthread_getattr_np
pthread_get_stackaddr_np pthread_sigmask)
+    AC_CHECK_FUNCS(pthread_attr_getstack pthread_getattr_np
pthread_get_stackaddr_np pthread_attr_get_np pthread_sigmask)
 
     # On past versions of Solaris, believe 8 through 10 at least, you
     # had to write "pthread_once_t foo = { PTHREAD_ONCE_INIT };".
@@ -1381,7 +1384,7 @@
     if test "$GCC" = "yes"; then
       # Since GCC only issues a warning for missing braces, so we need
       # `-Werror' to catch it.
-      CFLAGS="-Werror -Wmissing-braces $CFLAGS"
+      CFLAGS="-Wmissing-braces $CFLAGS"
     fi
 
     AC_CACHE_CHECK([whether PTHREAD_ONCE_INIT needs braces],
@@ -1544,7 +1547,7 @@
     # not be "warning free"
     if test "${GUILE_ERROR_ON_WARNING}" = yes
     then
-       POTENTIAL_GCC_CFLAGS="${POTENTIAL_GCC_CFLAGS} -Werror"
+       POTENTIAL_GCC_CFLAGS="${POTENTIAL_GCC_CFLAGS}"
 	enable_compile_warnings=no
     fi
 
----- files/patch-libguile___scm.h -----
--- libguile/__scm.h    2008-02-23 18:14:28.106264450 -0600
+++ libguile/__scm.h    2008-02-23 18:15:41.306005478 -0600
@@ -411,7 +411,8 @@
  * that all the state of the process is contained in the stack.
  */
 
-#if defined (sparc) || defined (__sparc__) || defined (__sparc)
+#if (defined (sparc) || defined (__sparc__) || defined (__sparc)) && \
+    (!defined(__FreeBSD__))
 # define SCM_FLUSH_REGISTER_WINDOWS asm("ta 3")
 #else
 # define SCM_FLUSH_REGISTER_WINDOWS /* empty */
----- files/patch-libguile_gen-scmconfig.c -----
--- libguile/gen-scmconfig.c    2008-02-23 21:38:39.310330888 -0600
+++ libguile/gen-scmconfig.c    2008-02-23 21:39:32.909873567 -0600
@@ -123,6 +123,7 @@
 
 #include "gen-scmconfig.h"
 
+#define _ANSI_SOURCE
 #include <stdio.h>
 #include <string.h>
 
----- files/patch-libguile_numbers.c -----
--- ./libguile/numbers.c.orig   2011-10-10 16:24:38.000000000 -0400
+++ ./libguile/numbers.c        2011-12-06 05:26:45.391199972 -0500
@@ -148,7 +148,7 @@
 
 
 #if defined (GUILE_I)
-#if defined HAVE_COMPLEX_DOUBLE
+#if defined HAVE_COMPLEX_DOUBLE && (defined HAVE_CLOG || defined
HAVE_CLOG10 || defined HAVE_CEXP || defined HAVE_USABLE_CSQRT) &&
defined (SCM_COMPLEX_VALUE) 
 
 /* For an SCM object Z which is a complex number (ie. satisfies
    SCM_COMPLEXP), return its value as a C level "complex double". */
----- files/patch-libguile_pthread-threads.h -----
--- libguile/pthread-threads.h  2008-02-27 10:31:41.564950412 -0600
+++ libguile/pthread-threads.h  2008-02-27 10:36:08.383652510 -0600
@@ -26,6 +26,9 @@
 */
 
 #include <pthread.h>
+#if HAVE_PTHREAD_NP_H
+# include <pthread_np.h>
+#endif
 #include <sched.h>
 
 /* Threads 
----- files/patch-libguile_threads.c -----
--- ./libguile/threads.c.orig   2011-10-07 19:49:48.000000000 -0400
+++ ./libguile/threads.c        2011-12-06 05:29:36.754202532 -0500
@@ -120,8 +120,15 @@
   void *start, *end;
   size_t size;
 
+#if HAVE_PTHREAD_ATTR_GET_NP
+  pthread_attr_init (&attr);
+  pthread_attr_get_np (pthread_self (), &attr);
+  pthread_attr_getstack (&attr, &start, &size);
+  pthread_attr_destroy (&attr);
+#elif HAVE_PTHREAD_GETATTR_NP
   pthread_getattr_np (pthread_self (), &attr);
   pthread_attr_getstack (&attr, &start, &size);
+#endif
   end = (char *)start + size;
 
 #if SCM_STACK_GROWS_UP
@@ -2200,6 +2207,20 @@
   return (void *) ctx->uc_mcontext.sc_ar_bsp;
 }
 # endif /* linux */
+# ifdef __FreeBSD__
+#  include <ucontext.h>
+void *
+scm_ia64_register_backing_store_base (void)
+{
+  return (void *)0x8000000000000000;
+}
+void *
+scm_ia64_ar_bsp (const void *opaque)
+{
+  const ucontext_t *ctx = opaque;
+  return (void *)(ctx->uc_mcontext.mc_special.bspstore +
ctx->uc_mcontext.mc_special.ndirty);
+}
+# endif /* __FreeBSD__ */
 #endif /* __ia64__ */
 
 
-- 
dubiousjim <at> gmail.com





Information forwarded to bug-guile <at> gnu.org:
bug#10235; Package guile. (Thu, 22 Dec 2011 15:38:01 GMT) Full text and rfc822 format available.

Message #8 received at 10235 <at> debbugs.gnu.org (full text, mbox):

From: Andy Wingo <wingo <at> pobox.com>
To: "Jim Pryor" <dubiousjim <at> gmail.com>
Cc: Amatus <c11h15no2 <at> yahoo.com>, 10235 <at> debbugs.gnu.org
Subject: Re: bug#10235: guile 2.0.3 segfaults on FreeBSD 9
Date: Thu, 22 Dec 2011 10:35:33 -0500
Hi Jim,

There are some packaging-specific things in your mail, one bug, and a
few FreeBSD-related things that we should probably fold into Guile.
I'll try to reply only to those things that we need to do in Guile.

On Tue 06 Dec 2011 10:53, "Jim Pryor" <dubiousjim <at> gmail.com> writes:

>         REINPLACE_FILES=        libguile/smob.c libguile/gc.c \
>                                 libguile/mallocs.c libguile/gc-malloc.c
>
>         post-patch:
>                 @cd ${WRKSRC} ; sed -e 's|<malloc\.h>|<stdlib.h>|g'

I have fixed these files to use stdlib.h instead of malloc.h.

>           GEN    guile-procedures.texi
>         Segmentation fault (core dumped)

That's a problem :)

> And indeed if you just go to the libguile directory and execute the
> build `guile` file manually, you get a segfault. Here is the backtrace:
>
>     #0  0x000000080091f8a5 in scm_c_vm_run () from
>     /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
>     [New Thread 802807400 (LWP 104574/guile)]
>     (gdb) bt
>     #0  0x000000080091f8a5 in scm_c_vm_run () from
>     /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
>     #1  0x0000000800895e17 in scm_async_click () from
>     /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
>     #2  0x00000008008f952f in scm_make_smob_type () from
>     /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25

Can you get a backtrace with symbols?

Also, once you have built a version with symbols, I would like to see
what is triggering this async, and what the error is.  So if you could
run:

  GUILE_AUTO_COMPILE=0 libtool --mode=execute gdb libguile/guile

and see what happens, that would be great.  You will likely be able to
reproduce this error that way.

> --- ./configure.ac.orig 2011-10-07 19:49:48.000000000 -0400
> +++ ./configure.ac      2011-12-06 09:35:02.484201526 -0500
> @@ -657,7 +657,7 @@
>  #
>  AC_CHECK_HEADERS([complex.h fenv.h io.h libc.h limits.h malloc.h
>  memory.h process.h string.h \
>  regex.h rxposix.h rx/rxposix.h sys/dir.h sys/ioctl.h sys/select.h \
> -sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \
> +sys/time.h sys/times.h sys/stdtypes.h sys/types.h \
>  sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \
>  direct.h langinfo.h nl_types.h machine/fpu.h poll.h sched.h])

Why did you need to do this?

> +#   pthread_np.h - available on FreeBSD

I applied this and the supporting code, with some small changes.
Thanks.  I also applied the itanium patch.

> -#if defined (sparc) || defined (__sparc__) || defined (__sparc)
> +#if (defined (sparc) || defined (__sparc__) || defined (__sparc)) && \
> +    (!defined(__FreeBSD__))
>  # define SCM_FLUSH_REGISTER_WINDOWS asm("ta 3")
>  #else
>  # define SCM_FLUSH_REGISTER_WINDOWS /* empty */

Why is this?

> ----- files/patch-libguile_gen-scmconfig.c -----
> --- libguile/gen-scmconfig.c    2008-02-23 21:38:39.310330888 -0600
> +++ libguile/gen-scmconfig.c    2008-02-23 21:39:32.909873567 -0600
> @@ -123,6 +123,7 @@
>  
>  #include "gen-scmconfig.h"
>  
> +#define _ANSI_SOURCE
>  #include <stdio.h>
>  #include <string.h>
>  

Why is this?

> ----- files/patch-libguile_numbers.c -----
> --- ./libguile/numbers.c.orig   2011-10-10 16:24:38.000000000 -0400
> +++ ./libguile/numbers.c        2011-12-06 05:26:45.391199972 -0500
> @@ -148,7 +148,7 @@
>  
>  
>  #if defined (GUILE_I)
> -#if defined HAVE_COMPLEX_DOUBLE
> +#if defined HAVE_COMPLEX_DOUBLE && (defined HAVE_CLOG || defined
> HAVE_CLOG10 || defined HAVE_CEXP || defined HAVE_USABLE_CSQRT) &&
> defined (SCM_COMPLEX_VALUE) 
>  
>  /* For an SCM object Z which is a complex number (ie. satisfies
>     SCM_COMPLEXP), return its value as a C level "complex double". */

Why is this?

OK, I think that's all that we need to do in Guile.  If you can get back
to me with some explanations on these patches and a transcript of your
debugging session, that would be great.  Also, if you are able to build
from git, you will find some of your changes incorporated there.

Thanks!

Andy
-- 
http://wingolog.org/




Information forwarded to bug-guile <at> gnu.org:
bug#10235; Package guile. (Thu, 22 Dec 2011 21:44:02 GMT) Full text and rfc822 format available.

Message #11 received at 10235 <at> debbugs.gnu.org (full text, mbox):

From: Andy Wingo <wingo <at> pobox.com>
To: "Jim Pryor" <dubiousjim <at> gmail.com>
Cc: 10235 <at> debbugs.gnu.org
Subject: Re: bug#10235: guile 2.0.3 segfaults on FreeBSD 9
Date: Thu, 22 Dec 2011 16:41:16 -0500
Hi Jim

Thanks for the reply.  Let's keep the bug in the Cc.  (Sending again
with the bug on the Cc this time.)  There is no rush on this; I'm happy
to work asynchronously.

The git repo is indeed at http://git.savannah.gnu.org/cgit/guile.git;
use the stable-2.0 branch, though.

Cheers,

Andy

On Thu 22 Dec 2011 10:55, "Jim Pryor" <dubiousjim <at> gmail.com> writes:

> Hi Andy, thanks for the email. I will get back to you about this as soon
> as I have some time to look into it again---which I fear won't be
> immediately.
>
> Some quick replies below.
>
>
> On Thu, Dec 22, 2011, at 10:35 AM, Andy Wingo wrote:
>> Hi Jim,
>> 
>> There are some packaging-specific things in your mail, one bug, and a
>> few FreeBSD-related things that we should probably fold into Guile.
>> I'll try to reply only to those things that we need to do in Guile.
>> 
>> On Tue 06 Dec 2011 10:53, "Jim Pryor" <dubiousjim <at> gmail.com> writes:
>> 
>> >         REINPLACE_FILES=        libguile/smob.c libguile/gc.c \
>> >                                 libguile/mallocs.c libguile/gc-malloc.c
>> >
>> >         post-patch:
>> >                 @cd ${WRKSRC} ; sed -e 's|<malloc\.h>|<stdlib.h>|g'
>> 
>> I have fixed these files to use stdlib.h instead of malloc.h.
>> 
>> >           GEN    guile-procedures.texi
>> >         Segmentation fault (core dumped)
>> 
>> That's a problem :)
>> 
>> > And indeed if you just go to the libguile directory and execute the
>> > build `guile` file manually, you get a segfault. Here is the backtrace:
>> >
>> >     #0  0x000000080091f8a5 in scm_c_vm_run () from
>> >     /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
>> >     [New Thread 802807400 (LWP 104574/guile)]
>> >     (gdb) bt
>> >     #0  0x000000080091f8a5 in scm_c_vm_run () from
>> >     /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
>> >     #1  0x0000000800895e17 in scm_async_click () from
>> >     /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
>> >     #2  0x00000008008f952f in scm_make_smob_type () from
>> >     /usr/obj/usr/ports/lang/guile/work/guile-2.0.3/libguile/.libs/libguile-2.0.so.25
>> 
>> Can you get a backtrace with symbols?
>
> OK, I will do that.
>
>> Also, once you have built a version with symbols, I would like to see
>> what is triggering this async, and what the error is.  So if you could
>> run:
>> 
>>   GUILE_AUTO_COMPILE=0 libtool --mode=execute gdb libguile/guile
>> 
>> and see what happens, that would be great.  You will likely be able to
>> reproduce this error that way.
>> 
>> > --- ./configure.ac.orig 2011-10-07 19:49:48.000000000 -0400
>> > +++ ./configure.ac      2011-12-06 09:35:02.484201526 -0500
>> > @@ -657,7 +657,7 @@
>> >  #
>> >  AC_CHECK_HEADERS([complex.h fenv.h io.h libc.h limits.h malloc.h
>> >  memory.h process.h string.h \
>> >  regex.h rxposix.h rx/rxposix.h sys/dir.h sys/ioctl.h sys/select.h \
>> > -sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \
>> > +sys/time.h sys/times.h sys/stdtypes.h sys/types.h \
>> >  sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \
>> >  direct.h langinfo.h nl_types.h machine/fpu.h poll.h sched.h])
>> 
>> Why did you need to do this?
>
> I don't know. Many of these patches are carried over from the existing
> port on FreeBSD. (I think that's 1.8.8.) I'll see if I can get the
> maintainer to explain, or experiment with omitting the patches and
> seeing what breaks.
>
>> 
>> > +#   pthread_np.h - available on FreeBSD
>> 
>> I applied this and the supporting code, with some small changes.
>> Thanks.  I also applied the itanium patch.
>> 
>> > -#if defined (sparc) || defined (__sparc__) || defined (__sparc)
>> > +#if (defined (sparc) || defined (__sparc__) || defined (__sparc)) && \
>> > +    (!defined(__FreeBSD__))
>> >  # define SCM_FLUSH_REGISTER_WINDOWS asm("ta 3")
>> >  #else
>> >  # define SCM_FLUSH_REGISTER_WINDOWS /* empty */
>> 
>> Why is this?
>
>
> I don't know, existing patch in the FreeBSD port that I just updated to
> apply cleanly to the new version. As before, I'll try to find out more.
> I don't have a sparc machine so I can't test what happens if the patch
> is omitted.
>
>
>> 
>> > ----- files/patch-libguile_gen-scmconfig.c -----
>> > --- libguile/gen-scmconfig.c    2008-02-23 21:38:39.310330888 -0600
>> > +++ libguile/gen-scmconfig.c    2008-02-23 21:39:32.909873567 -0600
>> > @@ -123,6 +123,7 @@
>> >  
>> >  #include "gen-scmconfig.h"
>> >  
>> > +#define _ANSI_SOURCE
>> >  #include <stdio.h>
>> >  #include <string.h>
>> >  
>> 
>> Why is this?
>
> I think I had to add that to get the build to work on FreeBSD. I'll try
> to get details for you.
>
>
>> 
>> > ----- files/patch-libguile_numbers.c -----
>> > --- ./libguile/numbers.c.orig   2011-10-10 16:24:38.000000000 -0400
>> > +++ ./libguile/numbers.c        2011-12-06 05:26:45.391199972 -0500
>> > @@ -148,7 +148,7 @@
>> >  
>> >  
>> >  #if defined (GUILE_I)
>> > -#if defined HAVE_COMPLEX_DOUBLE
>> > +#if defined HAVE_COMPLEX_DOUBLE && (defined HAVE_CLOG || defined
>> > HAVE_CLOG10 || defined HAVE_CEXP || defined HAVE_USABLE_CSQRT) &&
>> > defined (SCM_COMPLEX_VALUE) 
>> >  
>> >  /* For an SCM object Z which is a complex number (ie. satisfies
>> >     SCM_COMPLEXP), return its value as a C level "complex double". */
>> 
>> Why is this?
>
>
> Ditto, I'll try to get details.
>
>
>> 
>> OK, I think that's all that we need to do in Guile.  If you can get back
>> to me with some explanations on these patches and a transcript of your
>> debugging session, that would be great.  Also, if you are able to build
>> from git, you will find some of your changes incorporated there.
>
> Sure, I'll use git. I assume this is the repo at
> <http://git.savannah.gnu.org/cgit/guile.git/>?

-- 
http://wingolog.org/




Added tag(s) moreinfo. Request was from ludo <at> gnu.org (Ludovic Courtès) to control <at> debbugs.gnu.org. (Tue, 27 Nov 2012 23:08:01 GMT) Full text and rfc822 format available.

Reply sent to Andy Wingo <wingo <at> pobox.com>:
You have taken responsibility. (Sun, 10 Mar 2013 21:16:02 GMT) Full text and rfc822 format available.

Notification sent to "Jim Pryor" <dubiousjim <at> gmail.com>:
bug acknowledged by developer. (Sun, 10 Mar 2013 21:16:03 GMT) Full text and rfc822 format available.

Message #18 received at 10235-close <at> debbugs.gnu.org (full text, mbox):

From: Andy Wingo <wingo <at> pobox.com>
To: 10235-close <at> debbugs.gnu.org
Subject: Re: bug#10235: guile 2.0.3 segfaults on FreeBSD 9
Date: Sun, 10 Mar 2013 22:14:21 +0100
Closing this report due to lack of information.  Please file a new bug
with new build issues.  Thanks!

Andy
-- 
http://wingolog.org/




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 08 Apr 2013 11:24:06 GMT) Full text and rfc822 format available.

This bug report was last modified 11 years and 29 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.