typedef enum PTevent { SAdmit = 0, /* Edf admit */ SRelease, /* Edf release, waiting to be scheduled */ SEdf, /* running under EDF */ SRun, /* running best effort */ SReady, /* runnable but not running */ SSleep, /* blocked; arg is PSstate| pc<<8 */ SYield, /* blocked waiting for release */ SSlice, /* slice exhausted */ SDeadline, /* proc's deadline */ SExpel, /* Edf expel */ SDead, /* proc dies */ SInts, /* Interrupt start */ SInte, /* Interrupt end */ STrap, /* fault */ SUser, /* user event */ SName, /* used to report names for pids */ Nevent, } Tevent; enum { PTsize = 4 + 4 + 4 + 8 + 8, /* STrap arg flags */ STrapRPF = 0x1000000000000000ULL, /* page fault (read) STrap arg */ STrapWPF = 0x1000000000000000ULL, /* page fault (write) STrap arg */ STrapSC = 0x2000000000000000ULL, /* sys call STrap arg */ STrapMask = 0x0FFFFFFFFFFFFFFFULL, /* bits available in arg */ /* Sleep states; keep in sync with the kernel schedstate * BUG: generate automatically. */ PSDead = 0, /* not used */ PSMoribund, /* not used */ PSReady, /* not used */ PSScheding, /* not used */ PSRunning, /* not used */ PSQueueing, PSQueueingR, PSQueueingW, PSWakeme, PSBroken, /* not used */ PSStopped, /* not used */ PSRendezvous, PSWaitrelease, }; typedef struct PTraceevent PTraceevent; struct PTraceevent { uint32_t pid; /* for the process */ uint32_t etype; /* Event type */ uint32_t machno; /* where the event happen */ int64_t time; /* time stamp */ uint64_t arg; /* for this event type */ };