diff options
author | Simon Marlow <marlowsd@gmail.com> | 2015-07-06 14:09:50 +0100 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2015-07-06 15:16:06 +0100 |
commit | 9180df19dd938901791b84ef7f260f7e2f1f894f (patch) | |
tree | f6956c83ac5a7d04fa08c491c62bc04093731b4d /rts/HeapStackCheck.cmm | |
parent | a07898e47709d643ffba1bffd83411fc3146ed27 (diff) | |
download | haskell-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.cmm | 5 |
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 |