X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Finclude%2Flttv%2Fstate.h;h=f85847b4da52727c0841d586ad2c797d846da11a;hb=b445142a71748192520cfd645b4963e23070a486;hp=c11c9b4036bf5d9a2839cea32d58c830c9ac922d;hpb=ba576a781d5a1020ff7202ac9a959c9f4a0c7a4c;p=lttv.git diff --git a/ltt/branches/poly/include/lttv/state.h b/ltt/branches/poly/include/lttv/state.h index c11c9b40..f85847b4 100644 --- a/ltt/branches/poly/include/lttv/state.h +++ b/ltt/branches/poly/include/lttv/state.h @@ -14,22 +14,6 @@ (one per cpu) per trace and multiple traces per trace set. The state objects defined here simply add fields to the relevant context objects. */ - -/* The LttvProcessState structure defines the current state for each process. - A process can make system calls (in some rare cases nested) and receive - interrupts/faults. For instance, a process may issue a system call, - generate a page fault while reading an argument from user space, and - get caught by an interrupt. To represent these nested states, an - interrupt stack is maintained. The stack bottom is normal user mode and - the top of stack is the current interrupt state. - - The interrupt state tells about the process status, interrupt type and - interrupt number. All these could be defined as enumerations but may - need extensions (e.g. new process state). GQuark are thus used being - as easy to manipulate as integers but having a string associated, just - like enumerations. */ - - typedef struct _LttvTracesetState LttvTracesetState; typedef struct _LttvTracesetStateClass LttvTracesetStateClass; @@ -43,27 +27,44 @@ gboolean lttv_state_add_event_hooks(LttvTracesetState *self); gboolean lttv_state_remove_event_hooks(LttvTracesetState *self); +/* The LttvProcessState structure defines the current state for each process. + A process can make system calls (in some rare cases nested) and receive + interrupts/faults. For instance, a process may issue a system call, + generate a page fault while reading an argument from user space, and + get caught by an interrupt. To represent these nested states, an + execution mode stack is maintained. The stack bottom is normal user mode + and the top of stack is the current execution mode. + + The execution mode stack tells about the process status, execution mode and + submode (interrupt, system call or IRQ number). All these could be + defined as enumerations but may need extensions (e.g. new process state). + GQuark are thus used. They are as easy to manipulate as integers but have + a string associated, just like enumerations. -/* The interrupt type is one of "user mode", "kernel thread", "system call", + The execution mode is one of "user mode", "kernel thread", "system call", "interrupt request", "fault". */ -typedef GQuark LttvInterruptType; +typedef GQuark LttvExecutionMode; -extern LttvInterruptType +extern LttvExecutionMode LTTV_STATE_USER_MODE, LTTV_STATE_SYSCALL, LTTV_STATE_TRAP, - LTTV_STATE_IRQ; + LTTV_STATE_IRQ, + LTTV_STATE_MODE_UNKNOWN; -/* The interrupt number depends on the interrupt type. For user mode or kernel - thread, which are the normal mode (interrupt stack bottom), it is set to - "none". For interrupt requests, faults and system calls, it is set - respectively to the interrupt name (e.g. "timer"), fault name +/* The submode number depends on the execution mode. For user mode or kernel + thread, which are the normal mode (execution mode stack bottom), + it is set to "none". For interrupt requests, faults and system calls, + it is set respectively to the interrupt name (e.g. "timer"), fault name (e.g. "page fault"), and system call name (e.g. "select"). */ -typedef GQuark LttvInterruptNumber; +typedef GQuark LttvExecutionSubmode; +extern LttvExecutionSubmode + LTTV_STATE_SUBMODE_NONE, + LTTV_STATE_SUBMODE_UNKNOWN; /* The process status is one of "running", "wait-cpu" (runnable), or "wait-*" where "*" describes the resource waited for (e.g. timer, process, @@ -80,25 +81,30 @@ extern LttvProcessStatus LTTV_STATE_RUN; -typedef struct _LttvInterruptState { - LttvInterruptType t; - LttvInterruptNumber n; +typedef struct _LttvExecutionState { + LttvExecutionMode t; + LttvExecutionSubmode n; LttTime entry; - LttTime last_change; + LttTime change; LttvProcessStatus s; -} LttvInterruptState; +} LttvExecutionState; typedef struct _LttvProcessState { guint pid; - LttTime birth; + guint ppid; + LttTime creation_time; GQuark name; - GArray *interrupt_stack; /* Array of LttvInterruptState */ - LttvInterruptState *state; /* Top of interrupt stack */ - /* opened file descriptors, address map... */ + GQuark pid_time; + GArray *execution_stack; /* Array of LttvExecutionState */ + LttvExecutionState *state; /* Top of interrupt stack */ + /* opened file descriptors, address map?... */ } LttvProcessState; +LttvProcessState *lttv_state_find_process(LttvTracefileState *tfs, guint pid); + + /* The LttvTracesetState, LttvTraceState and LttvTracefileState types inherit from the corresponding Context objects defined in processTrace. */ @@ -132,6 +138,10 @@ struct _LttvTraceState { GHashTable *processes; /* LttvProcessState objects indexed by pid */ /* Block/char devices, locks, memory pages... */ + GQuark *eventtype_names; + GQuark *syscall_names; + GQuark *trap_names; + GQuark *irq_names; }; struct _LttvTraceStateClass { @@ -152,6 +162,7 @@ struct _LttvTracefileState { LttvTracefileContext parent; LttvProcessState *process; + GQuark cpu_name; }; struct _LttvTracefileStateClass { @@ -161,4 +172,4 @@ struct _LttvTracefileStateClass { GType lttv_tracefile_state_get_type (void); -#endif // PROCESSTRACE_H +#endif // STATE_H