[Mono-dev] GC segfault on ARM
briank at marakicorp.com
Thu Aug 18 15:44:33 EDT 2005
Tomi Valkeinen wrote:
> Hi again,
>>> currently have a functional big endian ARM linux system that I have
>>> to successfully build the ARM JIT. However, upon attempting to run a
>>> CIL executable, mono immediately segfaults. A backtrace indicates that
>>> the segfault occurs in the Boehm GC:
>>> Program received signal SIGSEGV, Segmentation fault.
>>> [Switching to Thread 16384 (LWP 32700)]
>>> GC_push_all_eager (bottom=0x0, top=0x1990a8 "") at mark.c:1468
>>> 1468 q = *p;
>>> (gdb) bt
>>> #0 GC_push_all_eager (bottom=0x0, top=0x1990a8 "") at mark.c:1468
>>> #1 0x000b9ef8 in pthread_push_all_stacks () at
>>> #2 0x000b9fac in GC_push_all_stacks () at pthread_stop_world.c:297
>>> #3 0x000b5848 in GC_push_roots (all=1, cold_gc_frame=0xbefffa4c "")
>>> at mark_rts.c:643
>>> #4 0x000b4c60 in $a () at mark.c:326
>>> #5 0x000b4c60 in $a () at mark.c:326
>>> Previous frame identical to this frame (corrupt stack?)
>> I get quite similar backtrace when running the SVN version on our
>> ARM11-based little-endian board:
>> Program received signal SIGSEGV, Segmentation fault.
>> [Switching to Thread 16384 (LWP 395)]
>> 0x001147b0 in GC_push_all_eager ()
>> (gdb) bt
>> #0 0x001147b0 in GC_push_all_eager ()
>> #1 0x00114844 in GC_push_all_stack ()
>> #2 0x0011e320 in pthread_push_all_stacks ()
>> #3 0x0011e3ec in GC_push_all_stacks ()
>> #4 0x00119164 in GC_default_push_other_roots ()
>> #5 0x001164b0 in GC_push_roots ()
>> #6 0x00112ab8 in $a ()
>> Tomi Valkeinen
> I got the GC running after changing the method of finding the stack
> bottom from HEURISTIC1 to LINUX_STACKBOTTOM (gcconfig.h:1755). I don't
> know why LINUX_STACKBOTTOM wasn't used on arm linux by default, the
> code looks arm-runnable to me.
> Of course your problem may be something totally different =).
> Oh, and if you are using an ARM11 based board, you may also want to
> fix the swp-bug (http://bugzilla.ximian.com/show_bug.cgi?id=75114)
> Tomi Valkeinen
This indeed was the problem. After making the change, Mono no longer
segfaults. According to Hans Boehm this bug was fixed in his tree
already, so it's probably safe to commit this change to Mono SVN.
Thanks for your help.
More information about the Mono-devel-list