[project @ 2003-04-22 16:25:08 by simonmar]
authorsimonmar <unknown>
Tue, 22 Apr 2003 16:25:12 +0000 (16:25 +0000)
committersimonmar <unknown>
Tue, 22 Apr 2003 16:25:12 +0000 (16:25 +0000)
commit1da232fccdd01edac72180682540c4d5b5ba71ea
tree04c04ef92b5862ee0fa0da57a945fe572a676195
parent3c85beaf1fd27f741f1511bc9dad3da1e41f8c0c
[project @ 2003-04-22 16:25:08 by simonmar]
Fix an obscure bug: the most general kind of heap check,
HEAP_CHECK_GEN(), is supposed to save the contents of *every* register
known to the STG machine (used in cases where we either can't figure
out which ones are live, or doing so would be too much hassle).  The
problem is that it wasn't saving the L1 register.

A slight complication arose in that saving the L1 register pushed the
size of the frame over the 16 words allowed for the size of the bitmap
stored in the frame, so I changed the layout of the frame a bit.
Describing all the registers using a single bitmap is overkill when
only 8 of them can actually be pointers, so now the bitmap is only 8
bits long and we always skip over a fixed number of non-ptr words to
account for all the non-ptr regs.  This is all described in StgMacros.h.
ghc/includes/StgMacros.h
ghc/rts/GC.c
ghc/rts/GCCompact.c
ghc/rts/HeapStackCheck.hc
ghc/rts/Interpreter.c
ghc/rts/Printer.c
ghc/rts/Sanity.c
ghc/rts/Storage.h