This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
RE: SIGSEGV in GC_mark_from
- To: "Boehm, Hans" <hans_boehm at hp dot com>
- Subject: RE: SIGSEGV in GC_mark_from
- From: Jeff Sturm <jsturm at one-point dot com>
- Date: Thu, 6 Sep 2001 19:16:09 -0400 (EDT)
- cc: java at gcc dot gnu dot org
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