X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FCompact.c;h=feebef87aa79b6d98cfcf4abded3cba97b3ed333;hb=9ff76535edb25ab7434284adddb5c64708ecb547;hp=844b77008fe728b7da55c727f2b7d4e0c50fe4b7;hpb=64c17c4561cf419a4c70511bafc0815ea670bb2e;p=ghc-hetmet.git diff --git a/rts/sm/Compact.c b/rts/sm/Compact.c index 844b770..feebef8 100644 --- a/rts/sm/Compact.c +++ b/rts/sm/Compact.c @@ -16,8 +16,6 @@ #include "RtsUtils.h" #include "RtsFlags.h" #include "OSThreads.h" -#include "Storage.h" -#include "Stable.h" #include "BlockAlloc.h" #include "MBlock.h" #include "GC.h" @@ -268,7 +266,6 @@ thread_stack(StgPtr p, StgPtr stack_end) case STOP_FRAME: case CATCH_FRAME: case RET_SMALL: - case RET_VEC_SMALL: bitmap = BITMAP_BITS(info->i.layout.bitmap); size = BITMAP_SIZE(info->i.layout.bitmap); p++; @@ -300,7 +297,6 @@ thread_stack(StgPtr p, StgPtr stack_end) // large bitmap (> 32 entries, or 64 on a 64-bit machine) case RET_BIG: - case RET_VEC_BIG: p++; size = GET_LARGE_BITMAP(&info->i)->size; thread_large_bitmap(p, GET_LARGE_BITMAP(&info->i), size); @@ -532,7 +528,6 @@ thread_obj (StgInfoTable *info, StgPtr p) thread_(&bco->instrs); thread_(&bco->literals); thread_(&bco->ptrs); - thread_(&bco->itbls); return p + bco_sizeW(bco); } @@ -768,6 +763,10 @@ update_fwd_compact( bdescr *blocks ) // know the destination without the size, because we may // spill into the next block. So we have to run down the // threaded list and get the info ptr first. + // + // ToDo: one possible avenue of attack is to use the fact + // that if (p&BLOCK_MASK) >= (free&BLOCK_MASK), then we + // definitely have enough room. Also see bug #1147. info = get_threaded_info(p); q = p;