X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FGC.h;h=2435c6cd4b809dc7c873d148184e5c0cb7014f8b;hb=7d7c187b4a12f1bb350e85cdb0115e19537cc704;hp=6331320a303faf7bd626de0837f53851da59fff5;hpb=17a596022d01987d5ffe7db0742aa8db267b8cc3;p=ghc-hetmet.git diff --git a/rts/sm/GC.h b/rts/sm/GC.h index 6331320..2435c6c 100644 --- a/rts/sm/GC.h +++ b/rts/sm/GC.h @@ -11,8 +11,17 @@ * * ---------------------------------------------------------------------------*/ -#ifndef GC_H -#define GC_H +#ifndef SM_GC_H +#define SM_GC_H + +#pragma GCC visibility push(hidden) + +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; @@ -28,18 +37,27 @@ extern StgPtr oldgen_scan; extern long copied; +extern rtsBool work_stealing; + #ifdef DEBUG extern nat mutlist_MUTVARS, mutlist_MUTARRS, mutlist_MVARS, mutlist_OTHERS; #endif -#ifdef THREADED_RTS -extern SpinLock gc_alloc_block_sync; -#endif - #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 -#endif /* GC_H */ +#pragma GCC visibility pop + +#endif /* SM_GC_H */