"Hoehle, Joerg-Cyril" Joerg-Cyril.Hoehle@t-systems.com writes:
Uhoh, then it's likely not the FFI. Please investigate.
It looks like the problem is with FFI:UNSIGNED-FOREIGN-ADDRESS and FFI:FOREIGN-ADDRESS-UNSIGNED expecting and returning 32-bit integers:
[ ...with *print-base* set to 16... ] CFFI[47]> (ffi:with-foreign-object (x 'ffi:int) (print (ffi:foreign-address x)) (print (ffi:foreign-address-unsigned (ffi:foreign-address x))) nil)
#<FOREIGN-ADDRESS #x00007FFFFFEF3750> FFEF3750 NIL
CFFI[49]> (ffi:unsigned-foreign-address #x100000000)
*** - not a 32-bit integer: 100000000 The following restarts are available: ABORT :R1 ABORT Break 1 CFFI[50]>
This breaks CFFI-SYS:INC-POINTER which ends up returning bogus pointers because the high 32 bits have been truncated.
James