[project @ 2003-09-12 16:26:05 by sof]
[ghc-hetmet.git] / ghc / rts / LdvProfile.c
index c0f0411..31777e5 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: LdvProfile.c,v 1.2 2001/11/26 16:54:21 simonmar Exp $
+ * $Id: LdvProfile.c,v 1.5 2003/02/22 04:51:51 sof Exp $
  *
  * (c) The GHC Team, 2001
  * Author: Sungwoo Park
 #include "Rts.h"
 #include "LdvProfile.h"
 #include "RtsFlags.h"
-#include "Itimer.h"
-#include "Proftimer.h"
 #include "Profiling.h"
 #include "Stats.h"
 #include "Storage.h"
 #include "RtsUtils.h"
 #include "Schedule.h"
 
-// ldvTimeSave is set in LdvCensusKillAll(), and stores the final number of
-// times that LDV profiling was proformed.
-static nat ldvTimeSave;
-
 /* --------------------------------------------------------------------------
  * Fills in the slop when a *dynamic* closure changes its type.
  * First calls LDV_recordDead() to declare the closure is dead, and then
@@ -44,10 +38,16 @@ static nat ldvTimeSave;
 void 
 LDV_recordDead_FILL_SLOP_DYNAMIC( StgClosure *p )
 {
+    StgInfoTable *info;
+    nat nw, i;
+
+#if defined(__GNUC__) && __GNUC__ < 3 && defined(DEBUG)
+#error Please use gcc 3.0+ to compile this file with DEBUG; gcc < 3.0 miscompiles it
+#endif
+
     if (era > 0) {
-       StgInfoTable *inf = get_itbl((p));
-       nat nw, i;
-       switch (inf->type) {
+       info = get_itbl((p));
+       switch (info->type) {
        case THUNK_1_0:
        case THUNK_0_1:
        case THUNK_2_0:
@@ -57,21 +57,25 @@ LDV_recordDead_FILL_SLOP_DYNAMIC( StgClosure *p )
            nw = MIN_UPD_SIZE;
            break;
        case THUNK:
-           nw = inf->layout.payload.ptrs + inf->layout.payload.nptrs;
+           nw = info->layout.payload.ptrs + info->layout.payload.nptrs;
            if (nw < MIN_UPD_SIZE)
                nw = MIN_UPD_SIZE;
            break;
-       case AP_UPD:
+       case AP:
            nw = sizeofW(StgPAP) - sizeofW(StgHeader) + ((StgPAP *)p)->n_args;
            break;
+       case AP_STACK:
+           nw = sizeofW(StgAP_STACK) - sizeofW(StgHeader)
+               + ((StgAP_STACK *)p)->size;
+           break;
        case CAF_BLACKHOLE:
        case BLACKHOLE:
        case SE_BLACKHOLE:
        case SE_CAF_BLACKHOLE:
-           nw = inf->layout.payload.ptrs + inf->layout.payload.nptrs;
+           nw = info->layout.payload.ptrs + info->layout.payload.nptrs;
            break;
        default:
-           barf("Unexpected closure type %u in LDV_recordDead_FILL_SLOP_DYNAMIC()", inf->type);
+           barf("Unexpected closure type %u in LDV_recordDead_FILL_SLOP_DYNAMIC()", info->type);
            break;
        }
        LDV_recordDead((StgClosure *)(p), nw + sizeofW(StgHeader));
@@ -156,11 +160,15 @@ processHeapClosureForDead( StgClosure *c )
        size = sizeofW(StgHeader) + MIN_UPD_SIZE;
        break;
 
-    case AP_UPD:
+    case AP:
     case PAP:
        size = pap_sizeW((StgPAP *)c);
        break;
 
+    case AP_STACK:
+       size = ap_stack_sizeW((StgAP_STACK *)c);
+       break;
+
     case CONSTR:
     case CONSTR_1_0:
     case CONSTR_0_1:
@@ -229,7 +237,6 @@ processHeapClosureForDead( StgClosure *c )
     case UPDATE_FRAME:
     case CATCH_FRAME:
     case STOP_FRAME:
-    case SEQ_FRAME:
     case RET_DYN:
     case RET_BCO:
     case RET_SMALL: