On Fri, Feb 08, 2013 at 07:08:05PM +0100, Gabriel Schnoering wrote: > And running various version of guile both with libgc 7.1-9.1, > problems still occur. > It seems that libgc will trigger some issue with signal handling and mach. > > Here are the gdb logs for the guile packed with Debian. > (not sure it is of any use as the issue occurs in another thread) > http://bpaste.net/show/9qIgjwFjyrYZUGn7FxJ0/ (GNU Guile 2.0.5-deb+1-3) > > And another one from 2.0.7 sources. > http://bpaste.net/show/WnMIobeRtRaWmJl1ncNg/ (Guile 2.0.7) > > Maybe Richard will be able to give more details about the issue.
Actually, it has nothing to do with Mach. What happens is that, when catching one of the SIGUSR signals (SIGUSR1 i guess), the process calls sigsuspend, waiting for the next (probably SIGUSR2). But when returning from the handler (in sigreturn), the sigcontext is NULL, which actually makes sigreturn return. This is prohibited, and catched by setting the stack frame to run the firewall function (which, by running the hlt instruction, causes the SIGILL signal). I guess we could reduce the case to a small test unit that calls sigsuspend in a (SA_SIGINFO) signal handler and see how it goes, in which case there is a bug in the signal handling code. See the following glibc files for reference : - sysdeps/mach/hurd/i386/trampoline.c - sysdeps/mach/hurd/i386/sigreturn.c -- Richard Braun