<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body>
    Cool!<br>
    <br>
    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 :).<br>
    <br>
    We pushed a bit more the case by creating 2M ephemerons and
    everything worked smoothly ;).<br>
    <br>
    I'll continue now working on the image side support of Ephemerons.<br>
    <br>
    Thanks!!<br>
    Guille<br>
    <br>
    <div class="moz-cite-prefix">-------- Original Message --------<br>
    </div>
    <blockquote
cite="mid:CAC20JE1RCu72sOrx+y6GHaU0H93L32qGP=4knDibR8jJV77X8w@mail.gmail.com"
      type="cite">
      <pre wrap=""> </pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <div dir="ltr">
        <div>... at <a moz-do-not-send="true"
            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'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't</div>
        <div>   to be GC'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's</div>
        <div>format once it gets added to the mournQueue doesn'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'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'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: 'test', 'asd' 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>
    </blockquote>
    <br>
  </body>
</html>