At 2002-03-22 15:52, Wolfgang Thaller wrote:

>A tar.gz file (14.5MB) of GHC for MacOS X is now available for download at:
>http://www.foldr.org/Software/Haskell/ghc/ghc-5.03-13032002-MacOSX.tar.gz

I think there's a bug in the support for 'foreign export dynamic'. The 
enclosed code crashes intermittently. Sometimes it does this:

$ ./FEDBug
Haskell: making callback
Haskell: calling callback
native: calling callback
Haskell: haskellFunction
native: done calling callback
Haskell: done

And sometimes it does this:

$ ./FEDBug
Haskell: making callback
Haskell: calling callback
native: calling callback
Illegal instruction

It's about 50/50 on my MacOS X machine. The same code never crashes on my 
Linux/i386 box.





-- 
Ashley Yakeley, Seattle WA
-- This is written in Haskell.

module Main where
        {
        import Foreign;

        foreign export dynamic makeCallback     :: IO () -> IO (Ptr ());

        foreign import callCallback :: Ptr () -> IO ();
        
        haskellFunction :: IO ();
        haskellFunction = do
                {
                putStrLn "Haskell: haskellFunction";
                };
        
        main :: IO ();
        main = do
                {
                putStrLn "Haskell: making callback";
                callback <- makeCallback haskellFunction;
                putStrLn "Haskell: calling callback";
                callCallback callback;
                putStrLn "Haskell: done";
                };
        }
test: FEDBug
        ./$<

FEDBug: FEDBug.o CallCallback.o
        ghc -fglasgow-exts -package lang -pgml$(CC) $^ FEDBug_stub.o -o $@

CallCallback.o: CallCallback.c
        $(CC) -c $< -o $@

FEDBug.o: FEDBug.hs
        ghc -fglasgow-exts -package lang -pgmc$(CC) -pgma$(CC) -c $< -o $@

clean:
        rm -f *.o *.hi *_stub.* FEDBug
#include <stdio.h>

void callCallback(void (*f) ())
        {
        printf("native: calling callback\n");
        f();
        printf("native: done calling callback\n");
        }

Reply via email to