X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FClosures.h;h=3e8f2347df73e2d8f03a18eb80d9521895a9f598;hb=7ff78c251654969f9973c087bec3ae98d5e5b606;hp=855b72892332e6a7d8380a050ac9f545c5348f48;hpb=6d35596c37601a9bf608e32034c390d516454c29;p=ghc-hetmet.git diff --git a/ghc/includes/Closures.h b/ghc/includes/Closures.h index 855b728..3e8f234 100644 --- a/ghc/includes/Closures.h +++ b/ghc/includes/Closures.h @@ -1,5 +1,5 @@ /* ---------------------------------------------------------------------------- - * $Id: Closures.h,v 1.26 2001/02/11 17:51:08 simonmar Exp $ + * $Id: Closures.h,v 1.31 2002/01/29 16:52:46 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -19,89 +19,22 @@ The profiling header -------------------------------------------------------------------------- */ -#ifdef PROFILING - typedef struct { - CostCentreStack *ccs; + CostCentreStack *ccs; + union { + struct _RetainerSet *rs; // Retainer Set + StgWord ldvw; // Lag/Drag/Void Word + } hp; } StgProfHeader; -#else /* !PROFILING */ - -typedef struct { - /* empty */ -} StgProfHeader; - -#endif /* PROFILING */ - -/* ----------------------------------------------------------------------------- - The parallel header - -------------------------------------------------------------------------- */ - -#ifdef PAR - -typedef struct { - /* StgWord ga; */ /* nope! global addresses are managed via a hash table */ -} StgParHeader; - -#else /* !PAR */ - -typedef struct { - /* empty */ -} StgParHeader; - -#endif /* PAR */ - /* ----------------------------------------------------------------------------- The GranSim header -------------------------------------------------------------------------- */ -#if defined(GRAN) - typedef struct { StgWord procs; /* bitmask indicating on which PEs this closure resides */ } StgGranHeader; -#else /* !GRAN */ - -typedef struct { - /* empty */ -} StgGranHeader; - -#endif /* GRAN */ - -/* ----------------------------------------------------------------------------- - The ticky-ticky header - - Comment from old Ticky.h: - - This is used to record if a closure has been updated but not yet - entered. It is set when the closure is updated and cleared when - subsequently entered. - - NB: It is {\em not} an ``entry count'', it is an - ``entries-after-update count.'' - - The commoning up of @CONST@, @CHARLIKE@ and @INTLIKE@ closures is - turned off(?) if this is required. This has only been done for 2s - collection. It is done using a nasty hack which defines the - @_Evacuate@ and @_Scavenge@ code for @CONST@, @CHARLIKE@ and @INTLIKE@ - info tables to be @_Evacuate_1@ and @_Scavenge_1_0@. - -------------------------------------------------------------------------- */ - -#ifdef TICKY_TICKY - -typedef struct { - /* old: W_ updated; */ -} StgTickyHeader; - -#else /* !TICKY_TICKY */ - -typedef struct { - /* empty */ -} StgTickyHeader; - -#endif /* TICKY_TICKY */ - /* ----------------------------------------------------------------------------- The full fixed-size closure header @@ -114,15 +47,9 @@ typedef struct { #ifdef PROFILING StgProfHeader prof; #endif -#ifdef PAR - StgParHeader par; -#endif #ifdef GRAN StgGranHeader gran; #endif -#ifdef TICKY_TICKY - StgTickyHeader ticky; -#endif } StgHeader; #define FIXED_HS (sizeof(StgHeader)) @@ -139,7 +66,7 @@ typedef struct { struct StgClosure_ { StgHeader header; - struct StgClosure_ *payload[0]; + struct StgClosure_ *payload[FLEXIBLE_ARRAY]; }; /* What a stroke of luck - all our mutable closures follow the same @@ -152,7 +79,7 @@ typedef struct StgMutClosure_ { StgHeader header; StgWord padding; struct StgMutClosure_ *mut_link; - struct StgClosure_ *payload[0]; + struct StgClosure_ *payload[FLEXIBLE_ARRAY]; } StgMutClosure; typedef struct { @@ -164,14 +91,14 @@ typedef struct { StgHeader header; StgWord n_args; StgClosure *fun; - StgClosure *payload[0]; + StgClosure *payload[FLEXIBLE_ARRAY]; } StgPAP; typedef struct { StgHeader header; StgWord n_args; StgClosure *fun; - StgClosure *payload[0]; + StgClosure *payload[FLEXIBLE_ARRAY]; } StgAP_UPD; typedef struct { @@ -195,14 +122,14 @@ typedef struct { typedef struct { StgHeader header; StgWord words; - StgWord payload[0]; + StgWord payload[FLEXIBLE_ARRAY]; } StgArrWords; typedef struct { StgHeader header; StgWord ptrs; StgMutClosure *mut_link; /* mutable list */ - StgClosure *payload[0]; + StgClosure *payload[FLEXIBLE_ARRAY]; } StgMutArrPtrs; typedef struct { @@ -297,7 +224,7 @@ typedef struct { const struct _StgInfoTable* info; StgWord liveness; StgWord ret_addr; - StgWord payload[0]; + StgWord payload[FLEXIBLE_ARRAY]; } StgRetDyn; /* Concurrent communication objects */ @@ -326,7 +253,7 @@ typedef struct StgBlockingQueueElement_ { StgHeader header; struct StgBlockingQueueElement_ *link; /* next elem in BQ */ StgMutClosure *mut_link; /* next elem in mutable list */ - struct StgClosure_ *payload[0];/* contents of the closure */ + struct StgClosure_ *payload[FLEXIBLE_ARRAY];/* contents of the closure */ } StgBlockingQueueElement; /* only difference to std code is type of the elem in the BQ */ @@ -339,7 +266,7 @@ typedef struct StgBlockingQueue_ { /* this closure is hanging at the end of a blocking queue in (see RBH.c) */ typedef struct StgRBHSave_ { StgHeader header; - StgClosure *payload[0]; /* 2 words ripped out of the guts of the */ + StgClosure *payload[FLEXIBLE_ARRAY]; /* 2 words ripped out of the guts of the */ } StgRBHSave; /* closure holding the blocking queue */ typedef struct StgRBH_ {