From f70d008ec48679cba1a38e9979c47fb991cb075b Mon Sep 17 00:00:00 2001 From: simonmar Date: Tue, 7 Jan 2003 13:25:07 +0000 Subject: [PATCH] [project @ 2003-01-07 13:25:07 by simonmar] Expand bitmaps to cover the full size of the stack frame. Previously the bitmap would stop at the last non-zero bit, which might shorten the bitmap by one or more words. The behaviour used to be correct, but with the eval/apply changes bitmaps must now cover the entire stack frame rather than everything up to the last non-pointer word. --- ghc/compiler/codeGen/CgBindery.lhs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/ghc/compiler/codeGen/CgBindery.lhs b/ghc/compiler/codeGen/CgBindery.lhs index f2c32dc..634b406 100644 --- a/ghc/compiler/codeGen/CgBindery.lhs +++ b/ghc/compiler/codeGen/CgBindery.lhs @@ -514,11 +514,19 @@ buildContLivenessMask name = do let lbl = mkBitmapLabel name - -- realSp points to the frame-header for the current stack frame, - -- and the end of this frame is frame_sp. The size is therefore - -- realSp - frame_sp - 1 (subtract one for the frame-header). frame_sp <- getStackFrame - let liveness = Liveness lbl (realSp-1-frame_sp) mask + let + -- realSp points to the frame-header for the current stack frame, + -- and the end of this frame is frame_sp. The size is therefore + -- realSp - frame_sp - 1 (subtract one for the frame-header). + frame_size = realSp - frame_sp - 1 + + -- make sure the bitmap covers the full frame, by adding + -- zero words at the end as necessary + expand n [] = take ((n+31) `quot` 32) (repeat emptyBS) + expand n (b:bs) = b : expand (n-32) bs + + liveness = Liveness lbl frame_size (expand frame_size mask) absC (CBitmap liveness) return liveness -- 1.7.10.4