Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.453.mcz
==================== Summary ====================
Name: Cog-eem.453 Author: eem Time: 24 March 2023, 7:20:21.662521 pm UUID: a5d43c7e-753d-42cc-9db1-911f3865c4a6 Ancestors: Cog-eem.452
Add some validation to SpurImagePreener and don't use isValidObjStackPage: to decide ifg an object is to be cloned; it could exclude objStack pages if it were too picky.
Nuke an obsolete script.
=============== Diff against Cog-eem.452 ===============
Item was removed: - ----- Method: CogScripts class>>defineSpurPigCompactor (in category 'separate vm scripts') ----- - defineSpurPigCompactor - "Define SpurPigCompactor" - "self defineSpurPigCompactor" - | changes pigCompactor | - pigCompactor := SpurMemoryManager superclass - subclass: #SpurPigCompactor - instanceVariableNames: 'manager scavenger coInterpreter firstFreeChunk lastFreeChunk numCompactionPasses' - classVariableNames: 'CompactionPassesForGC CompactionPassesForSnapshot' - poolDictionaries: 'SpurMemoryManagementConstants VMBasicConstants VMSpurObjectRepresentationConstants' - category: SpurMemoryManager category. - changes := CogScripts changedSpurCompactorMethods. - changes do: - [:mr| - pigCompactor compile: mr source classified: (SpurMemoryManager whichCategoryIncludesSelector: mr selector)]. - changes do: - [:mr| - SpurMemoryManager removeSelector: mr selector]. - SpurMemoryManager organization removeEmptyCategories!
Item was changed: ----- Method: SpurImagePreener>>cloneObject: (in category 'bootstrap image') ----- cloneObject: oldObj | newObj hash | + self deny: (sourceHeap isSegmentBridge: oldObj). newObj := targetHeap allocateSlots: (sourceHeap numSlotsOf: oldObj) format: (sourceHeap formatOf: oldObj) classIndex: (sourceHeap classIndexOf: oldObj). (hash := sourceHeap rawHashBitsOf: oldObj) ~= 0 ifTrue: [targetHeap setHashBitsOf: newObj to: hash]. (sourceHeap isImmutable: oldObj) ifTrue: [targetHeap setIsImmutableOf: newObj to: true]. (sourceHeap isPinned: oldObj) ifTrue: [targetHeap setIsPinnedOf: newObj to: true]. self deny: (sourceHeap isRemembered: oldObj). self deny: (sourceHeap isMarked: oldObj). self deny: (sourceHeap isGrey: oldObj). reverseMap at: newObj put: oldObj. ^map at: oldObj put: newObj!
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]]]]] - ifFalse: [self fillInBitsObject: newObj from: oldObj]]]] ifNil: [self assert: (self isUnmappedObject: oldObj)]]!
Item was added: + ----- Method: SpurImagePreener>>isObjStackPage:inHeap: (in category 'bootstrap image') ----- + isObjStackPage: obj inHeap: theHeap "<SpurMemoryManager>" + ^(theHeap classIndexOf: obj) = theHeap wordSizeClassIndexPun + and: [(theHeap numSlotsOfAny: obj) = theHeap objStackPageSlots]!
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 changed: ----- Method: SpurImagePreener>>shouldClone: (in category 'bootstrap image') ----- shouldClone: obj + ^(self isObjStackPage: obj inHeap: sourceHeap) not! - ^(sourceHeap isValidObjStackPage: obj) not!
Item was added: + ----- 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