Show error messages generated from failed .so/.DLL load attempts.
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
--- $Id: InteractiveUI.hs,v 1.49 2001/02/13 18:37:53 qrczak Exp $
+-- $Id: InteractiveUI.hs,v 1.50 2001/02/14 11:03:59 sewardj Exp $
--
-- GHC Interactive User Interface
--
--
-- GHC Interactive User Interface
--
import PrelGHC ( unsafeCoerce# )
import PrelPack ( packString )
import PrelByteArr
import PrelGHC ( unsafeCoerce# )
import PrelPack ( packString )
import PrelByteArr
-import Foreign ( Ptr, nullPtr )
+import Foreign ( nullPtr )
+import CString ( peekCString )
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
else do loadObj static_ish
putStr "done.\n"
Right dll_unadorned
else do loadObj static_ish
putStr "done.\n"
Right dll_unadorned
- -> do dll_ok <- addDLL dll_unadorned
- if dll_ok
+ -> do maybe_errmsg <- addDLL dll_unadorned
+ if maybe_errmsg == nullPtr
- else do putStr "not found.\n"
+ else do str <- peekCString maybe_errmsg
+ putStr ("failed (" ++ str ++ ")\n")
- croak = throwDyn (OtherError "user specified .o/.so/.DLL cannot be found.")
+ croak = throwDyn (OtherError "user specified .o/.so/.DLL could not be loaded.")
classify a_lib
= let a_libr = reverse a_lib
classify a_lib
= let a_libr = reverse a_lib
loadClassified (Left obj_absolute_filename)
= do loadObj obj_absolute_filename
loadClassified (Right dll_unadorned)
loadClassified (Left obj_absolute_filename)
= do loadObj obj_absolute_filename
loadClassified (Right dll_unadorned)
- = do dll_ok <- addDLL dll_unadorned
- if dll_ok
+ = do maybe_errmsg <- addDLL dll_unadorned
+ if maybe_errmsg == nullPtr
- else throwDyn (OtherError ("can't find .o or .so/.DLL for: "
- ++ dll_unadorned))
+ else do str <- peekCString maybe_errmsg
+ throwDyn (OtherError ("can't find .o or .so/.DLL for: "
+ ++ dll_unadorned ++ " (" ++ str ++ ")" ))
locateOneObj :: [FilePath] -> String -> IO (Either FilePath String)
locateOneObj [] obj
locateOneObj :: [FilePath] -> String -> IO (Either FilePath String)
locateOneObj [] obj
unloadObj, -- :: String -> IO ()
lookupSymbol, -- :: String -> IO (Maybe (Ptr a))
resolveObjs, -- :: IO ()
unloadObj, -- :: String -> IO ()
lookupSymbol, -- :: String -> IO (Maybe (Ptr a))
resolveObjs, -- :: IO ()
- addDLL -- :: String -> IO Bool
+ addDLL -- :: String -> IO (Ptr CChar)
import Foreign ( Ptr, nullPtr )
import PrelByteArr
import PrelPack (packString)
import Foreign ( Ptr, nullPtr )
import PrelByteArr
import PrelPack (packString)
else return ()
addDLL str = do
else return ()
addDLL str = do
- r <- c_addDLL (packString str)
- return (r == 0)
+ maybe_errmsg <- c_addDLL (packString str)
+ return maybe_errmsg
type PackedString = ByteArray Int
type PackedString = ByteArray Int
initLinker :: IO ()
foreign import "addDLL" unsafe
initLinker :: IO ()
foreign import "addDLL" unsafe
- c_addDLL :: PackedString -> IO Int
+ c_addDLL :: PackedString -> IO (Ptr CChar)