Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.100.mcz
==================== Summary ====================
Name: Cog-eem.100 Author: eem Time: 24 September 2013, 1:24:54.567 pm UUID: 95a46b20-6f47-408d-8ff0-9b1903ef860c Ancestors: Cog-eem.99
Fix a typo in a prootype method.
Report on heap growth during bootstrap.
=============== Diff against Cog-eem.99 ===============
Item was changed: Object subclass: #SpurBootstrap + instanceVariableNames: 'oldHeap newHeap oldHeapSize newHeapSize map reverseMap classToIndex oldInterpreter lastClassTablePage literalMap methodClasses installedPrototypes sizeSym rehashSym classMetaclass' - instanceVariableNames: 'oldHeap newHeap map reverseMap classToIndex oldInterpreter lastClassTablePage literalMap methodClasses installedPrototypes sizeSym rehashSym classMetaclass' classVariableNames: 'ImageHeaderFlags ImageName TransformedImage' poolDictionaries: 'VMObjectIndices' category: 'Cog-Bootstrapping'!
!SpurBootstrap commentStamp: 'eem 9/11/2013 05:45' prior: 0! SpurBootstrap bootstraps an image in SpurMemoryManager format from a Squeak V3 + closures format.
e.g. (SpurBootstrap32 new on: '/Users/eliot/Cog/startreader.image') transform; launch
Bootstrap issues: - should it implement a deterministic Symbol identityHash? This means set a Symbol's identityHash at instance creation time based on its string hash so that e.g. MethodDIctionary instances have a deterministic order and don't need to be rehashed on load. - should it collapse ContextPart and MethodContext down onto Context (and perhaps eliminate BlockContext)?
Instance Variables classToIndex: <Dictionary> lastClassTablePage: <Integer> map: <Dictionary> methodClasses: <Set> newHeap: <SpurMemoryManager> oldHeap: <NewObjectMemory> oldInterpreter: <StackInterpreterSimulator> reverseMap: <Dictionary> symbolMap: <Dictionary>
classToIndex - oldClass to new classIndex map
lastClassTablePage - oop in newHeap of last classTable page. U<sed in validation to filter-out class table.
methodClasses - cache of methodClassAssociations for classes in which modified methods are installed
map - oldObject to newObject map
newHeap - the output, bootstrapped image
oldHeap - the input, image
oldInterpreter - the interpreter associated with oldHeap, needed for a hack to grab WeakArray
reverseMap - newObject to oldObject map
symbolMap - symbol toi symbol oop in oldHeap, used to map prototype methdos to methods in oldHeap!
Item was changed: ----- Method: SpurBootstrap class>>BehaviorPROTOTYPEinstSpec (in category 'method prototypes') ----- BehaviorPROTOTYPEinstSpec "Answer the instance specification part of the format that defines what kind of object + an instance of the receiver is. The formats are + 0 = 0 sized objects (UndefinedObject True False et al) - an instance of the receiver is. The formats are0 = 0 sized objects (UndefinedObject True False et al) 1 = non-indexable objects with inst vars (Point et al) 2 = indexable objects with no inst vars (Array et al) 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al) 4 = weak indexable objects with inst vars (WeakArray et al) 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron) 6 unused, reserved for exotic pointer objects? 7 reserved by the VM 8 unused, reserved for exotic non-pointer objects? 9 (?) 64-bit indexable 10 - 11 32-bit indexable 12 - 15 16-bit indexable 16 - 23 byte indexable 24 - 31 compiled method" ^(format bitShift: -16) bitAnd: 16r1F!
Item was changed: ----- Method: SpurBootstrap>>bootstrapImage (in category 'bootstrap image') ----- bootstrapImage + oldHeap fullGC. + oldHeapSize := oldHeap freeStart. Transcript cr; nextPutAll: 'transforming image...'; flush. self cloneNilTrueAndFalse. self buildClassMap. self allocateClassTable. self cloneObjects. self fillInObjects. self fillInClassTable. + newHeapSize := newHeap freeStart. newHeap initializePostBootstrap!
Item was changed: ----- Method: SpurBootstrap>>transform (in category 'bootstrap image') ----- transform + | change | self rememberRehashSymbol. self findRequiredGlobals. self installModifiedMethods. self bootstrapImage. self validate. self rehashImage. self followForwardingPointers. self scavengeImage. self freeForwarders. self compactImage. + change := newHeapSize - oldHeapSize / oldHeapSize. + Transcript + nextPutAll: 'done.'; cr; + nextPutAll: 'old heap size: '; print: oldHeapSize; cr; + nextPutAll: 'initial new heap size: '; print: newHeapSize; cr; + nextPutAll: 'change: '; print: (change * 100.0 roundTo: 0.01); nextPut: $%; cr; + flush. + newHeapSize := newHeap endOfMemory + - newHeap scavenger eden limit + - newHeap totalFreeListBytes. + change := newHeapSize - oldHeapSize / oldHeapSize. + Transcript + nextPutAll: 'final new heap size: '; print: newHeapSize; cr; + nextPutAll: 'change: '; print: (change * 100.0 roundTo: 0.01); nextPut: $%; cr; + flush.! - Transcript nextPutAll: 'done.'; flush.!
vm-dev@lists.squeakfoundation.org