CogVM binaries as per VMMaker.oscog-eem.1873/r3732
General:
Make primitiveDoPrimitiveWithArgs usable as a mirror primitive, such that no
message needs to be sent to the receiver to evaluate a primitive on it. This
would 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 at
the start of a scavenge. Fix bug in markAllUnscannedEphemerons, enumerating
correctly.
Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must check
for an ephemeron being fireable. An as-yet-firable ephemeron might get added to
the ephemeron list and later its key may get tenured, rendering the ephemeron
unfirable in that cycle.
Fix marking of obj stack contents (markAndTraceObjStack:andContents:). Again
tenuring 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't
to be GC'ed. So move the assignments to marking out into markObjects: where
they can surround nilUnmarkedWeaklingSlots.
2. fireAllUnscannedEphemerons needs to enumerate the unscannedEphemerons set
properly, an oop at a time.
Fix asserts that check for ephemerons so that the change in an ephemeron's
format once it gets added to the mournQueue doesn't break the asserts;
isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons in
the mournQueue.
Fix the Spur implementation of becomeForward:copyHash: for becomming immediates
with 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| Ephemeron
key: (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)