X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FRetainerProfile.h;fp=rts%2FRetainerProfile.h;h=827daa8ef468c779ac25441dc8610d3100146937;hb=0065d5ab628975892cea1ec7303f968c3338cbe1;hp=0000000000000000000000000000000000000000;hpb=28a464a75e14cece5db40f2765a29348273ff2d2;p=ghc-hetmet.git diff --git a/rts/RetainerProfile.h b/rts/RetainerProfile.h new file mode 100644 index 0000000..827daa8 --- /dev/null +++ b/rts/RetainerProfile.h @@ -0,0 +1,47 @@ +/* ----------------------------------------------------------------------------- + * + * (c) The GHC Team, 2001 + * Author: Sungwoo Park + * + * Retainer profiling interface. + * + * ---------------------------------------------------------------------------*/ + +#ifndef RETAINERPROFILE_H +#define RETAINERPROFILE_H + +#ifdef PROFILING + +#include "RetainerSet.h" + +extern void initRetainerProfiling ( void ); +extern void endRetainerProfiling ( void ); +extern void printRetainer ( FILE *, retainer ); +extern void retainerProfile ( void ); +extern void resetStaticObjectForRetainerProfiling ( void ); + +extern StgWord RTS_VAR(flip); + +// extract the retainer set field from c +#define RSET(c) ((c)->header.prof.hp.rs) + +#define isRetainerSetFieldValid(c) \ + ((((StgWord)(c)->header.prof.hp.rs & 1) ^ flip) == 0) + +static inline RetainerSet * +retainerSetOf( StgClosure *c ) +{ + ASSERT( isRetainerSetFieldValid(c) ); + // StgWord has the same size as pointers, so the following type + // casting is okay. + return (RetainerSet *)((StgWord)RSET(c) ^ flip); +} + +// Used by Storage.c:memInventory() +#ifdef DEBUG +extern lnat retainerStackBlocks ( void ); +#endif + +#endif /* PROFILING */ + +#endif /* RETAINERPROFILE_H */