Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2887.mcz==================== Summary ====================
Name: VMMaker.oscog-eem.2887
Author: eem
Time: 15 November 2020, 11:34:08.438409 pm
UUID: 835695f1-3354-4db4-9d20-dff979802ef4
Ancestors: VMMaker.oscog-eem.2886
...and another one.
=============== Diff against VMMaker.oscog-eem.2886 ===============
Item was changed:
----- Method: CoInterpreter>>markCogMethodsAndReferentsOnPage: (in category 'frame access') -----
markCogMethodsAndReferentsOnPage: thePage
<var: #thePage type: #'StackPage *'>
+ | theFP callerFP |
+ <var: #theFP type: #'char *'>
+ <var: #callerFP type: #'char *'>
- | theFP callerFP cogMethod theIP |
<inline: false>
self assert: (stackPages isFree: thePage) not.
self assert: (self ifCurrentStackPageHasValidHeadPointers: thePage).
theFP := thePage headFP.
+ "Skip the instruction pointer on top of stack of inactive pages."
-
- "If a machine code primitive is in progress then there will be a return address on top of stack
- which does not refer to the current frame's method (which is the caller of the primitive), since
- the primitive has not built a frame. It is vital that that method not be reclaimed!!!!"
- theIP := (stackPages longAt: thePage headSP) asUnsignedInteger.
- (theIP < objectMemory startOfMemory
- and: [theIP ~= cogit ceReturnToInterpreterPC]) ifTrue:
- [self assert: (self isMachineCodeFrame: theFP).
- cogMethod := self mframeHomeMethod: theFP.
- (theIP >= cogMethod asUnsignedInteger
- and: [theIP < (cogMethod asUnsignedInteger + cogMethod blockSize)]) ifFalse:
- [(cogit cogMethodContaining: theIP) ifNotNil:
- [:primCogMethod| cogit markMethodAndReferents: primCogMethod]]].
-
[(self isMachineCodeFrame: theFP) ifTrue:
[cogit markMethodAndReferents: (self mframeCogMethod: theFP)].
(callerFP := self frameCallerFP: theFP) ~= 0] whileTrue:
[theFP := callerFP]!