thanks guille for all this cool energy!
Cool!
I've just tested also your last version both on the simulator and in a compiled vm (with both edens of 4M and 2M) and we could not reproduce the crash anymore :).
We pushed a bit more the case by creating 2M ephemerons and everything worked smoothly ;).
I'll continue now working on the image side support of Ephemerons.
Thanks!!
Guille
-------- Original Message --------
CogVM binaries as per VMMaker.oscog-eem.1873/r3732
General:Make primitiveDoPrimitiveWithArgs usable as a mirror primitive, such that nomessage needs to be sent to the receiver to evaluate a primitive on it. Thiswould make possible Context>>receiver: obj tryPrimitive: idx withArgs: args.
Spur: Fix ephemerons (at least for Gule's test case).
The mournQueue is of course a root for the scavenger and so must be visited atthe start of a scavenge. Fix bug in markAllUnscannedEphemerons, enumeratingcorrectly.
Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must checkfor an ephemeron being fireable. An as-yet-firable ephemeron might get added tothe ephemeron list and later its key may get tenured, rendering the ephemeronunfirable in that cycle.
Fix marking of obj stack contents (markAndTraceObjStack:andContents:). Againtenuring could cause contents to be forwarded and hence read barrier is needed.
Fix two bugs in ephemerons (found by Gille Polito - thanks!).
1. obj stack extension must happen with marking set to true if new pages aren'tto be GC'ed. So move the assignments to marking out into markObjects: wherethey can surround nilUnmarkedWeaklingSlots.
2. fireAllUnscannedEphemerons needs to enumerate the unscannedEphemerons setproperly, an oop at a time.
Fix asserts that check for ephemerons so that the change in an ephemeron'sformat once it gets added to the mournQueue doesn't break the asserts;isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons inthe mournQueue.
Fix the Spur implementation of becomeForward:copyHash: for becomming immediateswith copyHash false. Fix the scavenger's referenceCountRememberedReferents:for forwarding to immediates, and add a printRememberedSet convenience.
Make pushLiteralVariable: store unfollowed literals back into the literal frame.Do so in a function off to the side, not inlined into the interpreter loop.
With the above ephemeron changes Guille's test case passes:| e |Smalltalk supportsQueueingFinalization: true.e := (1 to: 200000) collect:[:i| Ephemeronkey: (ObjectFinalizer receiver: 'test', 'asd' selector: #logCr)value: Object new].Smalltalk garbageCollect!
Plugins:Simplify the arg validation in FloatArrayPrims>>prmNormalize & primLength.
Fix the configuration of the gdb-7.x support for for the GdbARMPlugin (COG=1).Put #if COG around a couple of changes to the gdb-7.10 code.Allow assert to be used in the plugin on MacOS X (-undefined dynamic_lookup)
_,,,^..^,,,_
best, Eliot