[Gc] Re: bug? or misunderstanding?

Boehm, Hans hans.boehm at hp.com
Thu Feb 16 16:53:42 PST 2006


Could you try the attached, rather unimpressive looking, patch?

That does the trick for me.  It's probably a good reason to get 6.7 out
soon.

I believe the problem occurred if

1) GC_all_interior_pointers was true,

2) The offset into the referenced object, expressed in words, was larger
than 253, but smaller than the size of heap block (and possibly some
other ranges), and

3) The size of the referenced object was larger than a heap block.

As Andrew pointed out, the reference could be either from the stack or
the heap.  In some cases, it could also have been from a register.

A check designed to test whether an object would extend past the end of
the block allocated for it was gratuitously failing.

The patch effectively bypasses this check for the first object of each
block, since we always make the block large enough to hold that.  All of
this only happens along an infrequently executed path.

This is of course all a consequence of trying to tweak this code too
much to get it to run fast.

The good news is that interior pointer recognition for stack pointers
worked correctly if (somewhat paradoxically) GC_all_interior_pointers
was false, as it is for gcj and Mono.

Hans
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gc_pmark.h.diff
Type: application/octet-stream
Size: 480 bytes
Desc: gc_pmark.h.diff
Url : http://napali.hpl.hp.com/pipermail/gc/attachments/20060216/29cc38fe/gc_pmark.h.obj


More information about the Gc mailing list