[Openmcl-devel] debugging a segfault
Gary Byers
gb at clozure.com
Mon Nov 2 12:12:45 PST 2009
Lisp faulted trying to access some low-level data associated with
a lisp process (possibly in order to print the process.)
You tried to do a backtrace, and the lisp kernel faulted trying
to access the same information.
My best guess is that we're trying to print information about
the dynamic state of a thread (its suspend-count) after that
thread has exited (or, perhaps, while it's exiting.)
Doing this safely (keeping the thread from exiting while we're
printing information about it) is certainly possible - we do
that while printing the PROCESS-WHOSTATE - but the whole idea
of printing dynamic state information is meaningless. (At
best, it means "at some recent point in the past, the thread
had a whostate of X and a suspend-count of Y, but that doesn't
necessarily mean anything about its current state.")
On Mon, 2 Nov 2009, Jared C. Davis wrote:
> Hi,
>
> I'm running into a reproducible segfault during save-application on
> CCL 1.4-r13157M (and at least some previous versions) on linux
> x86_64.
>
> I believe I have successfully followed the instructions for getting a
> backtrace in GDB, but I could be wrong. :)
>
> Here is what I get:
>
> CCL terminal:
>
>> Error: Fault during read of memory address #x7F60E68B78B8
>> While executing: CCL::LISP-THREAD-SUSPEND-COUNT, in process Initial(0).
>> Type :POP to abort, :R for a list of available restarts.
>> Type :? for other options.
>
> 1 > :b
> *(7F56A25D5BF0) : 0 (LISP-THREAD-SUSPEND-COUNT #<LISP-THREAD
> liexception in foreign context
> Exception occurred while executing foreign code
> at atomic_incf_by + 16
> ? for help
> [15979] Clozure CL kernel debugger: r
> %rax = 0x0000000000000000 %r8 = 0x0000000000000000
> %rcx = 0x0000000000000000 %r9 = 0x00007fff56261180
> %rdx = 0x000030004001518b %r10 = 0x00007f56a31ee6f0
> %rbx = 0x00007f60e68b77c0 %r11 = 0x0000000000000246
> %rsp = 0x00007fff56260c80 %r12 = 0x00007f60e68b78b8
> %rbp = 0x00007fff56261228 %r13 = 0x0000000000000001
> %rsi = 0x0000000000000001 %r14 = 0x0000000000000004
> %rdi = 0x00007f60e68b78b8 %r15 = 0x00007fff56261530
> %rip = 0x000000000041e230 %rflags = 0x00010202
>
>
> GDB terminal:
>
> $ gdb /home/jared/ccl/lx86cl64
> (gdb) source /home/jared/ccl/lisp-kernel/linuxx8664/.gdbinit
> (gdb) attach 15979
> Attaching to program: /home/jared/ccl/lx86cl64, process 15979
> ...
> (gdb) br *0x000000000041e230
> Breakpoint 2 at 0x41e230: file ../thread_manager.c, line 191.
> (gdb) continue
> Continuing.
>
> Breakpoint 2, atomic_incf_by (ptr=0x7f60e68b78b8, by=1)
> at ../thread_manager.c:191
> 191 old = *ptr;
> 1: x/i $pc
> 0x41e230 <atomic_incf_by+16>: mov (%r12),%rbx
> (gdb) bt
> #0 atomic_incf_by (ptr=0x7f60e68b78b8, by=1) at ../thread_manager.c:191
> #1 0x000000000041e3b0 in suspend_tcr (tcr=0x7f60e68b77c0)
> at ../thread_manager.c:2074
> #2 0x000000000041f49b in lisp_suspend_tcr (tcr=0x7f60e68b77c0)
> at ../thread_manager.c:2156
> #3 0x000000000041cdf6 in handle_exception (signum=<value optimized out>,
> info=0x1, context=0x7fff56261180, tcr=0x7f56a31ee6f0, old_valence=0)
> at ../x86-exceptions.c:1105
> #4 0x000000000041d229 in signal_handler (signum=4, info=0x7fff56261530,
> context=0x7fff56261180) at ../x86-exceptions.c:1301
> #5 <signal handler called>
>
>
> At this point I seem in over my head.
>
> Thanks,
> Jared
>
> --
> Jared C. Davis <jared at cs.utexas.edu>
> 11410 Windermere Meadows
> Austin, TX 78759
> http://www.cs.utexas.edu/users/jared/
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel
>
>
More information about the Openmcl-devel
mailing list