X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mate.git;a=blobdiff_plain;f=Mate%2FX86TrapHandling.hs;fp=Mate%2FX86TrapHandling.hs;h=b7b81d679e2081f8a241e3aabf25dd27fe613fec;hp=5f993a6203304533635681149baa6ed09655d574;hb=34939ca19d5f608efb04dcb2cdd97dd3f922d4a6;hpb=60297de17a166656519429b9652c0cf059e900f1 diff --git a/Mate/X86TrapHandling.hs b/Mate/X86TrapHandling.hs index 5f993a6..b7b81d6 100644 --- a/Mate/X86TrapHandling.hs +++ b/Mate/X86TrapHandling.hs @@ -26,9 +26,9 @@ import Harpy.X86Disassembler foreign import ccall "register_signal" register_signal :: IO () -foreign export ccall mateHandler :: CPtrdiff -> CPtrdiff -> CPtrdiff -> CPtrdiff -> IO CPtrdiff -mateHandler :: CPtrdiff -> CPtrdiff -> CPtrdiff -> CPtrdiff -> IO CPtrdiff -mateHandler reip reax rebx resi = do +foreign export ccall mateHandler :: CPtrdiff -> CPtrdiff -> CPtrdiff -> CPtrdiff -> CPtrdiff -> IO CPtrdiff +mateHandler :: CPtrdiff -> CPtrdiff -> CPtrdiff -> CPtrdiff -> CPtrdiff -> IO CPtrdiff +mateHandler reip reax rebx resi resp = do tmap <- getTrapMap let reipw32 = fromIntegral reip (deleteMe, ret_nreip) <- case M.lookup reipw32 tmap of @@ -40,6 +40,8 @@ mateHandler reip reax rebx resi = do patchWithHarpy patcher reip >>= delTrue (Just (InstanceOf patcher)) -> patchWithHarpy (patcher reax) reip >>= delFalse + (Just (ThrowException patcher)) -> + patchWithHarpy (patcher resp) reip >>= delFalse (Just (NewObject patcher)) -> patchWithHarpy patcher reip >>= delTrue (Just (VirtualCall False mi io_offset)) ->