Hi,

am I understanding the problem correctly: If one calls a variadic C
function with libffi, one should use ffi_prep_cif_variadic() instead of
ffi_prep_cif(), otherwise bad things may happen. Whether the function is
variadic or not might not be known when looking at the source that calls
ffi_prep_cif(), e.g. in the implementation of the Haskell Foreign
Function Interface.

In GHC itself, ffi_prep_cif is called
 * in ./rts/Adjustor.c when provding Haskell code to C calls; as Haskell
functions are never variadic, this is not a problem.
 * in ./compiler/ghci/LibFFI.hsc in the Haskell function
prepForeignCall, called by generateCCall
in ./compiler/ghci/ByteCodeGen.lhs. It seems that this is only relevant
for ghci.

This seems to imply that normal compiled Haskell code, even code that
uses the Foreign Function Interface, does never call ffi_prep_cif and is
therefore not affected by the problem at hand. Does this sound
plausible?

Greetings,
Joachim

-- 
Joachim "nomeata" Breitner
Debian Developer
  [email protected] | ICQ# 74513189 | GPG-Keyid: 4743206C
  JID: [email protected] | http://people.debian.org/~nomeata

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to