merge upstream HEAD
[ghc-hetmet.git] / rts / RtsMessages.c
index 53a910e..6e75abc 100644 (file)
@@ -9,7 +9,11 @@
 #include "PosixSource.h"
 #include "Rts.h"
 
+#include "eventlog/EventLog.h"
+
 #include <stdio.h>
+#include <string.h>
+#include <errno.h>
 
 #ifdef HAVE_WINDOWS_H
 #include <windows.h>
@@ -126,7 +130,7 @@ isGUIApp(void)
 #define xstr(s) str(s)
 #define str(s) #s
 
-void
+void GNU_ATTRIBUTE(__noreturn__)
 rtsFatalInternalErrorFn(const char *s, va_list ap)
 {
 #if defined(cygwin32_HOST_OS) || defined (mingw32_HOST_OS)
@@ -159,6 +163,10 @@ rtsFatalInternalErrorFn(const char *s, va_list ap)
      fflush(stderr);
   }
 
+#ifdef TRACING
+  if (RtsFlags.TraceFlags.tracing == TRACE_EVENTLOG) endEventLogging();
+#endif
+
   abort();
   // stg_exit(EXIT_INTERNAL_ERROR);
 }
@@ -185,7 +193,7 @@ rtsErrorMsgFn(const char *s, va_list ap)
 #endif
   {
      /* don't fflush(stdout); WORKAROUND bug in Linux glibc */
-     if (prog_argv != NULL && prog_name != NULL) {
+     if (prog_name != NULL) {
        fprintf(stderr, "%s: ", prog_name);
      }
      vfprintf(stderr, s, ap);
@@ -237,7 +245,12 @@ rtsSysErrorMsgFn(const char *s, va_list ap)
        }
        vfprintf(stderr, s, ap);
        if (syserr) {
+#if defined(cygwin32_HOST_OS) || defined (mingw32_HOST_OS)
+            // Win32 error messages have a terminating \n
+           fprintf(stderr, ": %s", syserr);
+#else
            fprintf(stderr, ": %s\n", syserr);
+#endif
        } else {
            fprintf(stderr, "\n");
        }