at compile-time, the java PC to native PC map is not complete yet.
Just m -> do
let mi = MethodInfo "main" bclspath $ methodSignature m
rawmethod <- parseMethod cls "main" $ methodSignature m
Just m -> do
let mi = MethodInfo "main" bclspath $ methodSignature m
rawmethod <- parseMethod cls "main" $ methodSignature m
- entry <- compileBB rawmethod mi
+ entry <- compileBB mi rawmethod mi
addMethodRef entry mi [bclspath]
printfInfo "executing `main' now:\n"
executeFuncPtr $ fst entry
addMethodRef entry mi [bclspath]
printfInfo "executing `main' now:\n"
executeFuncPtr $ fst entry
Just m -> do
rawmethod <- parseMethod (ciFile ci) "<clinit>" $ MethodSignature [] ReturnsVoid
let mi = MethodInfo "<clinit>" path (methodSignature m)
Just m -> do
rawmethod <- parseMethod (ciFile ci) "<clinit>" $ MethodSignature [] ReturnsVoid
let mi = MethodInfo "<clinit>" path (methodSignature m)
- entry <- compileBB rawmethod mi
+ -- TODO(bernhard): test exception handling in static initalizer
+ entry <- compileBB mi rawmethod mi
addMethodRef entry mi [path]
printfCp $ printf "executing static initializer from %s now\n" (toString path)
executeFuncPtr $ fst entry
addMethodRef entry mi [path]
printfCp $ printf "executing static initializer from %s now\n" (toString path)
executeFuncPtr $ fst entry
return nf'
else do
rawmethod <- parseMethod cls' method sig
return nf'
else do
rawmethod <- parseMethod cls' method sig
- entry <- compileBB rawmethod (MethodInfo method (thisClass cls') sig)
+ entry <- compileBB mi rawmethod (MethodInfo method (thisClass cls') sig)
addMethodRef entry mi clsnames
return entry
Nothing -> error $ show method ++ " not found. abort"
addMethodRef entry mi clsnames
return entry
Nothing -> error $ show method ++ " not found. abort"
setMethodMap $ mmap `M.union` newmap
setMethodMap $ mmap `M.union` newmap
-compileBB :: RawMethod -> MethodInfo -> IO (NativeWord, JpcNpcMap)
-compileBB rawmethod methodinfo = do
+compileBB :: MethodInfo -> RawMethod -> MethodInfo -> IO (NativeWord, JpcNpcMap)
+compileBB mi rawmethod methodinfo = do
tmap <- getTrapMap
cls <- getClassFile (methClassName methodinfo)
printfJit $ printf "emit code of \"%s\" from \"%s\":\n" (toString $ methName methodinfo) (toString $ methClassName methodinfo)
tmap <- getTrapMap
cls <- getClassFile (methClassName methodinfo)
printfJit $ printf "emit code of \"%s\" from \"%s\":\n" (toString $ methName methodinfo) (toString $ methClassName methodinfo)
- let ebb = emitFromBB cls rawmethod
+ let ebb = emitFromBB cls mi rawmethod
let cgconfig = defaultCodeGenConfig { codeBufferSize = fromIntegral $ rawCodeLength rawmethod * 32 }
(jnmap, Right right) <- runCodeGenWithConfig ebb () M.empty cgconfig
let cgconfig = defaultCodeGenConfig { codeBufferSize = fromIntegral $ rawCodeLength rawmethod * 32 }
(jnmap, Right right) <- runCodeGenWithConfig ebb () M.empty cgconfig
addMethodRef :: (NativeWord, JpcNpcMap) -> MethodInfo -> [B.ByteString] -> IO ()
addMethodRef :: (NativeWord, JpcNpcMap) -> MethodInfo -> [B.ByteString] -> IO ()
-compileBB :: RawMethod -> MethodInfo -> IO (NativeWord, JpcNpcMap)
+compileBB :: MethodInfo -> RawMethod -> MethodInfo -> IO (NativeWord, JpcNpcMap)
executeFuncPtr :: NativeWord -> IO ()
getMethodEntry :: MethodInfo -> IO (CPtrdiff, JpcNpcMap)
executeFuncPtr :: NativeWord -> IO ()
getMethodEntry :: MethodInfo -> IO (CPtrdiff, JpcNpcMap)
type CompileInfo = (EntryPoint, Int, TrapMap)
type CompileInfo = (EntryPoint, Int, TrapMap)
-emitFromBB :: Class Direct -> RawMethod -> CodeGen e JpcNpcMap (CompileInfo, [Instruction])
-emitFromBB cls method = do
+emitFromBB :: Class Direct -> MethodInfo -> RawMethod -> CodeGen e JpcNpcMap (CompileInfo, [Instruction])
+emitFromBB cls miThis method = do
let keys = M.keys hmap
llmap <- mapM (newNamedLabel . (++) "bb_" . show) keys
let lmap = zip keys llmap
let keys = M.keys hmap
llmap <- mapM (newNamedLabel . (++) "bb_" . show) keys
let lmap = zip keys llmap
emit' ATHROW = do
trapaddr <- emitSigIllTrap 2
let patcher resp reip = do
emit' ATHROW = do
trapaddr <- emitSigIllTrap 2
let patcher resp reip = do
+ (_, jnmap) <- liftIO $ getMethodEntry miThis
error "no athrow for you, sorry"
emitSigIllTrap 2
return reip
error "no athrow for you, sorry"
emitSigIllTrap 2
return reip