X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2Fsm%2FScav.c;h=0fe7a7fa83cb1976c170ed1ef10e4b8b25ba5f10;hp=54fe9a472a7066e5e73860f9bf6a535c5742e767;hb=993ce43d3f3fb6bdb04cbc6d82babdd23355f7d7;hpb=ac0099f771c165d349d19f89102612215164a0f5 diff --git a/rts/sm/Scav.c b/rts/sm/Scav.c index 54fe9a4..0fe7a7f 100644 --- 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. - 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; - } + } 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; + } // small bitmap (< 32 entries, or 64 on a 64-bit machine) case CATCH_STM_FRAME: