This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: SIGSEGV in GC_mark_from




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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]