#ifdef TRACING
#include "GetTime.h"
+#include "GetEnv.h"
#include "Stats.h"
#include "eventlog/EventLog.h"
#include "Threads.h"
void traceCapsetModify_ (EventTypeNum tag,
CapsetID capset,
- StgWord32 other,
- StgWord32 other2)
+ StgWord32 other)
{
#ifdef DEBUG
if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
tracePreface();
switch (tag) {
case EVENT_CAPSET_CREATE: // (capset, capset_type)
- debugBelch("created capset %d of type %d\n", capset, other);
+ debugBelch("created capset %lu of type %d\n", (lnat)capset, (int)other);
break;
case EVENT_CAPSET_DELETE: // (capset)
- debugBelch("deleted capset %d\n", capset);
+ debugBelch("deleted capset %lu\n", (lnat)capset);
break;
case EVENT_CAPSET_ASSIGN_CAP: // (capset, capno)
- debugBelch("assigned cap %d to capset %d\n", other, capset);
+ debugBelch("assigned cap %lu to capset %lu\n",
+ (lnat)other, (lnat)capset);
break;
case EVENT_CAPSET_REMOVE_CAP: // (capset, capno)
- debugBelch("removed cap %d from capset %d\n", other, capset);
+ debugBelch("removed cap %lu from capset %lu\n",
+ (lnat)other, (lnat)capset);
break;
}
RELEASE_LOCK(&trace_utx);
} else
#endif
{
- if(eventlog_enabled) postCapsetModifyEvent(tag, capset, other, other2);
+ if (eventlog_enabled) {
+ postCapsetModifyEvent(tag, capset, other);
+ }
}
}
-extern char **environ;
-
-void traceCapsetDetails_(int *argc, char **argv[]){
- if(eventlog_enabled){
+void traceOSProcessInfo_(void) {
+ if (eventlog_enabled) {
postCapsetModifyEvent(EVENT_OSPROCESS_PID,
CAPSET_OSPROCESS_DEFAULT,
- getpid(),
+ getpid());
+
+#if !defined(cygwin32_HOST_OS) && !defined (mingw32_HOST_OS)
+/* Windows has no strong concept of process heirarchy, so no getppid().
+ * In any case, this trace event is mainly useful for tracing programs
+ * that use 'forkProcess' which Windows doesn't support anyway.
+ */
+ postCapsetModifyEvent(EVENT_OSPROCESS_PPID,
+ CAPSET_OSPROCESS_DEFAULT,
getppid());
-
- char buf[256];
- snprintf(buf, sizeof(buf), "GHC-%s %s", ProjectVersion, RtsWay);
- postCapsetStrEvent(EVENT_RTS_IDENTIFIER,
- CAPSET_OSPROCESS_DEFAULT,
- buf);
-
- if(argc != NULL && argv != NULL){
- postCapsetVecEvent(EVENT_PROGRAM_ARGS,
+#endif
+ {
+ char buf[256];
+ snprintf(buf, sizeof(buf), "GHC-%s %s", ProjectVersion, RtsWay);
+ postCapsetStrEvent(EVENT_RTS_IDENTIFIER,
CAPSET_OSPROCESS_DEFAULT,
- *argc,
- *argv);
+ buf);
+ }
+ {
+ int argc = 0; char **argv;
+ getFullProgArgv(&argc, &argv);
+ if (argc != 0) {
+ postCapsetVecEvent(EVENT_PROGRAM_ARGS,
+ CAPSET_OSPROCESS_DEFAULT,
+ argc, argv);
+ }
+ }
+ {
+ int envc = 0; char **envv;
+ getProgEnvv(&envc, &envv);
+ if (envc != 0) {
+ postCapsetVecEvent(EVENT_PROGRAM_ENV,
+ CAPSET_OSPROCESS_DEFAULT,
+ envc, envv);
+ }
+ freeProgEnvv(envc, envv);
}
-
- int env_len;
- for( env_len = 0; environ[env_len] != NULL; env_len++);
- postCapsetVecEvent(EVENT_PROGRAM_ENV,
- CAPSET_OSPROCESS_DEFAULT,
- env_len,
- environ);
}
}
}
}
+void traceEventStartup_(int nocaps)
+{
+ if (eventlog_enabled) {
+ postEventStartup(nocaps);
+ }
+}
#ifdef DEBUG
void traceBegin (const char *str, ...)