Matthew Flatt wrote at 05/23/2011 10:47 PM:
Neither the C stack or Scheme stack (yes, they are separate) seems
particularly large. There's one overflow of the Scheme stack, but
that's not surprising since it starts small and grows on demand.

I guess we're back to checking on the stack size. Maybe also
disassemble GC_clear_stack_inner() so we can be clear on what
part of the function is crashing?

Here's the function disassembly, and the instruction's source code line. At this point, there are a few things I can do in the application code to try to avoid this intermittent error condition, but I can't do much useful on the PLT internals side of debugging except be a remote typist for gdb.

gdb /usr/local/plt-4.2.5/bin/mzschemecgc core.28525
[[...]]
Program terminated with signal 11, Segmentation fault.
[[...]]
#0  0x00000000005655b6 in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:243

warning: Source file is more recent than executable.
243        BZERO(dummy, CLEAR_SIZE*sizeof(word));
(gdb) disassemble
Dump of assembler code for function GC_clear_stack_inner:
0x0000000000565590 <GC_clear_stack_inner+0>:    mov    %rbp,-0x10(%rsp)
0x0000000000565595 <GC_clear_stack_inner+5>:    mov    %r12,-0x8(%rsp)
0x000000000056559a <GC_clear_stack_inner+10>:    mov    %rsi,%rbp
0x000000000056559d <GC_clear_stack_inner+13>:    mov    %rbx,-0x18(%rsp)
0x00000000005655a2 <GC_clear_stack_inner+18>:    sub    $0x6c8,%rsp
0x00000000005655a9 <GC_clear_stack_inner+25>:    xor    %esi,%esi
0x00000000005655ab <GC_clear_stack_inner+27>:    mov    %rdi,%r12
0x00000000005655ae <GC_clear_stack_inner+30>:    mov    $0x6a8,%edx
0x00000000005655b3 <GC_clear_stack_inner+35>:    mov    %rsp,%rdi
0x00000000005655b6 <GC_clear_stack_inner+38>: callq 0x4261b0 <memset@plt>
0x00000000005655bb <GC_clear_stack_inner+43>:    cmp    %rbp,%rsp
0x00000000005655be <GC_clear_stack_inner+46>: jbe 0x5655cb <GC_clear_stack_inner+59>
0x00000000005655c0 <GC_clear_stack_inner+48>:    mov    %rbp,%rsi
0x00000000005655c3 <GC_clear_stack_inner+51>:    mov    %r12,%rdi
0x00000000005655c6 <GC_clear_stack_inner+54>: callq 0x565590 <GC_clear_stack_inner>
0x00000000005655cb <GC_clear_stack_inner+59>:    mov    %rsp,%rdi
0x00000000005655ce <GC_clear_stack_inner+62>:    callq  0x567b80 <GC_noop1>
0x00000000005655d3 <GC_clear_stack_inner+67>:    mov    %r12,%rax
0x00000000005655d6 <GC_clear_stack_inner+70>:    mov    0x6b0(%rsp),%rbx
0x00000000005655de <GC_clear_stack_inner+78>:    mov    0x6b8(%rsp),%rbp
0x00000000005655e6 <GC_clear_stack_inner+86>:    mov    0x6c0(%rsp),%r12
0x00000000005655ee <GC_clear_stack_inner+94>:    add    $0x6c8,%rsp
0x00000000005655f5 <GC_clear_stack_inner+101>: retq End of assembler dump.
(gdb) info locals
dummy = Cannot access memory at address 0x7fff2dd5ca20
(gdb) where
#0  0x00000000005655b6 in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:243
#1  0x00000000005655cb in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:245
#2  0x00000000005655cb in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:245
#3  0x00000000005655cb in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:245
#4  0x00000000005655cb in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:245
#5  0x00000000005655cb in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:245
#6  0x00000000005655cb in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:245
#7  0x00000000005655cb in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:245
#8  0x00000000005655cb in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:245
#9  0x00000000005655cb in GC_clear_stack_inner (arg=0x0,
limit=0x7fff2dd5ce30 <Address 0x7fff2dd5ce30 out of bounds>) at ./misc.c:245
#10 0x000000000056564b in GC_clear_stack (arg=0x0) at ./misc.c:291
#11 0x000000000056db58 in GC_generic_malloc_many (lb=2, k=0, result=0x7e7780) at ./mallocx.c:421 #12 0x000000000056e3f5 in GC_malloc_atomic (bytes=16) at ./thread_local_alloc.c:219
#13 0x000000000055ee7a in scheme_make_char (ch=12985) at ./char.c:146
#14 0x00000000005606a4 in integer_to_char (argc=1, argv=0x7fff2c5b7028) at ./char.c:248 #15 0x00000000004452b8 in scheme_do_eval (obj=0x909110, num_rands=1, rands=0x7fff2c5b7028, get_value=1)
   at ./eval.c:8825
[[...]]
#403 0x0000000000426e3e in main (argc=<value optimized out>, argv=<value optimized out>) at ./main.c:268
[[...]]
(gdb) print GC_mark_stack_size
$5 = 8192


--
http://www.neilvandyke.org/
_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to