[Vm-dev] VM Maker: Cog-eem.453.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Mar 25 02:20:24 UTC 2023
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]]]])]]]!
More information about the Vm-dev
mailing list