X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FStoragePriv.h;h=a45e42d6e278ab7dd859a5057d93cfdc65b97f34;hb=5af99b7c3ebdda79a181f250b4e61454cb06024d;hp=7ef008d60e00ccd94a07d65fd9faef98d9c6b6fa;hpb=39a991713f0705bf2599930e378178a1d6e2b5f9;p=ghc-hetmet.git diff --git a/ghc/rts/StoragePriv.h b/ghc/rts/StoragePriv.h index 7ef008d..a45e42d 100644 --- a/ghc/rts/StoragePriv.h +++ b/ghc/rts/StoragePriv.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: StoragePriv.h,v 1.11 2000/11/01 11:41:47 simonmar Exp $ + * $Id: StoragePriv.h,v 1.22 2002/11/01 11:05:47 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -10,6 +10,8 @@ #ifndef STORAGEPRIV_H #define STORAGEPRIV_H +#include + #define END_OF_STATIC_LIST stgCast(StgClosure*,1) extern generation *generations; @@ -19,20 +21,29 @@ extern step *g0s0; extern generation *oldest_gen; extern void newCAF(StgClosure*); -extern StgTSO *relocate_TSO(StgTSO *src, StgTSO *dest); + +extern void move_TSO(StgTSO *src, StgTSO *dest); +extern StgTSO *relocate_stack(StgTSO *dest, ptrdiff_t diff); + +extern StgClosure *static_objects; +extern StgClosure *scavenged_static_objects; + +extern StgWeak *old_weak_ptr_list; extern StgWeak *weak_ptr_list; extern StgClosure *caf_list; +extern StgTSO *resurrected_threads; + extern bdescr *small_alloc_list; extern bdescr *large_alloc_list; +extern bdescr *pinned_object_block; extern StgPtr alloc_Hp; extern StgPtr alloc_HpLim; extern bdescr *nursery; -extern nat nursery_blocks; extern nat alloc_blocks; extern nat alloc_blocks_lim; @@ -43,6 +54,7 @@ extern void allocNurseries ( void ); extern void resetNurseries ( void ); extern bdescr * allocNursery ( bdescr *last_bd, nat blocks ); extern void resizeNursery ( nat blocks ); +extern void tidyAllocateLists ( void ); /* Stats 'n' stuff */ extern lnat calcAllocated ( void ); @@ -53,9 +65,9 @@ static inline void dbl_link_onto(bdescr *bd, bdescr **list) { bd->link = *list; - bd->back = NULL; + bd->u.back = NULL; if (*list) { - (*list)->back = bd; /* double-link the list */ + (*list)->u.back = bd; /* double-link the list */ } *list = bd; } @@ -64,11 +76,28 @@ dbl_link_onto(bdescr *bd, bdescr **list) * A mutable list is ended with END_MUT_LIST, so that we can use NULL * as an indication that an object is not on a mutable list. */ -#define END_MUT_LIST ((StgMutClosure *)(void *)&END_MUT_LIST_closure) +#define END_MUT_LIST ((StgMutClosure *)(void *)&stg_END_MUT_LIST_closure) #ifdef DEBUG extern void memInventory(void); -extern void checkSanity(nat N); +extern void checkSanity(void); +extern nat countBlocks(bdescr *); #endif +/* + * These three are used by the garbage collector when we have + * dynamically-linked object modules. (see Storage.h, + * IS_DATA_PTR etc.). + * Defined in Linker.c. + */ +int is_dynamically_loaded_code_or_rodata_ptr ( void* p ); +int is_dynamically_loaded_rwdata_ptr ( void* p ); +int is_not_dynamically_loaded_ptr ( void* p ); + +/* Functions from GC.c + */ +extern void threadPaused ( StgTSO * ); +extern StgClosure * isAlive ( StgClosure *p ); +extern void markCAFs ( evac_fn evac ); + #endif /* STORAGEPRIV_H */