Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2561.mcz==================== Summary ====================
Name: VMMaker.oscog-eem.2561
Author: eem
Time: 10 September 2019, 7:38:19.641414 pm
UUID: 38122521-e0fd-4e4d-9903-8a99a82bac38
Ancestors: VMMaker.oscog-nice.2560
FIx a bug in followForwardedLiteralsIn:; whether the methodObject is young or not is important, and must be recorded.
Simulator:
Remove an inadvertent break. Save hair pulling by complaining about the alternative bytecode set if MULTIPLEBYTECODESETS is unset. Check in bytecodeSetOffsetFor:. Make sure the Cogit>>kosherYoungReferrers answers the result.
=============== Diff against VMMaker.oscog-nice.2560 ===============
Item was changed:
----- Method: CoInterpreter>>postBecomeAction: (in category 'object memory support') -----
postBecomeAction: theBecomeEffectsFlags
"Clear the gcMode var and let the Cogit do its post GC checks."
- self break.
super postBecomeAction: theBecomeEffectsFlags.
(objectMemory hasSpurMemoryManagerAPI)
ifTrue: [cogit followMovableLiteralsAndUpdateYoungReferrers]
ifFalse: [cogit cogitPostGCAction: gcMode].
self nilUncoggableMethods.
self assert: cogit kosherYoungReferrers.
gcMode := 0!
Item was changed:
----- Method: Cogit>>bytecodeSetOffsetFor: (in category 'initialization') -----
bytecodeSetOffsetFor: aMethodObj
<inline: true>
^self
cppIf: MULTIPLEBYTECODESETS
ifTrue:
[(coInterpreter methodUsesAlternateBytecodeSet: aMethodObj)
ifTrue: [256]
ifFalse: [0]]
+ ifFalse:
+ [self deny: (coInterpreter methodUsesAlternateBytecodeSet: aMethodObj).
+ 0]!
- ifFalse: [0]!
Item was changed:
----- Method: Cogit>>followForwardedLiteralsIn: (in category 'garbage collection') -----
followForwardedLiteralsIn: cogMethod
<api>
<option: #SpurObjectMemory>
<var: #cogMethod type: #'CogMethod *'>
| hasYoungObj hasYoungObjPtr |
self assert: (cogMethod cmType ~= CMMethod or: [(objectMemory isForwarded: cogMethod methodObject) not]).
+ hasYoungObj := objectMemory isYoung: cogMethod methodObject.
- hasYoungObj := false.
(objectMemory shouldRemapOop: cogMethod selector) ifTrue:
[cogMethod selector: (objectMemory remapObj: cogMethod selector).
(objectMemory isYoung: cogMethod selector) ifTrue:
[hasYoungObj := true]].
hasYoungObjPtr := (self addressOf: hasYoungObj put: [:val| hasYoungObj := val]) asInteger.
self mapFor: cogMethod
performUntil: #remapIfObjectRef:pc:hasYoung:
arg: hasYoungObjPtr.
hasYoungObj
ifTrue: [methodZone ensureInYoungReferrers: cogMethod]
ifFalse: [cogMethod cmRefersToYoung: false]!
Item was changed:
----- Method: Cogit>>kosherYoungReferrers (in category 'jit - api') -----
kosherYoungReferrers
<doNotGenerate>
+ ^methodZone kosherYoungReferrers!
- methodZone kosherYoungReferrers!