Segmentation fault in program

Sigbjorn Finne sigbjorn_finne at hotmail.com
Fri Feb 9 06:22:29 EST 2001


"T.J. Brown" t_j_b_2 at yahoo.com writes:
>
> I'm trying to write a program (in C) that calls a
> function that is implemented in Haskell.
> ...
> The problem I'm seeing is that depending
> on the size of the buffer, the program segmentation
> faults.  I don't see any obvious reason that this is
> happening so I'm wondering if something isn't going
> wrong during the compilation.

Hi,

your converttst.c contains the following decl:

extern void startupHaskell (int argc, char* argv[], void* rootMod);
void* __init_Main;

That won't work, as the root module argument needs to point to
something valid. Rewrite it to:

extern void startupHaskell (int argc, char* argv[], void* rootMod);
extern void* __init_Convert;

and substitute __init_Main with __init_Convert wherever it is used
in the C code.

However, if you recompile and link, I believe you'll see it crashing
even more regularly - I suspect this is due to a bug in the GHC
RTS (at least 4.08.1's, don't know if 4.08.2 has fixed this) Attached
is a simpler program that shows up the problem.

> Also, is there a better way of passing a buffer
> between C and Haskell?  For instance, is there a way
> to convert the buffer into a list automatically?

Yes, you can simplify Convert.convert a little, but your
example highlights a dark corner that HaskellDirect doesn't
implement fully, i.e., dependent arguments in Haskell
server proxies. You *should* be able to just say

    [pure]
    void convert([in,length_is(len)] unsigned long *inBuf,
                        [in] int len,
                        [out,length_is(len*4)] unsigned char *outBuf);

and have the generated Haskell code expect Convert.convert
to have the signature ([Word32] -> [Word8]) - I'm working
on implementing this at this very moment.

--sigbjorn


-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.tar.gz
Type: application/x-gzip
Size: 529 bytes
Desc: not available
Url : http://www.haskell.org/pipermail/glasgow-haskell-bugs/attachments/20010209/ce694966/test.tar.bin


More information about the Glasgow-haskell-bugs mailing list