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

commits at source.squeak.org commits at source.squeak.org
Tue Apr 13 05:38:13 UTC 2021


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2950.mcz

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

Name: VMMaker.oscog-eem.2950
Author: eem
Time: 12 April 2021, 10:38:04.402462 pm
UUID: dbcba85e-dc26-495f-9ce8-aa01633f6aa5
Ancestors: VMMaker.oscog-eem.2949

Fix huge horrible win32 Spur VM bug.  Plugins must export accessor depths (via the EXPORT macro) otherwise the external primitive loading machinery will silently compute their accessor depths as -1 (no accessor depth), and so no primitives will be scanned for forwarders, and hence none will retry when given forwarders, breaking the while Spur transparent forwarding mechanism for primitives on win32.  The bug showed up with the new CameraPlugin primSetCameraBuffers primitive which is given a newly becomed forwarder to a pinned bitmap.  The primitive doesn't retry and hence always fails.

=============== Diff against VMMaker.oscog-eem.2949 ===============

Item was changed:
  ----- Method: VMPluginCodeGenerator>>emitAccessorDepthsOn: (in category 'C code generator') -----
  emitAccessorDepthsOn: aStream 
  	"Output accessor depth bytes for all primitives in the plugin.
  	 This is for external primitives in Spur."
  	self sortedExportMethods do:
  		[:method| | primName |
  		 primName := self cFunctionNameFor: method selector.
  		 (self accessorDepthForSelector: primName asSymbol) ifNotNil:
  			[:depth|
  			 "store the accessor depth in a byte variable; save a little space
  			  by omitting depths < 0; support code supplies the default."
  			 self assert: depth < 128.
  			 depth >= 0 ifTrue:
  				[self withOptionalConditionalDefineFor: method
  					on: aStream
  					do: [aStream
+ 							nextPutAll: 'EXPORT(signed char) ';
- 							nextPutAll: 'signed char ';
  							nextPutAll: primName;
  							nextPutAll: 'AccessorDepth = ';
  							nextPutAll: (self cLiteralFor: depth);
  							nextPut: $;;
  							cr]]]]!



More information about the Vm-dev mailing list