X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2Frts%2Fstorage%2FGC.h;h=c412c96617322209667f589e4c52943ab2702943;hb=329077220af83860d5dd6891649cb1058b5bbaa6;hp=1cd57c9045321be23853467daf8677988441d972;hpb=5270423a6afe69f1dc57e5e5a474812182718d40;p=ghc-hetmet.git diff --git a/includes/rts/storage/GC.h b/includes/rts/storage/GC.h index 1cd57c9..c412c96 100644 --- a/includes/rts/storage/GC.h +++ b/includes/rts/storage/GC.h @@ -53,24 +53,33 @@ * * ------------------------------------------------------------------------- */ -typedef struct step_ { - unsigned int no; // step number in this generation - unsigned int abs_no; // absolute step number +typedef struct nursery_ { + bdescr * blocks; + unsigned int n_blocks; +} nursery; - struct generation_ * gen; // generation this step belongs to - unsigned int gen_no; // generation number (cached) +typedef struct generation_ { + unsigned int no; // generation number - bdescr * blocks; // blocks in this step - unsigned int n_blocks; // number of blocks - unsigned int n_words; // number of words + bdescr * blocks; // blocks in this gen + unsigned int n_blocks; // number of blocks + unsigned int n_words; // number of used words - struct step_ * to; // destination step for live objects + bdescr * large_objects; // large objects (doubly linked) + unsigned int n_large_blocks; // no. of blocks used by large objs + unsigned long n_new_large_words; // words of new large objects + // (for allocation stats) - bdescr * large_objects; // large objects (doubly linked) - unsigned int n_large_blocks; // no. of blocks used by large objs + unsigned int max_blocks; // max blocks - StgTSO * threads; // threads in this step + StgTSO * threads; // threads in this gen // linked via global_link + struct generation_ *to; // destination gen for live objects + + // stats information + unsigned int collections; + unsigned int par_collections; + unsigned int failed_promotions; // ------------------------------------ // Fields below are used during GC only @@ -85,7 +94,7 @@ typedef struct step_ { int mark; // mark (not copy)? (old gen only) int compact; // compact (not sweep)? (old gen only) - // During GC, if we are collecting this step, blocks and n_blocks + // During GC, if we are collecting this gen, blocks and n_blocks // are copied into the following two fields. After GC, these blocks // are freed. bdescr * old_blocks; // bdescr of first from-space block @@ -101,32 +110,11 @@ typedef struct step_ { bdescr * bitmap; // bitmap for compacting collection StgTSO * old_threads; - -} step; - - -typedef struct generation_ { - unsigned int no; // generation number - step * steps; // steps - unsigned int n_steps; // number of steps - unsigned int max_blocks; // max blocks in step 0 - bdescr *mut_list; // mut objects in this gen (not G0) - - // stats information - unsigned int collections; - unsigned int par_collections; - unsigned int failed_promotions; - - // temporary use during GC: - bdescr *saved_mut_list; } generation; extern generation * generations; - extern generation * g0; extern generation * oldest_gen; -extern step * all_steps; -extern nat total_steps; /* ----------------------------------------------------------------------------- Generic allocation @@ -164,7 +152,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 @@ -177,10 +165,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 @@ -194,11 +192,11 @@ void dirty_MUT_VAR(StgRegTable *reg, StgClosure *p); /* (needed when dynamic libraries are used). */ extern rtsBool keepCAFs; -INLINE_HEADER void initBdescr(bdescr *bd, step *step) +INLINE_HEADER void initBdescr(bdescr *bd, generation *gen, generation *dest) { - bd->step = step; - bd->gen_no = step->gen_no; - bd->dest = step->to; + bd->gen = gen; + bd->gen_no = gen->no; + bd->dest = dest; } #endif /* RTS_STORAGE_GC_H */