X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fghci%2FObjLink.lhs;h=48deb46783a9c9d210455b83c0ac12e76ac0510b;hp=d5e0f7bd926bbe97722cfc62e90531e2b9ed2ac1;hb=6ef2fc2ebf11755a54386f8e317d83cb19913be1;hpb=604121dfc02eaf2ba60d018bbc7f4c7b3e0698dd diff --git a/compiler/ghci/ObjLink.lhs b/compiler/ghci/ObjLink.lhs index d5e0f7b..48deb46 100644 --- a/compiler/ghci/ObjLink.lhs +++ b/compiler/ghci/ObjLink.lhs @@ -17,7 +17,8 @@ module ObjLink ( loadObj, -- :: String -> IO () unloadObj, -- :: String -> IO () insertSymbol, -- :: String -> String -> Ptr a -> IO () - insertStableSymbol, -- :: String -> String -> a -> IO () +-- Suspicious; see defn +-- insertStableSymbol, -- :: String -> String -> a -> IO () lookupSymbol, -- :: String -> IO (Maybe (Ptr a)) resolveObjs -- :: IO SuccessFlag ) where @@ -43,12 +44,14 @@ insertSymbol obj_name key symbol withCString str $ \c_str -> c_insertSymbol c_obj_name c_str symbol +{- Deeply suspicious use of unsafeCoerce#; should use makeStablePtr# insertStableSymbol :: String -> String -> a -> IO () insertStableSymbol obj_name key symbol = let str = prefixUnderscore key in withCString obj_name $ \c_obj_name -> withCString str $ \c_str -> c_insertStableSymbol c_obj_name c_str (Ptr (unsafeCoerce# symbol)) +-} lookupSymbol :: String -> IO (Maybe (Ptr a)) lookupSymbol str_in = do @@ -98,8 +101,9 @@ resolveObjs = do foreign import ccall unsafe "addDLL" c_addDLL :: CString -> IO CString foreign import ccall unsafe "initLinker" initObjLinker :: IO () foreign import ccall unsafe "insertSymbol" c_insertSymbol :: CString -> CString -> Ptr a -> IO () -foreign import ccall unsafe "insertStableSymbol" c_insertStableSymbol - :: CString -> CString -> Ptr a -> IO () +-- Suspicious: should take a stable pointer +-- foreign import ccall unsafe "insertStableSymbol" c_insertStableSymbol +-- :: CString -> CString -> Ptr a -> IO () foreign import ccall unsafe "lookupSymbol" c_lookupSymbol :: CString -> IO (Ptr a) foreign import ccall unsafe "loadObj" c_loadObj :: CString -> IO Int foreign import ccall unsafe "unloadObj" c_unloadObj :: CString -> IO Int