#ifdef SQUEAK_BUILTIN_PLUGIN
void* SqueakFFIPrims_exports[][3] = {
{"SqueakFFIPrims", "ffiLogCallsTo", (void*)ffiLogCallsTo},
{"SqueakFFIPrims", "getModuleName", (void*)getModuleName},
{"SqueakFFIPrims", "initialiseModule", (void*)initialiseModule},
{"SqueakFFIPrims", "primitiveCallout", (void*)primitiveCallout},
{"SqueakFFIPrims", "primitiveCalloutWithArgs", (void*)primitiveCalloutWithArgs},
{"SqueakFFIPrims", "primitiveFFIAllocate", (void*)primitiveFFIAllocate},
{"SqueakFFIPrims", "primitiveFFIDoubleAt", (void*)primitiveFFIDoubleAt},
{"SqueakFFIPrims", "primitiveFFIDoubleAtPut", (void*)primitiveFFIDoubleAtPut},
{"SqueakFFIPrims", "primitiveFFIFloatAt", (void*)primitiveFFIFloatAt},
{"SqueakFFIPrims", "primitiveFFIFloatAtPut", (void*)primitiveFFIFloatAtPut},
{"SqueakFFIPrims", "primitiveFFIFree", (void*)primitiveFFIFree},
{"SqueakFFIPrims", "primitiveFFIGetLastError", (void*)primitiveFFIGetLastError},
{"SqueakFFIPrims", "primitiveFFIIntegerAt", (void*)primitiveFFIIntegerAt},
{"SqueakFFIPrims", "primitiveFFIIntegerAtPut", (void*)primitiveFFIIntegerAtPut},
{"SqueakFFIPrims", "primitiveForceLoad", (void*)primitiveForceLoad},
{"SqueakFFIPrims", "primitiveLogCallsTo", (void*)primitiveLogCallsTo},
{"SqueakFFIPrims", "setInterpreter", (void*)setInterpreter},
{NULL, NULL, NULL}
};
#endif /* ifdef SQ_BUILTIN_PLUGIN */
If primitiveCalloutWithArgs is missing then SqueakFFIPrims.c didn't get generated correctly. Go back to VMMaker and the FFIPlugin source and try to figure out why. Note that the table shouldn't be being used because the plugin is typically used as an external plugin. If you're building it in then ignore what follows and reply saying "I want an internal plugin dammit!!"
If primitiveCalloutWithArgs isn't missing then is it being exported form the module? Use nm on whatever SqueakFFIPrims is compiled to and make sure its exported. It should have something like the following:
$ nm Fast.app/Contents/Resources/SqueakFFIPrims.bundle/Contents/MacOS/SqueakFFIPrims | grep primitiveC
00004200 T _primitiveCallout
00003750 T _primitiveCalloutWithArgs
If there's a lowercase t there' figure out why it isn't being exported. e.g. EXPORT macro definition, linker commands, etc...
If it is being exported then you need to start debugging ioLoadSymbolOfLengthFromModule, because that's failing to extract the address of primitiveCalloutWithArgs from the loaded module.
HTH
Eliot