[squeak-dev] FFI | How to call a function that expects a "long" argument in C?
Marcel Taeumel
marcel.taeumel at hpi.de
Tue Jun 9 17:19:16 UTC 2020
Hi, there.
I want to understand how data models for 64-bit influence the image side of Squeak FFI.
https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models [https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models]
I discovered that there are test functions in the SqueakFFIPrims plugin (sqFFITestFuncs.c) that expect actual "long" types. So, I assume that that is the "long" from C, not Squeak FFI, and thus different on 64-bit Windows vs. 64-bit Unix.
ffiTest4LongSum
ffiTestLongs8
ffiTest8longSum
ffiTestMixedDoublesAndLongs (!!!)
Only the last one is actually called from FFI Tests, which could be worse. Because there is not yet a mechanism in place that considers the data model an 64-bit platforms.
So, I think that an atomic type alias for such a C "long" argument could be defined like this:
(wordSize = 4 or: [platformName = 'Win32'])
ifTrue: ['long' "meaning 'int' in the plugin]
ifFalse: ['longlong']
Yet, I have no clue on how to name such a type alias. long_t ? native_long_t ? Squeak FFI's 'long' is already taken, and it is always 4 byte.
Would it make sense to also query the data model through a primitive and add that to FFIPlatformDescription? LLP64, LP64, ILP64, SILP64, ...
Best,
Marcel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200609/ceec8352/attachment.html>
More information about the Squeak-dev
mailing list
|