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");
}