X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FGC.h;h=cddba0099e204425fbf4f1768f87564da15a3831;hb=754e039a8a15d5774fe73872ff9ac593b46370e0;hp=b95466edb9b28382ecf1d67447f4033d07d6d512;hpb=64c17c4561cf419a4c70511bafc0815ea670bb2e;p=ghc-hetmet.git diff --git a/rts/sm/GC.h b/rts/sm/GC.h index b95466e..cddba00 100644 --- a/rts/sm/GC.h +++ b/rts/sm/GC.h @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------------- * - * (c) The GHC Team 1998-2006 + * (c) The GHC Team 1998-2008 * * Generational garbage collector * @@ -11,34 +11,49 @@ * * ---------------------------------------------------------------------------*/ -#ifndef GC_H -#define GC_H +#ifndef SM_GC_H +#define SM_GC_H + +BEGIN_RTS_PRIVATE + +void GarbageCollect(rtsBool force_major_gc, nat gc_type, Capability *cap); + +typedef void (*evac_fn)(void *user, StgClosure **root); + +StgClosure * isAlive ( StgClosure *p ); +void markCAFs ( evac_fn evac, void *user ); extern nat N; extern rtsBool major_gc; -extern nat evac_gen; -extern rtsBool eager_promotion; -extern rtsBool failed_to_evac; - -extern StgClosure* static_objects; -extern StgClosure* scavenged_static_objects; -extern bdescr *mark_stack_bdescr; -extern StgPtr *mark_stack; -extern StgPtr *mark_sp; -extern StgPtr *mark_splim; +extern bdescr *mark_stack_bd; +extern bdescr *mark_stack_top_bd; +extern StgPtr mark_sp; +extern StgPtr mark_splim; -extern rtsBool mark_stack_overflowed; -extern bdescr *oldgen_scan_bd; -extern StgPtr oldgen_scan; +extern long copied; -extern lnat new_blocks; // blocks allocated during this GC -extern lnat new_scavd_blocks; // ditto, but depth-first blocks +extern rtsBool work_stealing; #ifdef DEBUG -extern nat mutlist_MUTVARS, mutlist_MUTARRS, mutlist_OTHERS; +extern nat mutlist_MUTVARS, mutlist_MUTARRS, mutlist_MVARS, mutlist_OTHERS; #endif -StgClosure * isAlive(StgClosure *p); +#if defined(PROF_SPIN) && defined(THREADED_RTS) +extern StgWord64 whitehole_spin; +#endif + +void gcWorkerThread (Capability *cap); +void initGcThreads (void); +void freeGcThreads (void); + +#if defined(THREADED_RTS) +void waitForGcThreads (Capability *cap); +void releaseGCThreads (Capability *cap); +#endif + +#define WORK_UNIT_WORDS 128 + +END_RTS_PRIVATE -#endif /* GC_H */ +#endif /* SM_GC_H */