[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