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]]]]!
vm-dev@lists.squeakfoundation.org