summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
authorBen Gamari <bgamari.foss@gmail.com>2017-09-21 18:04:03 -0400
committerBen Gamari <ben@smart-cactus.org>2017-09-21 20:12:51 -0400
commit760b9a363cd4e9287a05b23c74357db0e815bdf3 (patch)
treead9a0848e00b36470a5b7b9f29b36a7fa289ceaa /rts
parentfeac0a3bc69fd376231aa3c83d031c131156ddb9 (diff)
downloadhaskell-760b9a363cd4e9287a05b23c74357db0e815bdf3.tar.gz
rts: Set unwind information for remaining stack frames
Reviewers: austin, erikd, simonmar Reviewed By: simonmar Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3985
Diffstat (limited to 'rts')
-rw-r--r--rts/Exception.cmm3
-rw-r--r--rts/PrimOps.cmm1
-rw-r--r--rts/StgMiscClosures.cmm3
3 files changed, 6 insertions, 1 deletions
diff --git a/rts/Exception.cmm b/rts/Exception.cmm
index a27227d547..4970aa25e4 100644
--- a/rts/Exception.cmm
+++ b/rts/Exception.cmm
@@ -110,6 +110,7 @@ INFO_TABLE_RET(stg_unmaskAsyncExceptionszh_ret, RET_SMALL, W_ info_ptr)
INFO_TABLE_RET(stg_maskAsyncExceptionszh_ret, RET_SMALL, W_ info_ptr)
return (P_ ret)
{
+ unwind Sp = Sp + WDS(1);
StgTSO_flags(CurrentTSO) =
%lobits32(
TO_W_(StgTSO_flags(CurrentTSO))
@@ -122,6 +123,7 @@ INFO_TABLE_RET(stg_maskAsyncExceptionszh_ret, RET_SMALL, W_ info_ptr)
INFO_TABLE_RET(stg_maskUninterruptiblezh_ret, RET_SMALL, W_ info_ptr)
return (P_ ret)
{
+ unwind Sp = Sp + WDS(1);
StgTSO_flags(CurrentTSO) =
%lobits32(
(TO_W_(StgTSO_flags(CurrentTSO))
@@ -430,6 +432,7 @@ section "data" {
INFO_TABLE_RET(stg_raise_ret, RET_SMALL, W_ info_ptr, P_ exception)
return (P_ ret)
{
+ unwind Sp = Sp + WDS(2);
W_[no_break_on_exception] = 1;
jump stg_raisezh (exception);
}
diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm
index 3d4bea433d..6047b49aca 100644
--- a/rts/PrimOps.cmm
+++ b/rts/PrimOps.cmm
@@ -1004,6 +1004,7 @@ INFO_TABLE_RET(stg_catch_retry_frame, CATCH_RETRY_FRAME,
alt_code))
return (P_ ret)
{
+ unwind Sp = Sp + SIZEOF_StgCatchRetryFrame;
W_ r;
gcptr trec, outer, arg;
diff --git a/rts/StgMiscClosures.cmm b/rts/StgMiscClosures.cmm
index 88371f2109..361989d0d2 100644
--- a/rts/StgMiscClosures.cmm
+++ b/rts/StgMiscClosures.cmm
@@ -26,7 +26,7 @@ INFO_TABLE_RET (stg_stack_underflow_frame, UNDERFLOW_FRAME,
W_ info_ptr, P_ unused)
/* no args => explicit stack */
{
- unwind UnwindReturnReg = return;
+ unwind Sp = W_[Sp + WDS(2)];
W_ new_tso;
W_ ret_off;
@@ -61,6 +61,7 @@ INFO_TABLE_RET (stg_restore_cccs, RET_SMALL, W_ info_ptr, W_ cccs)
INFO_TABLE_RET (stg_restore_cccs_eval, RET_SMALL, W_ info_ptr, W_ cccs)
return (P_ ret)
{
+ unwind Sp = Sp + WDS(2);
#if defined(PROFILING)
CCCS = cccs;
#endif