It look's like I've finally fixed the bug I've been chasing for the
last few months. A fix will be published to SqueakSource in the
next few days then final release testing can begin.
It'll be interesting to see how reliable Exupery is now. It's possible
that this bug has been the main reason for crashes for the last few
releases. It's an old bug that's most often triggered by the first
method compiled which is Delay>>wait, it's just the conditions
required to trigger it are rare.
The bug was Exupery was marking the home context of a block as a root
but not the block itself. So if the block was in old space then memory
corruption could be caused by an incremental GC if the block became a
root. Live contexts in Squeak are always mapped as roots to avoid
needing to use a write barrier for every context write which includes
every stack push.
Even if this isn't the last major reliability bug, my VM debugging
skills have improved so later bugs should take less effort to fix.
There's a few useful debugging functions in the VM that can be
exploited or modified. allAccessibleObjectsOkay is much slower than
validateRoots even though both do a full memory scan.
I'll probably merge in VMMaker-dtl.115 which has the latest version
of Eliot's closure bytecodes. The closure bytecodes are already in
the Exupery VM.