SIGSEGV in GC_mark_from
Jeff Sturm
jsturm@one-point.com
Thu Sep 6 15:49:00 GMT 2001
On Thu, 6 Sep 2001, Boehm, Hans wrote:
> Is the object in question perhaps part of a free list?
It's very possible. It appears to be a cleared object with a free list
pointer. However this link points to an uncleared object.
> Are you trying to
> get thread-local allocation working, or is the tree basically unmodified?
> Is the GC up-to-date?
The tree is current and essentially unmodified, though I did enable hash
synchronization in libjava.
> There are some known subtle issues related to gcj style descriptors and free
> lists. In particular, the collector may see a pointer to a free list (due
> to a misidentified pointer), and treat the free list link as a vtable
> pointer. The claim is that this is OK (though it wasn't always), since free
> lists for gcj-style objects are cleared, and hence either the free list link
> will be null, or the "GC descriptor" slot will be 0 in this case.
Misidentified pointers are plausible, since large, mostly empty stack
frames are common on SPARC.
>From your explanation it follows that every heap object must be minimum 2
words. I added the following in GC_reclaim_clear:
assert(list == NULL || ((void **)list)[1] == NULL);
This assert didn't catch anything. The final clue I have is that this
linked-to object (from where the invalid descriptor is taken) is
consistently a large non-array object instance (152 bytes) and uses a
procedure descriptor.
Jeff
More information about the Java
mailing list