VM Maker: VMMaker.oscog-eem.2950.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.2950.mcz

commits-2
 
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]]]]!