[Vm-dev] VM Maker: VMMaker.oscog-eem.2019.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Dec 1 20:21:23 UTC 2016
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2019.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2019
Author: eem
Time: 1 December 2016, 12:20:35.048344 pm
UUID: 364ea882-9181-4ed0-8495-3044fac4318b
Ancestors: VMMaker.oscog-eem.2018
Improve debugging of stack imbalances on primitive invocation by restoring the stack pointer after calling failUnbalancedPrimitive.
=============== Diff against VMMaker.oscog-eem.2018 ===============
Item was changed:
----- Method: StackInterpreter>>slowPrimitiveResponse (in category 'primitive support') -----
slowPrimitiveResponse
"Invoke a normal (non-quick) primitive.
Called under the assumption that primFunctionPointer has been preloaded."
| nArgs savedFramePointer savedStackPointer |
<inline: true>
<var: #savedFramePointer type: #'char *'>
<var: #savedStackPointer type: #'char *'>
self assert: (objectMemory isOopForwarded: (self stackValue: argumentCount)) not.
self assert: objectMemory remapBufferCount = 0.
FailImbalancedPrimitives ifTrue:
[nArgs := argumentCount.
savedStackPointer := stackPointer.
savedFramePointer := framePointer].
self initPrimCall.
self dispatchFunctionPointer: primitiveFunctionPointer.
self assert: (self maybeLeakCheckExternalPrimCall: newMethod).
self maybeRetryPrimitiveOnFailure.
self maybeFailForLastObjectOverwrite.
(FailImbalancedPrimitives
and: [self successful
and: [framePointer = savedFramePointer
and: [(self isMachineCodeFrame: framePointer) not]]]) ifTrue:"Don't fail if primitive has done something radical, e.g. perform:"
[stackPointer ~= (savedStackPointer + (nArgs * objectMemory wordSize)) ifTrue:
[self flag: 'Would be nice to make this a message send of e.g. unbalancedPrimitive to the current process or context'.
"This is necessary but insufficient; the result may still have been written to the stack.
At least we'll know something is wrong."
+ self failUnbalancedPrimitive.
+ stackPointer := savedStackPointer]].
- stackPointer := savedStackPointer.
- self failUnbalancedPrimitive]].
"If we are profiling, take accurate primitive measures"
nextProfileTick > 0 ifTrue:
[self checkProfileTick: newMethod].
^self successful!
More information about the Vm-dev
mailing list