X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FInfoTables.h;h=a605ba2c177ccdfd0f16e1f6476f3b45c6980ddd;hb=44886baea4f683939c15cf2d16f1387f4c9df048;hp=79b3de14921cf92017e6497d3ddccad154144148;hpb=7a236a564b90cd060612e1e979ce7d552da61fa1;p=ghc-hetmet.git diff --git a/ghc/includes/InfoTables.h b/ghc/includes/InfoTables.h index 79b3de1..a605ba2 100644 --- a/ghc/includes/InfoTables.h +++ b/ghc/includes/InfoTables.h @@ -1,5 +1,5 @@ /* ---------------------------------------------------------------------------- - * $Id: InfoTables.h,v 1.29 2003/05/14 09:14:02 simonmar Exp $ + * $Id: InfoTables.h,v 1.33 2004/08/13 13:09:17 simonmar Exp $ * * (c) The GHC Team, 1998-2002 * @@ -85,9 +85,11 @@ typedef struct { Ticky info -------------------------------------------------------------------------- */ +#if defined(SUPPORTS_EMPTY_STRUCTS) typedef struct { /* empty */ } StgTickyInfo; +#endif /* ----------------------------------------------------------------------------- Debugging info @@ -101,9 +103,11 @@ typedef struct { #else /* !DEBUG_CLOSURE */ -typedef struct { +# if defined(SUPPORTS_EMPTY_STRUCTS) +typedef struct StgDebugInfo { /* empty */ } StgDebugInfo; +# endif #endif /* DEBUG_CLOSURE */ @@ -165,6 +169,8 @@ extern StgWord16 closure_flags[]; (usually on the stack) to the garbage collector. The two primary uses are for stack frames, and functions (where we need to describe the layout of a PAP to the GC). + + In these bitmaps: 0 == ptr, 1 == non-ptr. -------------------------------------------------------------------------- */ // @@ -249,10 +255,10 @@ typedef struct _StgInfoTable { StgProfInfo prof; #endif #ifdef TICKY - StgTickyInfo ticky; + MAYBE_EMPTY_STRUCT(StgTickyInfo,ticky) #endif #ifdef DEBUG_CLOSURE - StgDebugInfo debug; + MAYBE_EMPTY_STRUCT(StgDebugInfo,debug) #endif StgClosureInfo layout; // closure layout info (one word) @@ -281,21 +287,29 @@ typedef struct _StgInfoTable { bitmap fields have also been omitted. -------------------------------------------------------------------------- */ -typedef struct _StgFunInfoTable { -#if defined(TABLES_NEXT_TO_CODE) +typedef struct _StgFunInfoExtraRev { StgFun *slow_apply; // apply to args on the stack StgWord bitmap; // arg ptr/nonptr bitmap StgSRT *srt; // pointer to the SRT table StgHalfWord fun_type; // function type StgHalfWord arity; // function arity - StgInfoTable i; -#else - StgInfoTable i; +} StgFunInfoExtraRev; + +typedef struct _StgFunInfoExtraFwd { StgHalfWord fun_type; // function type StgHalfWord arity; // function arity StgSRT *srt; // pointer to the SRT table StgWord bitmap; // arg ptr/nonptr bitmap StgFun *slow_apply; // apply to args on the stack +} StgFunInfoExtraFwd; + +typedef struct { +#if defined(TABLES_NEXT_TO_CODE) + StgFunInfoExtraRev f; + StgInfoTable i; +#else + StgInfoTable i; + StgFunInfoExtraFwd f; #endif } StgFunInfoTable; @@ -306,15 +320,13 @@ typedef struct _StgFunInfoTable { // When info tables are laid out backwards, we can omit the SRT // pointer iff srt_bitmap is zero. -typedef struct _StgRetInfoTable { -#if !defined(TABLES_NEXT_TO_CODE) - StgInfoTable i; -#endif - StgSRT *srt; // pointer to the SRT table +typedef struct { #if defined(TABLES_NEXT_TO_CODE) + StgSRT *srt; // pointer to the SRT table StgInfoTable i; -#endif -#if !defined(TABLES_NEXT_TO_CODE) +#else + StgInfoTable i; + StgSRT *srt; // pointer to the SRT table StgFunPtr vector[FLEXIBLE_ARRAY]; #endif } StgRetInfoTable;