[Vm-dev] VM Maker: VMMaker.oscog-eem.2592.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Nov 25 03:31:25 UTC 2019

Eliot Miranda uploaded a new version of VMMaker to project VM Maker:

==================== Summary ====================

Name: VMMaker.oscog-eem.2592
Author: eem
Time: 24 November 2019, 7:31:01.460535 pm
UUID: 760ff6d7-453c-4ba2-a154-ca5e68ecc0ec
Ancestors: VMMaker.oscog-tpr.2591

Fix a bogus assert fail in cloning an OS or FFI error object on failing a primitive.  On Spur we shouldn't check for a known class index, as a PrimitiveError does not have a known class.

=============== Diff against VMMaker.oscog-tpr.2591 ===============

Item was added:
+ ----- Method: SpurMemoryManager>>eeInstantiateAnySmallClassIndex:format:numSlots: (in category 'instantiation') -----
+ eeInstantiateAnySmallClassIndex: classIndex format: objFormat numSlots: numSlots
+ 	"Instantiate a small instance of a class.  ee stands for execution engine and
+ 	 implies that this allocation will *NOT* cause a GC.  small implies the object will have
+ 	 less than 255 slots. N.B. the instantiated object IS NOT FILLED and must be completed
+ 	 before returning it to Smalltalk. Since this call is used in routines that do just that we
+ 	 are safe.  Break this rule and die in GC.  Result is guaranteed to be young."
+ 	<inline: true>
+ 	self assert: (numSlots >= 0 and: [classIndex ~= 0 and: [(self classAtIndex: classIndex) ~= nilObj]]).
+ 	self assert: (objFormat < self firstByteFormat
+ 					ifTrue: [objFormat]
+ 					ifFalse: [objFormat bitAnd: self byteFormatMask])
+ 				= (self instSpecOfClass: (self classAtIndex: classIndex)).
+ 	^self allocateSmallNewSpaceSlots: numSlots format: objFormat classIndex: classIndex!

Item was changed:
  ----- Method: StackInterpreter>>cloneOSErrorObj:numSlots: (in category 'message sending') -----
  cloneOSErrorObj: errObj numSlots: numSlots
  	"If errObj is a pointer object with at least two slots, then answer a clone
  	  of the error object with the second slot set to the value of osErrorCode,
  	  and if an PrimErrFFIException, then the third slow with the exceptionPC."
  	| clone |
  	<inline: true>
  	clone := objectMemory hasSpurMemoryManagerAPI
  				ifTrue: [objectMemory
+ 							eeInstantiateAnySmallClassIndex: (objectMemory classIndexOf: errObj)
- 							eeInstantiateSmallClassIndex: (objectMemory classIndexOf: errObj)
  							format: objectMemory nonIndexablePointerFormat
  							numSlots: numSlots]
  				ifFalse: [objectMemory
  							eeInstantiateSmallClass: (objectMemory fetchClassOfNonImm: errObj)
  							numSlots: numSlots].
  	0 to: numSlots - 1 do:
  		[:i| objectMemory
  				storePointerUnchecked: i
  				ofObject: clone
  				withValue: (objectMemory fetchPointer: i ofObject: errObj)].
  	(numSlots > 2
  	 and: [primFailCode = PrimErrFFIException])
  				storePointerUnchecked: 1
  					ofObject: clone
  						withValue: (self positive64BitIntegerFor: (self cCoerceSimple: osErrorCode to: #usqLong));
  				storePointerUnchecked: 2
  					ofObject: clone
  						withValue: (self positiveMachineIntegerFor: exceptionPC)]
  				storePointerUnchecked: 1
  				ofObject: clone
  				withValue: (self signed64BitIntegerFor: osErrorCode)].

More information about the Vm-dev mailing list