Profiling makes FFI Marshalling of Doubles and Int64s fail
Roberto Zunino
zunino at di.unipi.it
Tue Sep 14 19:33:16 EDT 2004
Bayley, Alistair wrote:
> I've built a small test case. When I compile with:
> ghc Main.hs test.c -o Main.exe
>
> ... the (correct) output from Main.exe is:
> 123.0
> 5678901234567890
>
> And when I compile with:
> ghc -prof Main.hs test.c -o Main.exe
>
> ... the (incorrect) output from Main.exe is:
> 1.0
> 986516178
I don't know if this helps, but I want to share it anyway.
I made some tests and saw that compiling with -fvia-C also gives the
(incorrect) 986516178, while -fasm yields the expected value. I am using
Linux/x86 here, so YMMV.
However, compiling with
ghc -prof Main.hs test.c -#include test.h
or s/-prof/-fvia-C/, works fine, provided test.h contains the correct
function prototypes.
------ test.h
long long myInt64(void);
double myDouble(void);
------
AFAICS, it seems as the asm code generator knows about the Haskell types
and therefore knows how to fetch the bits correctly, while the via-C
code generator simply uses the C function calls (without prototypes), so
functions return types are defaulted to int.
Also, you can try adding -Wall and see if the C compiler warns about
this (mine does).
The GHC user's guide (section 8.2.2) is also insightful. It seems that
using C headers is pretty much required, or, as the guide itself says,
"You're crazy not to do it". ;-)
Regards,
Roberto Zunino.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 252 bytes
Desc: OpenPGP digital signature
Url : http://www.haskell.org//pipermail/glasgow-haskell-users/attachments/20040915/5675b7cd/signature-0001.bin
More information about the Glasgow-haskell-users
mailing list