TTRACE instrument process.c
diff --git a/kern/src/process.c b/kern/src/process.c
index cac3977..29dad76 100644
--- a/kern/src/process.c
+++ b/kern/src/process.c
@@ -24,6 +24,7 @@
 #include <arsc_server.h>
 #include <devfs.h>
 #include <kmalloc.h>
+#include <ros/ttrace.h>
 
 struct kmem_cache *proc_cache;
 
@@ -167,6 +168,7 @@
 	}
 	#endif
 	p->state = state;
+	TTRACE_PROC_SETSTATE(p->pid, state, curstate);
 	return 0;
 }
 
@@ -257,6 +259,7 @@
 	 * extra junk up to progname_sz. */
 	strncpy(p->progname, name, PROC_PROGNAME_SZ);
 	p->progname[PROC_PROGNAME_SZ - 1] = '\0';
+	TTRACE_PROC_SETNAME(p->pid, p->progname);
 }
 
 /* Be sure you init'd the vcore lists before calling this. */
@@ -335,9 +338,11 @@
 	} else {
 		p->ppid = 0;
 	}
+	TTRACE_PROC_ALLOC(p->pid, p->ppid);
 	TAILQ_INIT(&p->children);
 	cv_init(&p->child_wait);
 	p->state = PROC_CREATED; /* shouldn't go through state machine for init */
+	TTRACE_PROC_SETSTATE(p->pid, PROC_CREATED, 0);
 	p->env_flags = 0;
 	p->env_entry = 0; // cheating.  this really gets set later
 	p->heap_top = 0;
@@ -417,6 +422,7 @@
 {
 	/* Tell the ksched about us.  TODO: do we need to worry about the ksched
 	 * doing stuff to us before we're added to the pid_hash? */
+	TTRACE_PROC_READY(p->pid);
 	__sched_proc_register(p);
 	spin_lock(&pid_hash_lock);
 	hashtable_insert(pid_hash, (void*)(long)p->pid, p);
@@ -453,7 +459,10 @@
 	void *hash_ret;
 	physaddr_t pa;
 
-	printd("[PID %d] freeing proc: %d\n", current ? current->pid : 0, p->pid);
+	const pid_t pid = p->pid;
+	const pid_t cpid = current ? current->pid : 0;
+	printd("[PID %d] freeing proc: %d\n", cpid : 0, pid);
+
 	// All parts of the kernel should have decref'd before __proc_free is called
 	assert(kref_refcnt(&p->p_kref) == 0);
 	assert(TAILQ_EMPTY(&p->alarmset.list));
@@ -479,13 +488,13 @@
 	}
 	/* Remove us from the pid_hash and give our PID back (in that order). */
 	spin_lock(&pid_hash_lock);
-	hash_ret = hashtable_remove(pid_hash, (void*)(long)p->pid);
+	hash_ret = hashtable_remove(pid_hash, (void*)(long)pid);
 	spin_unlock(&pid_hash_lock);
 	/* might not be in the hash/ready, if we failed during proc creation */
 	if (hash_ret)
-		put_free_pid(p->pid);
+		put_free_pid(pid);
 	else
-		printd("[kernel] pid %d not in the PID hash in %s\n", p->pid,
+		printd("[kernel] pid %d not in the PID hash in %s\n", pid,
 		       __FUNCTION__);
 	/* all memory below UMAPTOP should have been freed via the VMRs.  the stuff
 	 * above is the global page and procinfo/procdata */
@@ -503,6 +512,7 @@
 
 	/* Dealloc the struct proc */
 	kmem_cache_free(proc_cache, p);
+	TTRACE_PROC_FREE(pid, cpid);
 }
 
 /* Whether or not actor can control target.  TODO: do something reasonable here.