[Gc] RE: GC issue in mono 0.31

Boehm, Hans hans.boehm at hp.com
Wed May 5 12:35:52 PDT 2004

[I added the gc at linux.hpl.hp.com list, since this may be of interest to others

I have a plausible explanation for the Linux 2.6.5 failure.  I encountered
a similar problem on a 2.6 Itanium machine here.  The problem is that the
incremental collector write protects an internal GC data structure, which
the thread-stopping signal handler tries to write.  Unfortunately SIGSEGV
is blocked in that handler.  This problem appears to be fairly old, but
2.6 kernels seem to schedule things differently, so that the probability of
hitting it goes from approximately zero to approximately one.

I'll release my current snapshot as 6.3alpha6 later today, so that we can
verify this.

However, this problem occurs only with incremental GC enabled, which is
rare, and almost certainly not the case for Mono.  The symptoms are also
quite different from the Mono dynamic linking failure.  It still looks to
me like the Mono gc is picking up the wrong _end definition.  And it would
be good to track that down by looking at the GC_add_roots_inner call.


> -----Original Message-----
> From: Nikolai Zhubr [mailto:s001 at hotbox.ru]
> Sent: Wednesday, May 05, 2004 9:06 AM
> To: Boehm, Hans; mono-gc-list at lists.ximian.com
> Subject: Re: GC issue in mono 0.31
> Hans,
> My previous post appeared to be somewhat inexact.
> The latest results are:
> * gctest works on 2.4.20 kernel and fails on 2.6.5 one,
>  doesn't matter if linked statically or dynamically;
> * mono runtime fails on 2.4.20 and 2.6.5 when linked
>  dynamically, but works on both kernels when linked
>  statically.
> I think this is a tolerable workaround for me now,
> however still I can provide whatever information
> developers might need in order to fix the issue.
> -- 
> Best regards,
>  Nikolai Zhubr
> Wednesday, 05 May, 2004, 18:30:51, I wrote:
> > Hello Hans,
> > I've now tried some more things:
> > * Upgrading to binutils 2.13.90 didn't change anything;
> > * Running kernel 2.4.20 didn't essentially change anything
> >   either;
> > * gctest from full 6.2 gc version does not seem to succeed:
> > Switched to incremental mode
> > Emulating dirty bits with mprotect/signals
> > Killed
> > It failes when linked statically as well. Exception happens
> > not at that same place as when linked from mono, but I don't
> > know exactly where at this time (Old gdb refused to work with
> > new gcc and/or binutils, I'm thinking how to better solve this)
> > Please let me know if I should do some other tests or if you
> > need more details/outputs/etc.

More information about the Gc mailing list