void traceCapEvent_ (Capability *cap, EventTypeNum tag) { #ifdef DEBUG if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) { ACQUIRE_LOCK(&trace_utx); tracePreface(); switch (tag) { case EVENT_CAP_CREATE: // (cap) debugBelch("cap %d: initialised\n", cap->no); break; case EVENT_CAP_DELETE: // (cap) debugBelch("cap %d: shutting down\n", cap->no); break; case EVENT_CAP_ENABLE: // (cap) debugBelch("cap %d: enabling capability\n", cap->no); break; case EVENT_CAP_DISABLE: // (cap) debugBelch("cap %d: disabling capability\n", cap->no); break; } RELEASE_LOCK(&trace_utx); } else #endif { if (eventlog_enabled) { postCapEvent(tag, (EventCapNo)cap->no); } } }
void traceCapsetEvent_ (EventTypeNum tag, CapsetID capset, StgWord info) { #ifdef DEBUG if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) { ACQUIRE_LOCK(&trace_utx); tracePreface(); switch (tag) { case EVENT_CAPSET_CREATE: // (capset, capset_type) debugBelch("created capset %lu of type %d\n", (lnat)capset, (int)info); break; case EVENT_CAPSET_DELETE: // (capset) debugBelch("deleted capset %lu\n", (lnat)capset); break; case EVENT_CAPSET_ASSIGN_CAP: // (capset, capno) debugBelch("assigned cap %lu to capset %lu\n", (lnat)info, (lnat)capset); break; case EVENT_CAPSET_REMOVE_CAP: // (capset, capno) debugBelch("removed cap %lu from capset %lu\n", (lnat)info, (lnat)capset); break; } RELEASE_LOCK(&trace_utx); } else #endif { if (eventlog_enabled) { postCapsetEvent(tag, capset, info); } } }
static void traceGcEvent_stderr (Capability *cap, EventTypeNum tag) { ACQUIRE_LOCK(&trace_utx); tracePreface(); switch (tag) { case EVENT_REQUEST_SEQ_GC: // (cap) debugBelch("cap %d: requesting sequential GC\n", cap->no); break; case EVENT_REQUEST_PAR_GC: // (cap) debugBelch("cap %d: requesting parallel GC\n", cap->no); break; case EVENT_GC_START: // (cap) debugBelch("cap %d: starting GC\n", cap->no); break; 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: barf("traceGcEvent: unknown event tag %d", tag); break; } RELEASE_LOCK(&trace_utx); }
static void vtrace_stderr(char *msg, va_list ap) { ACQUIRE_LOCK(&trace_utx); tracePreface(); vdebugBelch(msg,ap); debugBelch("\n"); RELEASE_LOCK(&trace_utx); }
static void vtraceCap_stderr(Capability *cap, char *msg, va_list ap) { ACQUIRE_LOCK(&trace_utx); tracePreface(); debugBelch("cap %d: ", cap->no); vdebugBelch(msg,ap); debugBelch("\n"); RELEASE_LOCK(&trace_utx); }
static void traceSchedEvent_stderr (Capability *cap, EventTypeNum tag, StgTSO *tso, StgWord info1 STG_UNUSED, StgWord info2 STG_UNUSED) { ACQUIRE_LOCK(&trace_utx); tracePreface(); switch (tag) { case EVENT_CREATE_THREAD: // (cap, thread) debugBelch("cap %d: created thread %lu\n", cap->no, (lnat)tso->id); break; case EVENT_RUN_THREAD: // (cap, thread) debugBelch("cap %d: running thread %lu (%s)\n", cap->no, (lnat)tso->id, what_next_strs[tso->what_next]); break; case EVENT_THREAD_RUNNABLE: // (cap, thread) debugBelch("cap %d: thread %lu appended to run queue\n", cap->no, (lnat)tso->id); break; case EVENT_MIGRATE_THREAD: // (cap, thread, new_cap) debugBelch("cap %d: thread %lu migrating to cap %d\n", cap->no, (lnat)tso->id, (int)info1); break; case EVENT_THREAD_WAKEUP: // (cap, thread, info1_cap) debugBelch("cap %d: waking up thread %lu on cap %d\n", cap->no, (lnat)tso->id, (int)info1); break; case EVENT_STOP_THREAD: // (cap, thread, status) if (info1 == 6 + BlockedOnBlackHole) { debugBelch("cap %d: thread %lu stopped (blocked on black hole owned by thread %lu)\n", cap->no, (lnat)tso->id, (long)info2); } else { debugBelch("cap %d: thread %lu stopped (%s)\n", cap->no, (lnat)tso->id, thread_stop_reasons[info1]); } break; case EVENT_SHUTDOWN: // (cap) debugBelch("cap %d: shutting down\n", cap->no); break; default: debugBelch("cap %d: thread %lu: event %d\n\n", cap->no, (lnat)tso->id, tag); break; } RELEASE_LOCK(&trace_utx); }
static void traceSparkEvent_stderr (Capability *cap, EventTypeNum tag, StgWord info1) { ACQUIRE_LOCK(&trace_utx); tracePreface(); switch (tag) { case EVENT_CREATE_SPARK_THREAD: // (cap, spark_thread) debugBelch("cap %d: creating spark thread %lu\n", cap->no, (long)info1); break; case EVENT_SPARK_CREATE: // (cap) debugBelch("cap %d: added spark to pool\n", cap->no); break; case EVENT_SPARK_DUD: // (cap) debugBelch("cap %d: discarded dud spark\n", cap->no); break; case EVENT_SPARK_OVERFLOW: // (cap) debugBelch("cap %d: discarded overflowed spark\n", cap->no); break; case EVENT_SPARK_RUN: // (cap) debugBelch("cap %d: running a spark\n", cap->no); break; case EVENT_SPARK_STEAL: // (cap, victim_cap) debugBelch("cap %d: stealing a spark from cap %d\n", cap->no, (int)info1); break; case EVENT_SPARK_FIZZLE: // (cap) debugBelch("cap %d: fizzled spark removed from pool\n", cap->no); break; case EVENT_SPARK_GC: // (cap) debugBelch("cap %d: GCd spark removed from pool\n", cap->no); break; default: barf("traceSparkEvent: unknown event tag %d", tag); break; } RELEASE_LOCK(&trace_utx); }
void traceThreadLabel_(Capability *cap, StgTSO *tso, char *label) { #ifdef DEBUG if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) { ACQUIRE_LOCK(&trace_utx); tracePreface(); debugBelch("cap %d: thread %" FMT_Word " has label %s\n", cap->no, (W_)tso->id, label); RELEASE_LOCK(&trace_utx); } else #endif { postThreadLabel(cap, tso->id, label); } }
void traceCapsetEvent_ (EventTypeNum tag, CapsetID capset, StgWord info) { #ifdef DEBUG if (RtsFlags.TraceFlags.tracing == TRACE_STDERR && TRACE_sched) // When events go to stderr, it is annoying to see the capset // events every time, so we only emit them with -Ds. { ACQUIRE_LOCK(&trace_utx); tracePreface(); switch (tag) { case EVENT_CAPSET_CREATE: // (capset, capset_type) debugBelch("created capset %" FMT_Word32 " of type %d\n", capset, (int)info); break; case EVENT_CAPSET_DELETE: // (capset) debugBelch("deleted capset %" FMT_Word32 "\n", capset); break; case EVENT_CAPSET_ASSIGN_CAP: // (capset, capno) debugBelch("assigned cap %" FMT_Word " to capset %" FMT_Word32 "\n", info, capset); break; case EVENT_CAPSET_REMOVE_CAP: // (capset, capno) debugBelch("removed cap %" FMT_Word " from capset %" FMT_Word32 "\n", info, capset); break; } RELEASE_LOCK(&trace_utx); } else #endif { if (eventlog_enabled) { postCapsetEvent(tag, capset, info); } } }