thanks guille for all this cool energy!



Le 27/5/16 à 15:17, Guille Polito a écrit :
 


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 --------
 


... 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