Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.454.mcz
==================== Summary ====================
Name: Cog-eem.454 Author: eem Time: 6 April 2023, 4:36:37.831372 pm UUID: 6f307cc7-34d3-45e3-a2b8-b9a9b1c80139 Ancestors: Cog-eem.453
Truncate the remembered set to its smallest (nil) in image preening. Get rid of SpurImagePreener>>validateTargetHeap; it doesn't really tell us anything, and wasn't the cause of the regression (the introduction of memoryOffset in VMMaker.oscog-eem.3103).
Needs VMMaker.oscog-eem.3317.
=============== Diff against Cog-eem.453 ===============
Item was changed: ----- Method: SpurImagePreener>>cloneObjects (in category 'bootstrap image') ----- cloneObjects "Clone all normal objects. Of hidden objects only clone the freeLists object and the classTableRoot and class table pages. In particular, dont clone objStacks. The refs to the objStacks are nilled out in fillInHeap." + | i freeListsObject rememberedSetObject | - | i freeListsObject | i := 0. freeListsObject := sourceHeap freeListsObject. + rememberedSetObject := sourceHeap rememberedSetObj. sourceHeap allOldSpaceObjectsDo: [:obj| (i := i + 1) >= 100000 ifTrue: [Transcript nextPut: $:; flush. i := 0]. + + obj caseOf: { + [freeListsObject] -> [self cloneFreeLists: obj]. + [rememberedSetObject] -> [self cloneRememberedSet: obj]. + } otherwise: + [(self shouldClone: obj) ifTrue: [self cloneObject: obj]]]! - obj = freeListsObject - ifTrue: - [self cloneFreeLists: obj] - ifFalse: - [(self shouldClone: obj) ifTrue: - [self cloneObject: obj]]]!
Item was added: + ----- Method: SpurImagePreener>>cloneRememberedSet: (in category 'bootstrap image') ----- + cloneRememberedSet: oldRememberedSet + "SImply set the remembered set to nil, which will cause the scavenger + initialize it to the default size in initializeRememberedSet. This is tricky + since the targetHeap's nilObject isn't yet set-up." + | theNilObject | + self assert: (targetHeap nilObject isNil or: [targetHeap nilObject isZero]). + theNilObject := self mapOop: sourceHeap nilObject. + ^map at: oldRememberedSet put: theNilObject!
Item was changed: ----- Method: SpurImagePreener>>fillInObjects (in category 'bootstrap image') ----- fillInObjects "oldInterpreter printOop: oldObj" | i | {sourceHeap markStack. sourceHeap weaklingStack. sourceHeap mournQueue} do: [:obj| obj ~= sourceHeap nilObject ifTrue: [map at: obj put: (map at: sourceHeap nilObject)]]. i := 0. sourceHeap allObjectsDo: [:oldObj| (i := i + 1) >= 10000 ifTrue: [Transcript nextPut: $.; flush. i := 0]. (map at: oldObj ifAbsent: nil) ifNotNil: [:newObj| | format | (targetHeap numSlotsOf: newObj) > 0 ifTrue: "filter-out filtered objStack pages" [format := sourceHeap formatOf: oldObj. (targetHeap isPointersFormat: format) ifTrue: [self fillInPointerObject: newObj from: oldObj] ifFalse: [(targetHeap isCompiledMethodFormat: format) ifTrue: [self fillInCompiledMethod: newObj from: oldObj] ifFalse: [(targetHeap classIndexOf: newObj) <= targetHeap lastClassIndexPun ifTrue: [self assert: (oldObj = sourceHeap freeListsObject or: [oldObj = sourceHeap rememberedSetObj])] ifFalse: [self fillInBitsObject: newObj from: oldObj]]]]] + ifNil: [self assert: ((self isUnmappedObject: oldObj) or: [oldObj = sourceHeap rememberedSetObj])]]! - ifNil: [self assert: (self isUnmappedObject: oldObj)]]!
Item was changed: ----- Method: SpurImagePreener>>preenImage (in category 'public access') ----- preenImage self cloneObjects. self fillInObjects. self fillInClassTable. self fillInHeap. - self validateTargetHeap. self reportSizes!
Item was removed: - ----- Method: SpurImagePreener>>validateTargetHeap (in category 'bootstrap image') ----- - validateTargetHeap - "check that the result contains only objects that should be there. - Further check that certain objects are all zero." - - {targetHeap freeListsObject. targetHeap rememberedSetObj} do: - [:sbzObj| "shouldBeZeroObj" - 0 to: (targetHeap numSlotsOfAny: sbzObj) - 1 do: - [:i| self assert: (targetHeap fetchPointer: i ofMaybeForwardedObject: sbzObj) isZero]]. - targetHeap allOldSpaceEntitiesDo: - [:obj| | classIndex | - classIndex := targetHeap classIndexOf: obj. - classIndex <= targetHeap lastClassIndexPun ifTrue: - [self deny: (targetHeap isFreeObject: obj). - classIndex = targetHeap segmentBridgePun - ifTrue: "If it is a bridge it must be the one at the end of memory..." - [self assert: obj + targetHeap baseHeaderSize = targetHeap endOfMemory] - ifFalse: "If its not a bridge it must be the hidden roots, the free lists, or a class atble page (& temporariy, or the remembered set)" - [self assert: (obj = targetHeap hiddenRootsObject - or: [obj = targetHeap freeListsObject - or: [obj = targetHeap rememberedSetObj - or: [classIndex = targetHeap arrayClassIndexPun - and: [(targetHeap numSlotsOfAny: obj) = targetHeap classTablePageSize]]]])]]]!
vm-dev@lists.squeakfoundation.org