fix #3910
[ghc-hetmet.git] / rts / Profiling.c
index 77fab52..6d23bc2 100644 (file)
 
 #include "PosixSource.h"
 #include "Rts.h"
+
 #include "RtsUtils.h"
-#include "RtsFlags.h"
 #include "Profiling.h"
 #include "Proftimer.h"
-#include "Timer.h"
 #include "ProfHeap.h"
 #include "Arena.h"
 #include "RetainerProfile.h"
-#include "LdvProfile.h"
 
 #include <string.h>
 
@@ -42,7 +40,7 @@ unsigned int HP_ID;
 
 /* figures for the profiling report.
  */
-static ullong total_alloc;
+static StgWord64 total_alloc;
 static lnat   total_prof_ticks;
 
 /* Globals for opening the profiling log file(s)
@@ -268,6 +266,21 @@ ccsSetSelected( CostCentreStack *ccs )
 static void
 initProfilingLogFile(void)
 {
+    char *prog;
+
+    prog = arenaAlloc(prof_arena, strlen(prog_name) + 1);
+    strcpy(prog, prog_name);
+#ifdef mingw32_HOST_OS
+    // on Windows, drop the .exe suffix if there is one
+    {
+        char *suff;
+        suff = strrchr(prog,'.');
+        if (suff != NULL && !strcmp(suff,".exe")) {
+            *suff = '\0';
+        }
+    }
+#endif
+
     if (RtsFlags.CcFlags.doCostCentres == 0 && 
         RtsFlags.ProfFlags.doHeapProfile != HEAP_BY_RETAINER)
     {
@@ -278,8 +291,8 @@ initProfilingLogFile(void)
     else
     {
         /* Initialise the log file name */
-        prof_filename = arenaAlloc(prof_arena, strlen(prog_name) + 6);
-        sprintf(prof_filename, "%s.prof", prog_name);
+        prof_filename = arenaAlloc(prof_arena, strlen(prog) + 6);
+        sprintf(prof_filename, "%s.prof", prog);
 
         /* open the log file */
         if ((prof_file = fopen(prof_filename, "w")) == NULL) {
@@ -310,9 +323,9 @@ initProfilingLogFile(void)
     
     if (RtsFlags.ProfFlags.doHeapProfile) {
        /* Initialise the log file name */
-       hp_filename = arenaAlloc(prof_arena, strlen(prog_name) + 6);
-       sprintf(hp_filename, "%s.hp", prog_name);
-       
+       hp_filename = arenaAlloc(prof_arena, strlen(prog) + 6);
+       sprintf(hp_filename, "%s.hp", prog);
+
        /* open the log file */
        if ((hp_file = fopen(hp_filename, "w")) == NULL) {
            debugBelch("Can't open profiling report file %s\n", 
@@ -684,7 +697,7 @@ report_per_cc_costs( void )
       
       if (RtsFlags.CcFlags.doCostCentres >= COST_CENTRES_VERBOSE) {
        fprintf(prof_file, "  %5" FMT_Word64 " %9" FMT_Word64,
-               (StgWord64)(cc->time_ticks), cc->mem_alloc);
+               (StgWord64)(cc->time_ticks), cc->mem_alloc*sizeof(W_));
       }
       fprintf(prof_file, "\n");
   }
@@ -757,7 +770,7 @@ reportCCSProfiling( void )
         (int) RtsFlags.MiscFlags.tickInterval);
 
     fprintf(prof_file, "\ttotal alloc = %11s bytes",
-           ullong_format_string(total_alloc * sizeof(W_),
+           showStgWord64(total_alloc * sizeof(W_),
                                 temp, rtsTrue/*commas*/));
 
 #if defined(PROFILING_DETAIL_COUNTS)