Wrap gcc on Windows, to provide the -B flags
[ghc-hetmet.git] / rts / Trace.c
index 8991033..7cfb78c 100644 (file)
@@ -63,7 +63,6 @@ void initTracing (void)
     class = RtsFlags.DebugFlags.name ? 1 : 0;
 
     DEBUG_FLAG(scheduler,    DEBUG_sched);
-    DEBUG_FLAG(scheduler,    TRACE_sched); // -Ds enabled all sched events
 
     DEBUG_FLAG(interpreter,  DEBUG_interp);
     DEBUG_FLAG(weak,         DEBUG_weak);
@@ -80,29 +79,12 @@ void initTracing (void)
     DEBUG_FLAG(sparks,       DEBUG_sparks);
 #endif
 
-#define TRACE_FLAG(name, class) \
-    class = RtsFlags.TraceFlags.name ? 1 : 0;
+    // -Ds turns on scheduler tracing too
+    TRACE_sched =
+        RtsFlags.TraceFlags.scheduler ||
+        RtsFlags.DebugFlags.scheduler;
 
-    TRACE_FLAG(scheduler, TRACE_sched);
-
-    eventlog_enabled = !RtsFlags.TraceFlags.trace_stderr && (
-                       TRACE_sched
-#ifdef DEBUG
-                       | DEBUG_sched
-                       | DEBUG_interp
-                       | DEBUG_weak
-                       | DEBUG_gccafs
-                       | DEBUG_gc
-                       | DEBUG_block_alloc
-                       | DEBUG_sanity
-                       | DEBUG_stable
-                       | DEBUG_stm
-                       | DEBUG_prof
-                       | DEBUG_linker
-                       | DEBUG_squeeze
-                       | DEBUG_hpc
-#endif
-        );
+    eventlog_enabled = RtsFlags.TraceFlags.tracing == TRACE_EVENTLOG;
 
     if (eventlog_enabled) {
         initEventLogging();
@@ -211,6 +193,15 @@ static void traceSchedEvent_stderr (Capability *cap, EventTypeNum tag,
     case EVENT_GC_END:          // (cap)
         debugBelch("cap %d: finished GC\n", cap->no);
         break;
+    case EVENT_GC_IDLE:        // (cap)
+        debugBelch("cap %d: GC idle\n", cap->no);
+        break;
+    case EVENT_GC_WORK:          // (cap)
+        debugBelch("cap %d: GC working\n", cap->no);
+        break;
+    case EVENT_GC_DONE:          // (cap)
+        debugBelch("cap %d: GC done\n", cap->no);
+        break;
     default:
         debugBelch("cap %2d: thread %lu: event %d\n\n", 
                    cap->no, (lnat)tso->id, tag);
@@ -225,7 +216,7 @@ void traceSchedEvent_ (Capability *cap, EventTypeNum tag,
                       StgTSO *tso, StgWord64 other)
 {
 #ifdef DEBUG
-    if (RtsFlags.TraceFlags.trace_stderr) {
+    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
         traceSchedEvent_stderr(cap, tag, tso, other);
     } else
 #endif
@@ -234,6 +225,18 @@ void traceSchedEvent_ (Capability *cap, EventTypeNum tag,
     }
 }
 
+void traceEvent_ (Capability *cap, EventTypeNum tag)
+{
+#ifdef DEBUG
+    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
+        traceSchedEvent_stderr(cap, tag, 0, 0);
+    } else
+#endif
+    {
+        postEvent(cap,tag);
+    }
+}
+
 #ifdef DEBUG
 static void traceCap_stderr(Capability *cap, char *msg, va_list ap)
 {
@@ -254,7 +257,7 @@ void traceCap_(Capability *cap, char *msg, ...)
     va_start(ap,msg);
     
 #ifdef DEBUG
-    if (RtsFlags.TraceFlags.trace_stderr) {
+    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
         traceCap_stderr(cap, msg, ap);
     } else
 #endif
@@ -284,7 +287,7 @@ void trace_(char *msg, ...)
     va_start(ap,msg);
 
 #ifdef DEBUG
-    if (RtsFlags.TraceFlags.trace_stderr) {
+    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
         trace_stderr(msg, ap);
     } else
 #endif
@@ -295,10 +298,24 @@ void trace_(char *msg, ...)
     va_end(ap);
 }
 
+void traceUserMsg(Capability *cap, char *msg)
+{
+#ifdef DEBUG
+    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
+        traceCap_stderr(cap, msg, NULL);
+    } else
+#endif
+    {
+        if (eventlog_enabled) {
+            postUserMsg(cap, msg);
+        }
+    }
+}
+
 void traceThreadStatus_ (StgTSO *tso USED_IF_DEBUG)
 {
 #ifdef DEBUG
-    if (RtsFlags.TraceFlags.trace_stderr) {
+    if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
         printThreadStatus(tso);
     } else
 #endif