diff --git a/arith/Arith.hs b/arith/Arith.hs index d91ce48..03f8c1d 100644 --- a/arith/Arith.hs +++ b/arith/Arith.hs @@ -311,9 +311,6 @@ symbolFromProcess sym = (\addr -> JIT.JITSymbol addr JIT.defaultJITSymbolFlags) <$> JIT.getSymbolAddressInProcess sym -resolv :: JIT.IRCompileLayer l -> JIT.SymbolResolver -resolv cl = JIT.SymbolResolver (\sym -> JIT.findSymbol cl sym True) - printIR :: MonadIO m => ByteString -> m () printIR = liftIO . BS.putStrLn . ("\n*** LLVM IR ***\n\n" <>) @@ -337,12 +334,14 @@ withSimpleJIT expr doFun = do printExpr expr printIR asm JIT.withModuleKey es $ \k -> - JIT.withModule compileLayer k mod' $ do + JIT.withSymbolResolver es (JIT.SymbolResolver (resolver compileLayer)) $ \sresolver -> do fSymbol <- JIT.mangleSymbol compileLayer "f" - Right (JIT.JITSymbol fnAddr _) <- JIT.findSymbol compileLayer fSymbol True - let f = mkDoubleFun . castPtrToFunPtr $ wordPtrToPtr fnAddr - liftIO (putStrLn "*** Result ***\n") - evaluate $ force (doFun f) + modifyIORef' resolvers (Map.insert k sresolver) + JIT.withModule compileLayer k mod' $ do + Right (JIT.JITSymbol fnAddr _) <- JIT.findSymbol compileLayer fSymbol True + let f = mkDoubleFun . castPtrToFunPtr $ wordPtrToPtr fnAddr + liftIO (putStrLn "*** Result ***\n") + evaluate $ force (doFun f) -- * Utilities diff --git a/orc/Main.hs b/orc/Main.hs index 8cd9e08..bc0fec8 100644 --- a/orc/Main.hs +++ b/orc/Main.hs @@ -76,13 +76,14 @@ eagerJit amod = do withModuleKey es $ \k -> withSymbolResolver es (SymbolResolver (resolver compileLayer)) $ \sresolver -> do modifyIORef' resolvers (Map.insert k sresolver) - rsym <- findSymbol compileLayer mainSymbol True - case rsym of - Left err -> do - print err - Right (JITSymbol mainFn _) -> do - result <- mkMain (castPtrToFunPtr (wordPtrToPtr mainFn)) - print result + withModule compileLayer k mod $ do + rsym <- findSymbol compileLayer mainSymbol True + case rsym of + Left err -> do + print err + Right (JITSymbol mainFn _) -> do + result <- mkMain (castPtrToFunPtr (wordPtrToPtr mainFn)) + print result main :: IO () main = do