X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2Frts%2Fstorage%2FGC.h;h=bbed2165a23010dfde9297553b43d6a9d819efde;hb=497cdc321da61d90f01cca6b57d974742bea7aa0;hp=2a21c66517178566bfd0c1612ca85c607cf0e212;hpb=a0ca27ac659bcbe0c291b3bd1a12a965f43f5f55;p=ghc-hetmet.git diff --git a/includes/rts/storage/GC.h b/includes/rts/storage/GC.h index 2a21c66..bbed216 100644 --- a/includes/rts/storage/GC.h +++ b/includes/rts/storage/GC.h @@ -63,14 +63,14 @@ typedef struct generation_ { bdescr * blocks; // blocks in this gen unsigned int n_blocks; // number of blocks - unsigned int n_words; // number of words + unsigned int n_words; // number of used words bdescr * large_objects; // large objects (doubly linked) unsigned int n_large_blocks; // no. of blocks used by large objs - unsigned int n_new_large_blocks; // count freshly allocated large objects + unsigned long n_new_large_words; // words of new large objects + // (for allocation stats) unsigned int max_blocks; // max blocks - bdescr *mut_list; // mut objects in this gen (not G0) StgTSO * threads; // threads in this gen // linked via global_link @@ -87,7 +87,7 @@ typedef struct generation_ { #if defined(THREADED_RTS) char pad[128]; // make sure the following is // on a separate cache line. - SpinLock sync_large_objects; // lock for large_objects + SpinLock sync; // lock for large_objects // and scavenged_large_objects #endif @@ -101,11 +101,6 @@ typedef struct generation_ { unsigned int n_old_blocks; // number of blocks in from-space unsigned int live_estimate; // for sweeping: estimate of live data - bdescr * saved_mut_list; - - bdescr * part_blocks; // partially-full scanned blocks - unsigned int n_part_blocks; // count of above - bdescr * scavenged_large_objects; // live large objs after GC (d-link) unsigned int n_scavenged_large_blocks; // size (not count) of above @@ -154,7 +149,7 @@ void * allocateExec(unsigned int len, void **exec_addr); void freeExec (void *p); // Used by GC checks in external .cmm code: -extern nat alloc_blocks_lim; +extern nat large_alloc_lim; /* ----------------------------------------------------------------------------- Performing Garbage Collection @@ -167,10 +162,20 @@ void performMajorGC(void); The CAF table - used to let us revert CAFs in GHCi -------------------------------------------------------------------------- */ -void newCAF (StgClosure*); -void newDynCAF (StgClosure *); +void newCAF (StgRegTable *reg, StgClosure *); +void newDynCAF (StgRegTable *reg, StgClosure *); void revertCAFs (void); +// Request that all CAFs are retained indefinitely. +void setKeepCAFs (void); + +/* ----------------------------------------------------------------------------- + Stats + -------------------------------------------------------------------------- */ + +// Returns the total number of bytes allocated since the start of the program. +HsInt64 getAllocations (void); + /* ----------------------------------------------------------------------------- This is the write barrier for MUT_VARs, a.k.a. IORefs. A MUT_VAR_CLEAN object is not on the mutable list; a MUT_VAR_DIRTY @@ -186,9 +191,9 @@ extern rtsBool keepCAFs; INLINE_HEADER void initBdescr(bdescr *bd, generation *gen, generation *dest) { - bd->gen = gen; - bd->gen_no = gen->no; - bd->dest = dest; + bd->gen = gen; + bd->gen_no = gen->no; + bd->dest_no = dest->no; } #endif /* RTS_STORAGE_GC_H */