... at http://www.mirandabanda.org/files/Cog/VM/VM.r3732

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)

_,,,^..^,,,_
best,��Eliot