[Vm-dev] Pharo VM bug 11130

Eliot Miranda eliot.miranda at gmail.com
Thu Mar 27 21:28:46 UTC 2014


Hi Stephan,


On Thu, Mar 27, 2014 at 1:09 PM, Stephan Eggermont <stephan at stack.nl> wrote:

>
> I've been triangulating a long-standing bug in the Pharo VM, which
> seems to have been fixed in Squeak.
>
> 1 to: 1000 do: [ :i |
>         | string |
>         Transcript show: 'Iteration '; show: i; cr.
>         1 timesRepeat: [
>             (string := String new: 1000 withAll: $a)
>                 reversed.
>         ].
>     ].
>
> reliably managed to trigger the bug. It manifested itself
> in a number of different ways. Early VMs just crashed,
> later Squeak ones work, Pharo ones show different results.
>
> http://www.mirandabanda.org/files/Cog/VM/
> 2636 from 16 dec 2012 and earlier crash
> 2640 from 20 dec 2012 and later work.
>
> Does anyone remember what changed in that period?
>

I fixed a bug with compact classes.  i don't remember why that would break
things like your snippet but that's the substantive change:

r2640 | eliot | 2012-12-20 12:39:20 -0800 (Thu, 20 Dec 2012) | 42 lines

CogVM source as per VMMaker.oscog-eem.240.

*Back out of the wrong-headed attempt to give compact class indices*
*to long header objects in changeClassOf:to:, and comment why*
*(markAndTrace: reuses header type bits and depends on compact*
*class and size fields to reconstruct type bits after traverse).*

*Consequently fix isClassOfNonImm:equalTo:compactClassIndex: so*
*it will still accept long-header objects that are instances of compact*
*classes but don't have a compact class index.*

Clean-up accesses to the compactClassesArray so that they go
through the compactClassAt: where appropriate.

Use the short-hand class determinators such as isInstanceOfClassFloat:
in place of the long-winded is:instanceOf:compactClassIndex:.

Remove obsolete use of cCode: 'magnitude >> 32' in the integer
conversion routines signed64BitIntegerFor: et al now that Slang
generates the correct cases for right-shift.

Eliminate the compactClassTable accessor.  CompactClasses and splOb:
are both in scope in CogObjectRepresentationForSqueakV3.

Override sweepPhase in NewObjectMemory and hence eliminate
initializeFreeBlocksPreSweep.

Fix off-by-one error in okayOop:.

Make longPrintOop: print header type info.

Make allAccessibleObjectsOk answer a result.

Don't inline loadInitialContext for gdb breakpointing convenience.

Declare some constant variables as const in the Cogit.

Don't use SA_ONSTACK if NEED_SIGALTSTACK is 0. (default is 1, so this isn't
a
change, except for experimenting).

Fix nscogbuild/unixbuild/HowToBuild (thanks Bob).

------------------------------------------------------------------------
r2639 | eliot | 2012-12-18 10:39:16 -0800 (Tue, 18 Dec 2012) | 5 lines

*Third time lucky.  Fix bug in changeClass:from: so that if receiver has
long*
*header and class is compact, receiver still gets compact class field set,
not*
*cleared.  No matter what header an instance has, if its class is compact
it*
*should have the compact class index set.*

------------------------------------------------------------------------
r2637 | eliot | 2012-12-17 11:51:15 -0800 (Mon, 17 Dec 2012) | 10 lines

CogVM source as per VMMaker.oscog-eem.238

Restore ThreadedFFIPlugin wanting COGMTVM to be determined on
command line.  Probably broke in VMMaker.oscog-eem.218

*Fix bug in changeClass:from: so that if receiver has long header and*
*class is compact, receiver still gets compact class field set, not*
*cleared.  No matter what header an instance has, if its class is*
*compact it should have the compact class index set. *


> Stephan Eggermont
>
> https://pharo.fogbugz.com/default.asp?11130
>

HTH
-- 
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20140327/6010cbe3/attachment.htm


More information about the Vm-dev mailing list