Remove vectored returns.
[ghc-hetmet.git] / rts / ProfHeap.c
index 8f4c8ba..ea71e20 100644 (file)
@@ -19,7 +19,6 @@
 #include "RtsUtils.h"
 #include "RtsFlags.h"
 #include "Profiling.h"
-#include "Storage.h"
 #include "ProfHeap.h"
 #include "Stats.h"
 #include "Hash.h"
@@ -138,9 +137,7 @@ static char *type_names[] = {
 
     , "RET_BCO"
     , "RET_SMALL"
-    , "RET_VEC_SMALL"
     , "RET_BIG"
-    , "RET_VEC_BIG"
     , "RET_DYN"
     , "UPDATE_FRAME"
     , "CATCH_FRAME"
@@ -317,6 +314,13 @@ initEra(Census *census)
     census->drag_total = 0;
 }
 
+STATIC_INLINE void
+freeEra(Census *census)
+{
+    arenaFree(census->arena);
+    freeHashTable(census->hash, NULL);
+}
+
 /* --------------------------------------------------------------------------
  * Increases era by 1 and initialize census[era].
  * Reallocates gi[] and increases its size if needed.
@@ -356,6 +360,10 @@ void initProfiling1( void )
 {
 }
 
+void freeProfiling1( void )
+{
+}
+
 void initProfiling2( void )
 {
   if (RtsFlags.ProfFlags.doHeapProfile) {
@@ -386,9 +394,9 @@ printSample(rtsBool beginSample, StgDouble sampleValue)
 {
     StgDouble fractionalPart, integralPart;
     fractionalPart = modf(sampleValue, &integralPart);
-    fprintf(hp_file, "%s %d.%02d\n",
+    fprintf(hp_file, "%s %" FMT_Word64 ".%02" FMT_Word64 "\n",
             (beginSample ? "BEGIN_SAMPLE" : "END_SAMPLE"),
-            (int)integralPart, (int)(fractionalPart * 100));
+            (StgWord64)integralPart, (StgWord64)(fractionalPart * 100));
 }
 
 /* --------------------------------------------------------------------------
@@ -494,6 +502,14 @@ endHeapProfiling(void)
     }
 #endif
 
+    {
+        nat t;
+        for (t = 0; t <= era; t++) {
+            freeEra( &censuses[t] );
+        }
+    }
+    stgFree(censuses);
+
     seconds = mut_user_time();
     printSample(rtsTrue, seconds);
     printSample(rtsFalse, seconds);
@@ -541,10 +557,10 @@ fprint_ccs(FILE *fp, CostCentreStack *ccs, nat max_length)
            p += buf_append(p, ccs->cc->module, buf_end);
            p += buf_append(p, ".CAF", buf_end);
        } else {
+           p += buf_append(p, ccs->cc->label, buf_end);
            if (ccs->prevStack != NULL && ccs->prevStack != CCS_MAIN) {
                p += buf_append(p, "/", buf_end);
            }
-           p += buf_append(p, ccs->cc->label, buf_end);
        }
        
        if (p >= buf_end) {
@@ -806,7 +822,7 @@ dumpCensus( Census *census )
 #ifdef PROFILING
        switch (RtsFlags.ProfFlags.doHeapProfile) {
        case HEAP_BY_CCS:
-           fprint_ccs(hp_file, (CostCentreStack *)ctr->identity, 25);
+           fprint_ccs(hp_file, (CostCentreStack *)ctr->identity, RtsFlags.ProfFlags.ccsLength);
            break;
        case HEAP_BY_MOD:
        case HEAP_BY_DESCR:
@@ -987,9 +1003,19 @@ heapCensusChain( Census *census, bdescr *bd )
                size = sizeofW(StgTRecHeader);
                break;
 
-           case TVAR_WAIT_QUEUE:
+           case TVAR_WATCH_QUEUE:
+               prim = rtsTrue;
+               size = sizeofW(StgTVarWatchQueue);
+               break;
+               
+           case INVARIANT_CHECK_QUEUE:
+               prim = rtsTrue;
+               size = sizeofW(StgInvariantCheckQueue);
+               break;
+               
+           case ATOMIC_INVARIANT:
                prim = rtsTrue;
-               size = sizeofW(StgTVarWaitQueue);
+               size = sizeofW(StgAtomicInvariant);
                break;
                
            case TVAR: