X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FRetainerProfile.h;fp=ghc%2Frts%2FRetainerProfile.h;h=51ddc64e4b3e5dd1e753095576dc875459e607c6;hb=dbef766ce79e37a74468a07a93b15ba1f06fe8f8;hp=7a2f0fb16e8d6c9de3bbef3a0449cedc1c004b7e;hpb=5680ea4b2035198981739e24ad04cd0e0d133172;p=ghc-hetmet.git diff --git a/ghc/rts/RetainerProfile.h b/ghc/rts/RetainerProfile.h index 7a2f0fb..51ddc64 100644 --- a/ghc/rts/RetainerProfile.h +++ b/ghc/rts/RetainerProfile.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: RetainerProfile.h,v 1.1 2001/11/22 14:25:12 simonmar Exp $ + * $Id: RetainerProfile.h,v 1.2 2001/11/26 16:54:21 simonmar Exp $ * * (c) The GHC Team, 2001 * Author: Sungwoo Park @@ -13,12 +13,31 @@ #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 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); +} + // firstStack is exported because memInventory() in Schedule.c uses it. #ifdef DEBUG extern bdescr *firstStack;