Floating-point variadic function call
Damien Thébault
damien@dtbo.net
Mon Oct 10 07:04:00 GMT 2016
Hello,
I am trying to use libffi to call various functions, and my first try
was with printf(). As this is a variadic function, I used
ffi_prep_cif_var(). Everything seems to be working, except with floats,
which are not working, and are even generating wrong memory accesses
(detected by valgrind).
A similar function with ffi_prep_cif() and floats is working properly.
Could type promotion from float to double be the issue here ?
Does libffi handle type promotion in variadic calls or is it the
caller's job ?
I tested on a x86_64 computer both 64-bit and 32-bit versions (the
latter compiled with -m32) as well as ARM under qemu.
In all those cases, I didn't get the proper result with floats while
doubles are ok, as well as chars.
I've attached a sample source file that reproduces the problem and here
is the output of one test run:
$ gcc $(pkg-config --cflags --libs libffi) -std=c99 -pedantic -Wall -Wextra libffi_variadic_printf.c -o libffi_variadic_printf
$ ./libffi_variadic_printf
Non-variadic call:
[1.100000,2.200000,3.300000,4.400000,5.500000,6.600000,7.700000,8.800000,9.900000]
result is 83
Variadic call:
[0.000000,0.000000,0.000000,0.000000,0.000000,91750.390826,0.000000,0.000000,0.000000]
result is 87
Thanks,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: libffi_variadic_printf.c
Type: text/x-c
Size: 2018 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libffi-discuss/attachments/20161010/8f7e81a0/attachment.bin>
More information about the Libffi-discuss
mailing list