> when I call from Haskell into C, stop it there, and use a 
> debugger (e.g 
> gdb) to look at the stack, it looks all broken. Here is an example:
> 
> #0  c_init () at c.c:5
> #1  0x08048f14 in ssM_fast1 ()
> #2  0x0804a248 in sakt_ret ()
> #3  0x04c58308 in ?? ()
> 
> (c_init is a C function on which I've set a breakpoint). Now, I don't 
> expect to see meaningful stack frames from Haskell, but I am calling 
> into Haskell from C, and I would expect the C functions calling into 
> Haskell to appear on the stack frame. What is happening? How does 
> Haskell manage to still return to C when the stack looks like that?

GHC's runtime system leaves a hole on the C stack to use for temporary
storage while running Haskell code, and then it doesn't move the C stack
pointer at all until calling out to C or returning to the runtime.  Gdb
won't be able to traverse the hole to find the enclosing stack frames.

Cheers,
        Simon
_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to