X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FInfoTables.h;h=1aff7681f75e80955826cbf9a3357e49c0cb72f9;hb=6e5df3a4551b8d8b83e936b3f7b52edfc778ca8a;hp=23241f4baf32334fae8edbe3bb6bec278808d358;hpb=b126c85fc7c445550f122e1f80b8059a6efd528f;p=ghc-hetmet.git diff --git a/ghc/includes/InfoTables.h b/ghc/includes/InfoTables.h index 23241f4..1aff768 100644 --- a/ghc/includes/InfoTables.h +++ b/ghc/includes/InfoTables.h @@ -1,5 +1,5 @@ /* ---------------------------------------------------------------------------- - * $Id: InfoTables.h,v 1.20 2001/03/02 16:12:18 simonmar Exp $ + * $Id: InfoTables.h,v 1.27 2002/05/14 08:15:49 matthewc Exp $ * * (c) The GHC Team, 1998-1999 * @@ -14,21 +14,11 @@ Profiling info -------------------------------------------------------------------------- */ -#ifdef PROFILING - typedef struct { char *closure_type; char *closure_desc; } StgProfInfo; -#else /* !PROFILING */ - -typedef struct { - /* empty */ -} StgProfInfo; - -#endif /* PROFILING */ - /* ----------------------------------------------------------------------------- Parallelism info -------------------------------------------------------------------------- */ @@ -42,13 +32,7 @@ typedef struct { StgInfoTable *rbh_infoptr; /* infoptr to the RBH */ } StgParInfo; -#else /* !PAR */ - -typedef struct { - /* empty */ -} StgParInfo; - -#endif /* PAR */ +#endif /* 0 */ /* Copied from ghc-0.29; ToDo: check this code -- HWL @@ -98,6 +82,14 @@ typedef struct { #endif /* ----------------------------------------------------------------------------- + Ticky info + -------------------------------------------------------------------------- */ + +typedef struct { + /* empty */ +} StgTickyInfo; + +/* ----------------------------------------------------------------------------- Debugging info -------------------------------------------------------------------------- */ @@ -115,6 +107,10 @@ typedef struct { #endif /* DEBUG_CLOSURE */ +/* ----------------------------------------------------------------------------- + Closure flags + -------------------------------------------------------------------------- */ + /* The type flags provide quick access to certain properties of a closure. */ #define _HNF (1<<0) /* head normal form? */ @@ -140,6 +136,7 @@ extern StgWord16 closure_flags[]; #define closure_HNF(c) ( closureFlags(c) & _HNF) #define closure_BITMAP(c) ( closureFlags(c) & _BTM) +#define closure_NON_SPARK(c) ( (closureFlags(c) & _NS)) #define closure_SHOULD_SPARK(c) (!(closureFlags(c) & _NS)) #define closure_STATIC(c) ( closureFlags(c) & _STA) #define closure_THUNK(c) ( closureFlags(c) & _THU) @@ -172,7 +169,7 @@ extern StgWord16 closure_flags[]; typedef struct { StgWord size; - StgWord bitmap[0]; + StgWord bitmap[FLEXIBLE_ARRAY]; } StgLargeBitmap; /* @@ -208,7 +205,14 @@ typedef union { typedef StgClosure* StgSRT[]; +/* + * The entry code pointer must be the first word of an info table. + * See the comment in ghc/rts/Storage.h (Plan C) for details. + */ typedef struct _StgInfoTable { +#ifndef TABLES_NEXT_TO_CODE + StgFunPtr entry; +#endif StgSRT *srt; /* pointer to the SRT table */ #if defined(PAR) || defined(GRAN) struct _StgInfoTable *rbh_infoptr; @@ -216,6 +220,9 @@ typedef struct _StgInfoTable { #ifdef PROFILING StgProfInfo prof; #endif +#ifdef TICKY + StgTickyInfo ticky; +#endif #ifdef DEBUG_CLOSURE StgDebugInfo debug; #endif @@ -228,10 +235,9 @@ typedef struct _StgInfoTable { StgWord srt_len : 16; /* } */ #endif #ifdef TABLES_NEXT_TO_CODE - StgCode code[0]; + StgCode code[FLEXIBLE_ARRAY]; #else - StgFunPtr entry; - StgFunPtr vector[0]; + StgFunPtr vector[FLEXIBLE_ARRAY]; #endif } StgInfoTable; @@ -242,7 +248,12 @@ typedef struct _StgInfoTable { * stack. We distinguish the two by checking whether the pointer is * into text-space or not. */ - + +#if ia64_TARGET_ARCH +/* We need to give the compiler a gentle hint to put it in text-space */ +#define INFO_TBL_CONST const __attribute__((section (".text"))) +#else #define INFO_TBL_CONST const +#endif #endif /* INFOTABLES_H */