#include "Cmm.h"
#include "RaiseAsync.h"
+#ifdef __PIC__
+import base_GHCziBase_True_closure;
+#endif
+
/* -----------------------------------------------------------------------------
Exception Primitives
* 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? */
// be per-thread.
W_[rts_stop_on_exception] = 0;
("ptr" ioAction) = foreign "C" deRefStablePtr (W_[rts_breakpoint_io_action] "ptr") [];
- Sp = Sp - WDS(6);
- Sp(5) = exception;
- Sp(4) = stg_raise_ret_info;
+ Sp = Sp - WDS(7);
+ Sp(6) = exception;
+ 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
R1 = ioAction;
- jump stg_ap_pppv_info;
+ jump RET_LBL(stg_ap_pppv);
}
}