[plt-dev] Re: Segfault in DrScheme and MzScheme

From: Paulo J. Matos (pocmatos at gmail.com)
Date: Tue Jul 14 04:25:25 EDT 2009

On Mon, 2009-07-13 at 19:26 -0400, Eli Barzilay wrote:
> On Jul 13, Paulo J. Matos wrote:
> > (gdb) run
> > Starting program: /home/pmatos/Applications/plt/plt-r15438d/bin/mzscheme
> > Welcome to MzScheme v4.2.0.6 [3m], Copyright (c) 2004-2009 PLT Scheme Inc.
> > 
> > Program received signal SIGSEGV, Segmentation fault.
> > 0x0000000000669c3d in scheme_gmp_tls_unload (s=0x7fd7e8e312b0, data=0x0)
> >     at /home/pmatos/Applications/plt/plt-svn/src/mzscheme/src/gmp/gmp.c:5810
> > 5810	  s[0] = 0;
> 
> Quoting Matthew (because the brown list server seems to not have this
> post):
> 
> | That SIGSEGV is actually a GC write barrier, and not a crash. You could
> | continue with
> | 
> |  (gdb) handle SIGSEGV nostop noprint
> |  (gdb) c
> 
> 

Thanks for the tip, however, if I do that, the program won't stop on the
real sigsegv either. It keeps going till it gets the sigabrt and by then
the backtrace is lost.
 gdb ~/Applications/plt/plt-r15438d/bin/mzscheme 
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show
copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu"...
(gdb) set args -t main.scm
(gdb) handle SIGSEGV nostop noprint
Signal        Stop	Print	Pass to program	Description
SIGSEGV       No	No	Yes		Segmentation fault
(gdb) c
The program is not being run.
(gdb) run
Starting program: /home/pmatos/Applications/plt/plt-r15438d/bin/mzscheme
-t main.scm
EBoC - Event-B Model Checker
---- Version:       0.1 ----
---- by: Paulo J. Matos ----

Running in mode esmc.
Timing for: Parsing (cpu 140, real 240, gc 0)
Timing for: Interpret Identifiers (cpu 270, real 303, gc 30)
SIGSEGV fault on 0x4c8

Program received signal SIGABRT, Aborted.
0x00007faea4daa645 in raise () from /lib/libc.so.6
(gdb) bt
#0  0x00007faea4daa645 in raise () from /lib/libc.so.6
#1  0x00007faea4dabb63 in abort () from /lib/libc.so.6
#2  0x0000000000676367 in fault_handler (sn=11, si=0x7fffad7730b0, 
    ctx=0x7fffad772f80)

at /home/pmatos/Applications/plt/plt-svn/src/mzscheme/gc2/sighand.c:49
#3  <signal handler called>
#4  0x00007faea081bc89 in ?? ()
#5  0x00007faea38699d5 in ?? ()
#6  0x00007fffad7733a0 in ?? ()
#7  0x0000000000000003 in ?? ()
#8  0x00007faea49edd58 in ?? ()
#9  0x00007faea12d79c8 in ?? ()
#10 0x00007faea49edd10 in ?? ()
#11 0x00007fffad773440 in ?? ()
#12 0x00007faea5746cbd in ?? ()
#13 0x00007fffad773440 in ?? ()
#14 0x00007faea093d869 in ?? ()
#15 0x0000000000000000 in ?? ()


Can I just continue a couple of times (if the number of gc barriers are
finite)?

Cheers,
Paulo Matos



Posted on the dev mailing list.