Draw_Item .h and .c design complete. Now, needs to be implemented.
[lttv.git] / ltt / branches / poly / include / lttv / state.h
CommitLineData
dc877563 1#ifndef STATE_H
2#define STATE_H
3
ffd54a90 4#include <glib.h>
dc877563 5#include <lttv/processTrace.h>
6
7/* The operating system state kept during the trace analysis
8 contains a subset of the real operating system state,
9 sufficient for the analysis, and possibly organized quite differently.
10
ffd54a90 11 The state information is added to LttvTracesetContext, LttvTraceContext
dc877563 12 and LttvTracefileContext objects, used by processTrace, through
13 subtyping. The context objects already reflect the multiple tracefiles
14 (one per cpu) per trace and multiple traces per trace set. The state
15 objects defined here simply add fields to the relevant context objects. */
16
ffd54a90 17typedef struct _LttvTracesetState LttvTracesetState;
18typedef struct _LttvTracesetStateClass LttvTracesetStateClass;
19
20typedef struct _LttvTraceState LttvTraceState;
21typedef struct _LttvTraceStateClass LttvTraceStateClass;
22
23typedef struct _LttvTracefileState LttvTracefileState;
24typedef struct _LttvTracefileStateClass LttvTracefileStateClass;
25
996acd92 26gboolean lttv_state_add_event_hooks(LttvTracesetState *self);
dc877563 27
996acd92 28gboolean lttv_state_remove_event_hooks(LttvTracesetState *self);
dc877563 29
b445142a 30/* The LttvProcessState structure defines the current state for each process.
31 A process can make system calls (in some rare cases nested) and receive
32 interrupts/faults. For instance, a process may issue a system call,
33 generate a page fault while reading an argument from user space, and
34 get caught by an interrupt. To represent these nested states, an
35 execution mode stack is maintained. The stack bottom is normal user mode
36 and the top of stack is the current execution mode.
37
38 The execution mode stack tells about the process status, execution mode and
39 submode (interrupt, system call or IRQ number). All these could be
40 defined as enumerations but may need extensions (e.g. new process state).
41 GQuark are thus used. They are as easy to manipulate as integers but have
42 a string associated, just like enumerations.
dc877563 43
b445142a 44 The execution mode is one of "user mode", "kernel thread", "system call",
dc877563 45 "interrupt request", "fault". */
46
b445142a 47typedef GQuark LttvExecutionMode;
dc877563 48
b445142a 49extern LttvExecutionMode
ffd54a90 50 LTTV_STATE_USER_MODE,
51 LTTV_STATE_SYSCALL,
52 LTTV_STATE_TRAP,
b445142a 53 LTTV_STATE_IRQ,
54 LTTV_STATE_MODE_UNKNOWN;
ffd54a90 55
dc877563 56
b445142a 57/* The submode number depends on the execution mode. For user mode or kernel
58 thread, which are the normal mode (execution mode stack bottom),
59 it is set to "none". For interrupt requests, faults and system calls,
60 it is set respectively to the interrupt name (e.g. "timer"), fault name
996acd92 61 (e.g. "page fault"), and system call name (e.g. "select"). */
dc877563 62
b445142a 63typedef GQuark LttvExecutionSubmode;
dc877563 64
b445142a 65extern LttvExecutionSubmode
66 LTTV_STATE_SUBMODE_NONE,
67 LTTV_STATE_SUBMODE_UNKNOWN;
dc877563 68
69/* The process status is one of "running", "wait-cpu" (runnable), or "wait-*"
70 where "*" describes the resource waited for (e.g. timer, process,
71 disk...). */
72
73typedef GQuark LttvProcessStatus;
74
ffd54a90 75extern LttvProcessStatus
76 LTTV_STATE_UNNAMED,
77 LTTV_STATE_WAIT_FORK,
78 LTTV_STATE_WAIT_CPU,
79 LTTV_STATE_EXIT,
80 LTTV_STATE_WAIT,
81 LTTV_STATE_RUN;
dc877563 82
ffd54a90 83
b445142a 84typedef struct _LttvExecutionState {
85 LttvExecutionMode t;
86 LttvExecutionSubmode n;
ba576a78 87 LttTime entry;
b445142a 88 LttTime change;
dc877563 89 LttvProcessStatus s;
b445142a 90} LttvExecutionState;
dc877563 91
92
93typedef struct _LttvProcessState {
94 guint pid;
3e561027 95 guint ppid;
b445142a 96 LttTime creation_time;
dc877563 97 GQuark name;
b445142a 98 GQuark pid_time;
99 GArray *execution_stack; /* Array of LttvExecutionState */
100 LttvExecutionState *state; /* Top of interrupt stack */
101 /* opened file descriptors, address map?... */
dc877563 102} LttvProcessState;
103
104
b445142a 105LttvProcessState *lttv_state_find_process(LttvTracefileState *tfs, guint pid);
106
107
ffd54a90 108/* The LttvTracesetState, LttvTraceState and LttvTracefileState types
dc877563 109 inherit from the corresponding Context objects defined in processTrace. */
110
111#define LTTV_TRACESET_STATE_TYPE (lttv_traceset_state_get_type ())
ffd54a90 112#define LTTV_TRACESET_STATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_TRACESET_STATE_TYPE, LttvTracesetState))
113#define LTTV_TRACESET_STATE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_TRACESET_STATE_TYPE, LttvTracesetStateClass))
dc877563 114#define LTTV_IS_TRACESET_STATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LTTV_TRACESET_STATE_TYPE))
115#define LTTV_IS_TRACESET_STATE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACESET_STATE_TYPE))
ffd54a90 116#define LTTV_TRACESET_STATE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACESET_STATE_TYPE, LttvTracesetStateClass))
dc877563 117
ffd54a90 118struct _LttvTracesetState {
119 LttvTracesetContext parent;
dc877563 120};
121
122struct _LttvTracesetStateClass {
ffd54a90 123 LttvTracesetContextClass parent;
dc877563 124};
125
126GType lttv_traceset_state_get_type (void);
127
128
129#define LTTV_TRACE_STATE_TYPE (lttv_trace_state_get_type ())
130#define LTTV_TRACE_STATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_TRACE_STATE_TYPE, LttvTraceState))
131#define LTTV_TRACE_STATE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_TRACE_STATE_TYPE, LttvTraceStateClass))
132#define LTTV_IS_TRACE_STATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LTTV_TRACE_STATE_TYPE))
133#define LTTV_IS_TRACE_STATE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACE_STATE_TYPE))
134#define LTTV_TRACE_STATE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACE_STATE_TYPE, LttvTraceStateClass))
135
dc877563 136struct _LttvTraceState {
137 LttvTraceContext parent;
138
139 GHashTable *processes; /* LttvProcessState objects indexed by pid */
140 /* Block/char devices, locks, memory pages... */
b445142a 141 GQuark *eventtype_names;
142 GQuark *syscall_names;
143 GQuark *trap_names;
144 GQuark *irq_names;
dc877563 145};
146
147struct _LttvTraceStateClass {
148 LttvTraceContextClass parent;
149};
150
151GType lttv_trace_state_get_type (void);
152
153
154#define LTTV_TRACEFILE_STATE_TYPE (lttv_tracefile_state_get_type ())
155#define LTTV_TRACEFILE_STATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_TRACEFILE_STATE_TYPE, LttvTracefileState))
156#define LTTV_TRACEFILE_STATE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_TRACEFILE_STATE_TYPE, LttvTracefileStateClass))
157#define LTTV_IS_TRACEFILE_STATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LTTV_TRACEFILE_STATE_TYPE))
158#define LTTV_IS_TRACEFILE_STATE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACEFILE_STATE_TYPE))
159#define LTTV_TRACEFILE_STATE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACEFILE_STATE_TYPE, LttvTracefileStateClass))
160
dc877563 161struct _LttvTracefileState {
162 LttvTracefileContext parent;
163
164 LttvProcessState *process;
b445142a 165 GQuark cpu_name;
dc877563 166};
167
168struct _LttvTracefileStateClass {
169 LttvTracefileContextClass parent;
170};
171
172GType lttv_tracefile_state_get_type (void);
173
174
b445142a 175#endif // STATE_H
This page took 0.030822 seconds and 4 git commands to generate.