RTS tidyup sweep, first phase
[ghc-hetmet.git] / rts / Hpc.c
index 1624079..cf75a05 100644 (file)
--- a/rts/Hpc.c
+++ b/rts/Hpc.c
@@ -2,16 +2,16 @@
  * (c)2006 Galois Connections, Inc.
  */ 
 
+#include "PosixSource.h"
+#include "Rts.h"
+
+#include "Trace.h"
+
 #include <stdio.h>
 #include <ctype.h>
-#include <stdlib.h>
 #include <string.h>
 #include <assert.h>
 
-#include "Rts.h"
-#include "Hpc.h"
-#include "Trace.h"
-
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
@@ -49,7 +49,8 @@ int totalTixes = 0;           // total number of tix boxes.
 
 static char *tixFilename;
 
-static void failure(char *msg) {
+static void GNU_ATTRIBUTE(__noreturn__)
+failure(char *msg) {
   debugTrace(DEBUG_hpc,"hpc failure: %s\n",msg);
   fprintf(stderr,"Hpc failure: %s\n",msg);
   if (tixFilename) {
@@ -174,14 +175,20 @@ readTix(void) {
 
 static void hpc_init(void) {
   char *hpc_tixdir;
+  char *hpc_tixfile;
   if (hpc_inited != 0) {
     return;
   }
   hpc_inited = 1;
   hpc_pid    = getpid();
   hpc_tixdir = getenv("HPCTIXDIR");
+  hpc_tixfile = getenv("HPCTIXFILE");
 
-  if (hpc_tixdir != NULL) {
+  /* XXX Check results of mallocs/strdups, and check we are requesting
+         enough bytes */
+  if (hpc_tixfile != NULL) {
+    tixFilename = strdup(hpc_tixfile);
+  } else if (hpc_tixdir != NULL) {
     /* Make sure the directory is present;
      * conditional code for mkdir lifted from lndir.c
      */