<div dir="ltr"><div>... at <a href="http://www.mirandabanda.org/files/Cog/VM/VM.r3732">http://www.mirandabanda.org/files/Cog/VM/VM.r3732</a></div><div><br></div><div>CogVM binaries as per VMMaker.oscog-eem.1873/r3732<br></div><div><br></div><div>General:</div><div>Make primitiveDoPrimitiveWithArgs usable as a mirror primitive, such that no</div><div>message needs to be sent to the receiver to evaluate a primitive on it.  This</div><div>would make possible Context&gt;&gt;receiver: obj tryPrimitive: idx withArgs: args.</div><div><br></div><div><br></div><div>Spur: Fix ephemerons (at least for Gule&#39;s test case).</div><div><br></div><div>The mournQueue is of course a root for the scavenger and so must be visited at</div><div>the start of a scavenge.  Fix bug in markAllUnscannedEphemerons, enumerating</div><div>correctly.</div><div><br></div><div>Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must check</div><div>for an ephemeron being fireable.  An as-yet-firable ephemeron might get added to</div><div>the ephemeron list and later its key may get tenured, rendering the ephemeron</div><div>unfirable in that cycle.</div><div><br></div><div>Fix marking of obj stack contents (markAndTraceObjStack:andContents:).  Again</div><div>tenuring could cause contents to be forwarded and hence read barrier is needed.</div><div><br></div><div>Fix two bugs in ephemerons (found by Gille Polito - thanks!).</div><div><br></div><div>1. obj stack extension must happen with marking set to true if new pages aren&#39;t</div><div>   to be GC&#39;ed.  So move the assignments to marking out into markObjects: where</div><div>   they can surround nilUnmarkedWeaklingSlots.</div><div><br></div><div>2. fireAllUnscannedEphemerons needs to enumerate the unscannedEphemerons set</div><div>   properly, an oop at a time.</div><div><br></div><div>Fix asserts that check for ephemerons so that the change in an ephemeron&#39;s</div><div>format once it gets added to the mournQueue doesn&#39;t break the asserts;</div><div>isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons in</div><div>the mournQueue.</div><div><br></div><div>Fix the Spur implementation of becomeForward:copyHash: for becomming immediates</div><div>with copyHash false.  Fix the scavenger&#39;s referenceCountRememberedReferents:</div><div>for forwarding to immediates, and add a printRememberedSet convenience.</div><div><br></div><div>Make pushLiteralVariable: store unfollowed literals back into the literal frame.</div><div>Do so in a function off to the side, not inlined into the interpreter loop.</div><div><br></div><div>With the above ephemeron changes Guille&#39;s test case passes:</div><div><span class="" style="white-space:pre">        </span>| e |</div><div><span class="" style="white-space:pre">        </span>Smalltalk supportsQueueingFinalization: true.</div><div><span class="" style="white-space:pre">        </span>e := (1 to: 200000) collect:</div><div><span class="" style="white-space:pre">                </span>[:i| Ephemeron</div><div><span class="" style="white-space:pre">                                </span>key: (ObjectFinalizer receiver: &#39;test&#39;, &#39;asd&#39; selector: #logCr)</div><div><span class="" style="white-space:pre">                                </span>value: Object new].</div><div><span class="" style="white-space:pre">        </span>Smalltalk garbageCollect!</div><div><br></div><div><br></div><div>Plugins:</div><div>Simplify the arg validation in FloatArrayPrims&gt;&gt;prmNormalize &amp; primLength.</div><div><br></div><div>Fix the configuration of the gdb-7.x support for for the GdbARMPlugin (COG=1).</div><div>Put #if COG around a couple of changes to the gdb-7.10 code.</div><div>Allow assert to be used in the plugin on MacOS X (-undefined dynamic_lookup)</div><div><br></div><div class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div>