--- /dev/null
+/* -----------------------------------------------------------------------------
+ *
+ * (c) The GHC Team, 2009
+ *
+ * User-space dtrace probes for the runtime system.
+ *
+ * ---------------------------------------------------------------------------*/
+
+#include "HsFFI.h"
+#include "rts/EventLogFormat.h"
+
+
+// -----------------------------------------------------------------------------
+// Payload datatypes for Haskell events
+// -----------------------------------------------------------------------------
+
+// We effectively have:
+//
+// typedef uint16_t EventTypeNum;
+// typedef uint64_t EventTimestamp; // in nanoseconds
+// typedef uint32_t EventThreadID;
+// typedef uint16_t EventCapNo;
+// typedef uint16_t EventPayloadSize; // variable-size events
+// typedef uint16_t EventThreadStatus;
+
+
+// -----------------------------------------------------------------------------
+// The HaskellEvent provider captures everything from eventlog for use with
+// dtrace
+// -----------------------------------------------------------------------------
+
+// These probes correspond to the events defined in EventLogFormat.h
+//
+provider HaskellEvent {
+
+ // scheduler events
+ probe create__thread (EventCapNo, EventThreadID);
+ probe run__thread (EventCapNo, EventThreadID);
+ probe stop__thread (EventCapNo, EventThreadID, EventThreadStatus);
+ probe thread__runnable (EventCapNo, EventThreadID);
+ probe migrate__thread (EventCapNo, EventThreadID, EventCapNo);
+ probe run__spark (EventCapNo, EventThreadID);
+ probe steal__spark (EventCapNo, EventThreadID, EventCapNo);
+ probe shutdown (EventCapNo);
+ probe thread_wakeup (EventCapNo, EventThreadID, EventCapNo);
+ probe gc__start (EventCapNo);
+ probe gc__end (EventCapNo);
+ probe request__seq__gc (EventCapNo);
+ probe request__par__gc (EventCapNo);
+ probe create__spark__thread (EventCapNo, EventThreadID);
+
+ // other events
+//This one doesn't seem to be used at all at the moment:
+// probe log__msg (char *);
+ probe startup (EventCapNo);
+ // we don't need EVENT_BLOCK_MARKER with dtrace
+ probe user__msg (EventCapNo, char *);
+ probe gc__idle (EventCapNo);
+ probe gc__work (EventCapNo);
+ probe gc__done (EventCapNo);
+
+};