summaryrefslogtreecommitdiff
path: root/rts/HeapStackCheck.cmm
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2015-07-06 14:09:50 +0100
committerSimon Marlow <marlowsd@gmail.com>2015-07-06 15:16:06 +0100
commit9180df19dd938901791b84ef7f260f7e2f1f894f (patch)
treef6956c83ac5a7d04fa08c491c62bc04093731b4d /rts/HeapStackCheck.cmm
parenta07898e47709d643ffba1bffd83411fc3146ed27 (diff)
downloadhaskell-9180df19dd938901791b84ef7f260f7e2f1f894f.tar.gz
Fix offset calculation in __stg_gc_fun
Summary: We were not treating the offset as a signed field in this rare case, so it would blow up if the offset was negative. Test Plan: Looked at the assembly Reviewers: austin, bgamari, rwbarton Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D1042
Diffstat (limited to 'rts/HeapStackCheck.cmm')
-rw-r--r--rts/HeapStackCheck.cmm5
1 files changed, 3 insertions, 2 deletions
diff --git a/rts/HeapStackCheck.cmm b/rts/HeapStackCheck.cmm
index a1e18ca0f0..9430a09e36 100644
--- a/rts/HeapStackCheck.cmm
+++ b/rts/HeapStackCheck.cmm
@@ -405,8 +405,9 @@ __stg_gc_fun /* explicit stack */
if (type == ARG_GEN_BIG) {
#ifdef TABLES_NEXT_TO_CODE
// bitmap field holds an offset
- size = StgLargeBitmap_size( StgFunInfoExtra_bitmap(info)
- + %GET_ENTRY(UNTAG(R1)) /* ### */ );
+ size = StgLargeBitmap_size(
+ TO_W_(StgFunInfoExtraRev_bitmap_offset(info))
+ + %GET_ENTRY(UNTAG(R1)) /* ### */ );
#else
size = StgLargeBitmap_size( StgFunInfoExtra_bitmap(info) );
#endif