projects
/
ghc-hetmet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ac0099f
)
FIX #2197: an update frame might point to an IND_OLDGEN
author
Simon Marlow
<simonmar@microsoft.com>
Fri, 11 Apr 2008 17:34:04 +0000
(17:34 +0000)
committer
Simon Marlow
<simonmar@microsoft.com>
Fri, 11 Apr 2008 17:34:04 +0000
(17:34 +0000)
rts/sm/Scav.c
patch
|
blob
|
history
diff --git
a/rts/sm/Scav.c
b/rts/sm/Scav.c
index
54fe9a4
..
0fe7a7f
100644
(file)
--- a/
rts/sm/Scav.c
+++ b/
rts/sm/Scav.c
@@
-1661,14
+1661,21
@@
scavenge_stack(StgPtr p, StgPtr stack_end)
// the indirection into an IND_PERM, so that evacuate will
// copy the indirection into the old generation instead of
// discarding it.
// the indirection into an IND_PERM, so that evacuate will
// copy the indirection into the old generation instead of
// discarding it.
- if (get_itbl(((StgUpdateFrame *)p)->updatee)->type == IND) {
+ {
+ nat type;
+ type = get_itbl(((StgUpdateFrame *)p)->updatee)->type;
+ if (type == IND) {
((StgUpdateFrame *)p)->updatee->header.info =
(StgInfoTable *)&stg_IND_PERM_info;
((StgUpdateFrame *)p)->updatee->header.info =
(StgInfoTable *)&stg_IND_PERM_info;
- }
+ } else if (type == IND_OLDGEN) {
+ ((StgUpdateFrame *)p)->updatee->header.info =
+ (StgInfoTable *)&stg_IND_OLDGEN_PERM_info;
+ }
((StgUpdateFrame *)p)->updatee
= evacuate(((StgUpdateFrame *)p)->updatee);
p += sizeofW(StgUpdateFrame);
continue;
((StgUpdateFrame *)p)->updatee
= evacuate(((StgUpdateFrame *)p)->updatee);
p += sizeofW(StgUpdateFrame);
continue;
+ }
// small bitmap (< 32 entries, or 64 on a 64-bit machine)
case CATCH_STM_FRAME:
// small bitmap (< 32 entries, or 64 on a 64-bit machine)
case CATCH_STM_FRAME: