X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FException.cmm;h=c2f0dde6752ed815c4432ebf8514ccbb64044501;hb=7ba02f08d722982bfdb54c28b8a9cbd49b1fdb5f;hp=6815b791739a5fc1c3c5d1e364cd9ea22d3f68fd;hpb=6ea3a1ac9007c48302f886da6923ac68f4e7da6d;p=ghc-hetmet.git diff --git a/rts/Exception.cmm b/rts/Exception.cmm index 6815b79..c2f0dde 100644 --- a/rts/Exception.cmm +++ b/rts/Exception.cmm @@ -14,7 +14,7 @@ #include "RaiseAsync.h" #ifdef __PIC__ -import base_GHCziBase_True_closure; +import ghczmprim_GHCziBool_True_closure; #endif /* ----------------------------------------------------------------------------- @@ -214,6 +214,11 @@ killThreadzh_fast * If the exception went to a catch frame, we'll just continue from * the handler. */ + loop: + if (StgTSO_what_next(target) == ThreadRelocated::I16) { + target = StgTSO_link(target); + goto loop; + } if (target == CurrentTSO) { SAVE_THREAD_STATE(); /* ToDo: what if the current thread is blocking exceptions? */ @@ -435,8 +440,8 @@ retry_pop_stack: Sp(5) = stg_raise_ret_info; Sp(4) = stg_noforceIO_info; // required for unregisterised Sp(3) = exception; // the AP_STACK - Sp(2) = base_GHCziBase_True_closure; // dummy breakpoint info - Sp(1) = base_GHCziBase_True_closure; // True <=> a breakpoint + Sp(2) = ghczmprim_GHCziBool_True_closure; // dummy breakpoint info + Sp(1) = ghczmprim_GHCziBool_True_closure; // True <=> a breakpoint R1 = ioAction; jump RET_LBL(stg_ap_pppv); }