This is the mail archive of the libffi-discuss@sourceware.org mailing list for the libffi project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
> Some time ago ghc project[1] switched to libffi to handle
> foreign calls from/to external world. When I tried ghc on
> powerpc64 I got some problems which I believe are result
> of that switch.
>
> In one of FFI call types ghc uses C code generation and produces
> following code:
>
> void haskell_closure_called_from_c(
> void *cif __UNUSED__,
> void* resp,
> void** args,
> void* haskell_runtime)
> {
> HaskellObj ret;
> HsInt32 cret;
>
> ret = RT_CALL(haskell_runtime(args));
>
> cret=rts_getInt32(ret);
> *(HsInt32*)resp = cret; /* <- is that corrct code? */
> }
Just looked at cls_ushort.c(and other integrals) test:
*(ffi_arg*)resp = *(unsigned short *)args[0];
and cls_float.c
*(float *)resp = *(float *)args[0];
Integrals seem to strangely be casted to 'ffi_arg *'(long *) while FPU ones
are casted to their real type. It's normal (but undocumented) or it's a
horrible inconsistency bug?
Thanks!
--
Sergei
Attachment:
signature.asc
Description: PGP signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |