Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.954.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.954 Author: eem Time: 24 November 2014, 11:05:55.778 am UUID: b7f58c9d-3ec9-4d7f-b41e-45aac820f622 Ancestors: VMMaker.oscog-eem.953
Fix some warnings and some 64-bit issues with the ThreadedFFIPlugin. Comment the FFIPlugin as obsolete.
=============== Diff against VMMaker.oscog-eem.953 ===============
Item was changed: InterpreterPlugin subclass: #FFIPlugin instanceVariableNames: 'ffiLastError ffiArgSpec ffiArgSpecSize ffiArgHeader ffiRetOop ffiRetClass ffiRetSpec ffiRetSpecSize ffiRetHeader ffiLogEnabled externalFunctionInstSize' classVariableNames: '' poolDictionaries: 'FFIConstants' category: 'VMMaker-Plugins'!
+ !FFIPlugin commentStamp: 'eem 11/24/2014 11:00' prior: 0! + This plugin provides access to foreign function interfaces on those platforms that provide such. For example Windows DLLs and unix .so's. It is obsolete, having been superceded by the ThreadedFFIPlugin.! - !FFIPlugin commentStamp: 'tpr 5/5/2003 11:54' prior: 0! - This plugin provides access to foreign function interfaces on those platforms that provide such. For example Windows DLLs and unix .so's.!
Item was changed: ----- Method: ThreadedFFIPlugin>>ffiContentsOfHandle:errCode: (in category 'callout support') ----- ffiContentsOfHandle: oop errCode: errCode "Make sure that the given oop is a valid external handle" <inline: true> ((interpreterProxy isBytes: oop) + and: [(interpreterProxy byteSizeOf: oop) = (self sizeof: #sqInt)]) ifFalse: - and: [(interpreterProxy byteSizeOf: oop) = 4]) ifFalse: [^self ffiFail: errCode]. ^interpreterProxy fetchPointer: 0 ofObject: oop!
Item was changed: ----- Method: ThreadedFFIPlugin>>ffiLoadCalloutModule: (in category 'symbol loading') ----- ffiLoadCalloutModule: module "Load the given module and return its handle" | moduleHandlePtr moduleHandle ffiModuleName moduleLength rcvr ptr | <var: #ptr type:'int *'> (interpreterProxy isBytes: module) ifTrue:[ "plain module name" ffiModuleName := module. moduleLength := interpreterProxy byteSizeOf: ffiModuleName. + moduleHandle := (interpreterProxy + ioLoadModule: (interpreterProxy firstIndexableField: ffiModuleName) asInteger + OfLength: moduleLength) asInteger. - moduleHandle := interpreterProxy ioLoadModule: (self cCoerce: (interpreterProxy firstIndexableField: ffiModuleName) to:'int') OfLength: moduleLength. (interpreterProxy failed or: [moduleHandle = 0]) ifTrue: [^self ffiFail: FFIErrorModuleNotFound]. "failed" ^moduleHandle]. "Check if the external method is defined in an external library" rcvr := interpreterProxy stackValue: interpreterProxy methodArgumentCount. (interpreterProxy is: rcvr KindOfClass: interpreterProxy classExternalLibrary) ifFalse: [^self ffiFail: FFIErrorNoModule]. "external library" moduleHandlePtr := interpreterProxy fetchPointer: 0 ofObject: rcvr. moduleHandle := self ffiContentsOfHandle: moduleHandlePtr errCode: FFIErrorBadExternalLibrary. interpreterProxy failed ifTrue:[^0]. moduleHandle = 0 ifTrue:["need to reload module" ffiModuleName := interpreterProxy fetchPointer: 1 ofObject: rcvr. (interpreterProxy isBytes: ffiModuleName) ifFalse:[^self ffiFail: FFIErrorBadExternalLibrary]. moduleLength := interpreterProxy byteSizeOf: ffiModuleName. + moduleHandle := (interpreterProxy + ioLoadModule: (interpreterProxy firstIndexableField: ffiModuleName) asInteger + OfLength: moduleLength) asInteger. - moduleHandle := interpreterProxy ioLoadModule: (self cCoerce: (interpreterProxy firstIndexableField: ffiModuleName) to:'int') OfLength: moduleLength. (interpreterProxy failed or: [moduleHandle = 0]) ifTrue: [^self ffiFail: FFIErrorModuleNotFound]. "failed" "and store back" ptr := interpreterProxy firstIndexableField: moduleHandlePtr. ptr at: 0 put: moduleHandle]. ^moduleHandle!
Item was changed: ----- Method: ThreadedFFIPlugin>>primitiveForceLoad (in category 'primitives') ----- primitiveForceLoad "Primitive. Force loading the receiver (an instance of ExternalLibrary)." | rcvr moduleHandlePtr moduleHandle ffiModuleName ptr | <export: true> <inline: false> + <var: #ptr type: #'sqInt *'> - <var: #ptr type: #'int *'> interpreterProxy methodArgumentCount = 0 ifFalse: [^interpreterProxy primitiveFail]. rcvr := interpreterProxy stackValue: 0. (interpreterProxy is: rcvr KindOfClass: interpreterProxy classExternalLibrary) ifFalse: [^self ffiFail: FFIErrorBadExternalLibrary]. moduleHandlePtr := interpreterProxy fetchPointer: 0 ofObject: rcvr. moduleHandle := self ffiContentsOfHandle: moduleHandlePtr errCode: FFIErrorBadExternalLibrary. interpreterProxy failed ifTrue: [^0]. ffiModuleName := interpreterProxy fetchPointer: 1 ofObject: rcvr. (interpreterProxy isBytes: ffiModuleName) ifFalse: [^self ffiFail: FFIErrorBadExternalLibrary]. + moduleHandle := (interpreterProxy + ioLoadModule: (interpreterProxy firstIndexableField: ffiModuleName) asInteger + OfLength: (interpreterProxy byteSizeOf: ffiModuleName)) asInteger. + interpreterProxy failed ifTrue: + [^self ffiFail: FFIErrorModuleNotFound]. "failed" - moduleHandle := interpreterProxy - ioLoadModule: (self cCoerce: (interpreterProxy firstIndexableField: ffiModuleName) to: #int) - OfLength: (interpreterProxy byteSizeOf: ffiModuleName). - interpreterProxy failed ifTrue:[^self ffiFail: FFIErrorModuleNotFound]. "failed" "and store back" ptr := interpreterProxy firstIndexableField: moduleHandlePtr. ptr at: 0 put: moduleHandle. ^0 "done"!
vm-dev@lists.squeakfoundation.org