X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fghci%2FLinker.lhs;h=238d0094f054c30896233d0c76e20d14678f9497;hb=e20d242756f7fb9de33ff5c8229b562fa1bec18b;hp=8b0d15a31e942d3c1dcf8a9ba58a60d47f19bbb3;hpb=f55c3fce9c692c013346da13f1eb28263d87b6ad;p=ghc-hetmet.git diff --git a/ghc/compiler/ghci/Linker.lhs b/ghc/compiler/ghci/Linker.lhs index 8b0d15a..238d009 100644 --- a/ghc/compiler/ghci/Linker.lhs +++ b/ghc/compiler/ghci/Linker.lhs @@ -5,12 +5,13 @@ \begin{code} {-# OPTIONS -#include "Linker.h" #-} + module Linker ( initLinker, -- :: IO () loadObj, -- :: String -> IO () unloadObj, -- :: String -> IO () lookupSymbol, -- :: String -> IO (Maybe (Ptr a)) - resolveObjs, -- :: IO () + resolveObjs, -- :: IO Bool addDLL -- :: String -> IO (Ptr CChar) ) where @@ -19,12 +20,14 @@ import Foreign ( Ptr, nullPtr ) import PrelByteArr import PrelPack (packString) import Panic ( panic ) +import DriverUtil ( prefixUnderscore ) -- --------------------------------------------------------------------------- -- RTS Linker Interface -- --------------------------------------------------------------------------- -lookupSymbol str = do +lookupSymbol str_in = do + let str = prefixUnderscore str_in addr <- c_lookupSymbol (packString str) if addr == nullPtr then return Nothing @@ -44,12 +47,10 @@ unloadObj str = do resolveObjs = do r <- c_resolveObjs - if (r == 0) - then panic "resolveObjs: failed" - else return () + return (r /= 0) -- returns True <=> success -addDLL str = do - maybe_errmsg <- c_addDLL (packString str) +addDLL path lib = do + maybe_errmsg <- c_addDLL (packString path) (packString lib) return maybe_errmsg type PackedString = ByteArray Int @@ -70,6 +71,5 @@ foreign import "initLinker" unsafe initLinker :: IO () foreign import "addDLL" unsafe - c_addDLL :: PackedString -> IO (Ptr CChar) - + c_addDLL :: PackedString -> PackedString -> IO (Ptr CChar) \end{code}