Calvin Rose
f33c381043
Improve sysv64 classify algorithm.
2022-09-20 09:45:17 -05:00
Calvin Rose
3479841c77
Address #1034 - add handling for 8-16 byte structs in FFI.
2022-09-20 09:28:46 -05:00
bakpakin
e326071c35
Fix void returns in windows FFI - address #1025
2022-09-15 13:51:11 -05:00
Calvin Rose
1aea5ee007
Remove stack inversion code for sysv64 FFI.
2022-08-16 12:38:44 -05:00
bakpakin
9a6d2a7b32
Fix FFI for reference return values and stack parameter passing.
2022-08-14 15:20:30 -05:00
bakpakin
f8a9efa8e4
Allow binding pre-loaded symbols in windows FFI.
...
Mimic the posix RTLD_NOW setting for dlopen by iterating
opened DLLs to look for symbols.
2022-08-14 13:26:13 -05:00
Calvin Rose
fb5b056f7b
Address #1001 - don't process names passed to dlopen.
2022-07-19 20:04:17 -05:00
Calvin Rose
e4bafc621a
Remove ssize_t usage.
2022-06-20 11:09:41 -05:00
Calvin Rose
47e91bfd89
Fix docstring.
2022-06-19 18:52:37 -05:00
Calvin Rose
eecc388ebd
Add support for 0-element arrays in FFI.
...
Allows for flexible array member construct mapping.
2022-06-19 16:29:55 -05:00
Calvin Rose
cfaae47cea
Fix trailing :pack-all or :pack in struct.
2022-06-19 13:06:19 -05:00
Calvin Rose
c1a0352592
Fix unset field in JanetFFIType.
2022-06-19 12:58:45 -05:00
Calvin Rose
a6f93efd39
Support for array types in ffi.
2022-06-19 08:03:32 -05:00
Calvin Rose
20511cf608
Cast NULL pointer to nil in return in ffi.
2022-06-18 16:53:01 -05:00
Calvin Rose
1a1dd39367
Use __builtin_alloca if no other option.
2022-06-18 13:54:47 -05:00
Calvin Rose
589981bdcb
BSD systems put alloca in the stdlib
2022-06-18 12:18:06 -05:00
Calvin Rose
89546776b2
alloca
2022-06-18 12:15:16 -05:00
Calvin Rose
e37be627e0
Allow loading current process on windows as well.
2022-06-18 10:31:00 -05:00
Calvin Rose
a1172529bf
Fix named arguments with optional args.
2022-06-18 09:46:28 -05:00
Calvin Rose
c9586d39ed
Add a :none calling convention.
...
The ffi module is useful even when true ffi calls
are not yet implemented. This lets the ffi be enabled
on any architecture, albeit with a degraded feature set
where calling conventions are not implemented.
2022-06-12 10:12:45 -05:00
Calvin Rose
2e9f67f4e4
Change all "native-*" to ffi/. Move new dll loading funcs.
...
native-close, raw-native and native-lookup have become
ffi/close, ffi/native, and ffi/lookup instead.
The new ffi module will be useful for any architecture even if we don't
support making calls to certain functions. We can simple add a
do-nothing calling convetion that panics on call. ffi/read and ffi/write
are useful in their own right.
2022-06-12 10:02:02 -05:00
Calvin Rose
e318170fea
Begin working on windows calling convetion.
...
Also remove inline assembly for making sysv64 calls.
Instead, use crafted function signatures to set all needed registers.
2022-06-12 09:16:10 -05:00
Calvin Rose
73c4289792
Fix define check.
2022-06-11 21:50:34 -05:00
Calvin Rose
ea45d7ee47
Convert to one big blob of assembly for sysv cc.
...
Also begin working on win64 calling convention.
2022-06-11 21:43:35 -05:00
Calvin Rose
458c2c6d88
Make calling convention optional for trampoline
2022-06-11 15:47:51 -05:00
Calvin Rose
0cc53a8964
Get a GTK example working. Good proof of concept.
2022-06-11 14:47:35 -05:00
Calvin Rose
0bc96304a9
Add r32 and r64 aliases for real numbers in ffi types.
2022-06-11 09:40:37 -05:00
Calvin Rose
181f0341f5
Add :pack and :pack-all keywords to allow for struct packing.
...
Syntax may need some work but covers both fully packed structs
as well as packing of individual members.
2022-06-10 18:53:22 -05:00
Calvin Rose
49bfe80191
Make sure void return types work as expected.
2022-06-10 12:33:01 -05:00
Calvin Rose
a5def77bfe
Add support for struct return values.
2022-06-10 12:25:08 -05:00
Calvin Rose
9ecb5b4791
Add native-read function as inverse to native-write.
2022-06-10 09:38:52 -05:00
Calvin Rose
1cc48a370a
Add native-write, which will write structs to buffers.
...
Useful for testing as well as useful in its own right. Begs
for an inverse, native-read which would convert byte data
to native structs.
2022-06-10 08:46:20 -05:00
Calvin Rose
f1ec8d1e11
Beginning of struct support.
...
TODO:
- struct return values
- support for unions in signatures
- more testing
- complex types
- packed structs
- writing structs to buffers (useful and we have most of the machinery).
2022-06-09 20:27:56 -05:00
Calvin Rose
9d9cb378ff
Don't include alloca.h, not in MSVC.
2022-06-08 09:59:13 -05:00
Calvin Rose
f92aac14aa
Only enable FFI on x86-64, non-windows OSes.
2022-06-08 09:50:31 -05:00
Calvin Rose
3f27d78ab5
Add some FFI testing and more improvements to sysv abi.
...
Add support for integer return and floating point return variants, as
well as arguments on the stack. Start flushing out struct arguments.
Still needed:
- structs (packed and unpacked)
- complex numbers
- long doubles
- MASM alternative for windows (you can technically use sysv abi on
windows)
- more calling conventions.
2022-06-08 09:44:49 -05:00
Calvin Rose
282d1ba22f
Implement sys v abi on x64 partially.
2022-06-06 18:54:17 -05:00