rtsFatalInternalErrorFn(const char *s, va_list ap) { #if defined(mingw32_HOST_OS) /* Ensure we're in text mode so newlines get encoded properly. */ int mode = _setmode (_fileno(stderr), _O_TEXT); if (isGUIApp()) { char title[BUFSIZE], message[BUFSIZE]; snprintf(title, BUFSIZE, "%s: internal error", prog_name); vsnprintf(message, BUFSIZE, s, ap); MessageBox(NULL /* hWnd */, message, title, MB_OK | MB_ICONERROR | MB_TASKMODAL ); } else #endif { /* don't fflush(stdout); WORKAROUND bug in Linux glibc */ if (prog_argv != NULL && prog_name != NULL) { fprintf(stderr, "%s: internal error: ", prog_name); } else { fprintf(stderr, "internal error: "); } vfprintf(stderr, s, ap); #if USE_LIBDW fprintf(stderr, "\n"); fprintf(stderr, "Stack trace:\n"); LibdwSession *session = libdwInit(); Backtrace *bt = libdwGetBacktrace(session); libdwPrintBacktrace(session, stderr, bt); libdwFree(session); #endif fprintf(stderr, "\n"); fprintf(stderr, " (GHC version %s for %s)\n", ProjectVersion, xstr(HostPlatform_TYPE)); fprintf(stderr, " Please report this as a GHC bug: https://www.haskell.org/ghc/reportabug\n"); fflush(stderr); } #if defined(mingw32_HOST_OS) _setmode (_fileno(stderr), mode); #endif #if defined(TRACING) if (RtsFlags.TraceFlags.tracing == TRACE_EVENTLOG) endEventLogging(); #endif abort(); // stg_exit(EXIT_INTERNAL_ERROR); }
rtsFatalInternalErrorFn(const char *s, va_list ap) { #if defined(cygwin32_HOST_OS) || defined (mingw32_HOST_OS) if (isGUIApp()) { char title[BUFSIZE], message[BUFSIZE]; snprintf(title, BUFSIZE, "%s: internal error", prog_name); vsnprintf(message, BUFSIZE, s, ap); MessageBox(NULL /* hWnd */, message, title, MB_OK | MB_ICONERROR | MB_TASKMODAL ); } else #endif { /* don't fflush(stdout); WORKAROUND bug in Linux glibc */ if (prog_argv != NULL && prog_name != NULL) { fprintf(stderr, "%s: internal error: ", prog_name); } else { fprintf(stderr, "internal error: "); } vfprintf(stderr, s, ap); fprintf(stderr, "\n"); fprintf(stderr, " (GHC version %s for %s)\n", ProjectVersion, xstr(HostPlatform_TYPE)); fprintf(stderr, " Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug\n"); fflush(stderr); } #ifdef TRACING if (RtsFlags.TraceFlags.tracing == TRACE_EVENTLOG) endEventLogging(); #endif abort(); // stg_exit(EXIT_INTERNAL_ERROR); }
void endTracing (void) { if (eventlog_enabled) { endEventLogging(); } }