Commit | Line | Data |
---|---|---|
5d10d135 ASL |
1 | /******************************************************************************* |
2 | * Copyright (c) 2009 Ericsson | |
3 | * | |
4 | * All rights reserved. This program and the accompanying materials are | |
5 | * made available under the terms of the Eclipse Public License v1.0 which | |
6 | * accompanies this distribution, and is available at | |
7 | * http://www.eclipse.org/legal/epl-v10.html | |
8 | * | |
9 | * Contributors: | |
10 | * Alvaro Sanchez-Leon (alvsan09@gmail.com) - Initial API and implementation | |
0821f854 | 11 | * Daniel U. Thibault (daniel.thibault@drdc-rddc.gc.ca) - 2011-06-21 Fixes |
5d10d135 | 12 | *******************************************************************************/ |
5945cec9 | 13 | package org.eclipse.linuxtools.internal.lttng.core.state; |
5d10d135 | 14 | |
212550ba | 15 | import java.util.Arrays; |
5d10d135 ASL |
16 | import java.util.HashMap; |
17 | import java.util.HashSet; | |
18 | ||
19 | /** | |
20 | * Singleton | |
0821f854 | 21 | * Establishes relationships of state-related strings. Since the strings and |
5d10d135 ASL |
22 | * relations are fixed, the elements are final i.e. just for reading. |
23 | * | |
24 | * @author alvaro | |
5d10d135 | 25 | */ |
9c4eb5f7 FC |
26 | |
27 | @SuppressWarnings("nls") | |
5d10d135 ASL |
28 | public class StateStrings { |
29 | ||
30 | // ======================================================================== | |
31 | // Table data | |
32 | // ======================================================================= | |
9c4eb5f7 | 33 | public static final String LTTV_STATE_UNBRANDED = ""; |
0821f854 | 34 | private static StateStrings instance = null; |
5d10d135 ASL |
35 | private final HashMap<String, Events> eventStrMap = new HashMap<String, Events>(); |
36 | private final HashMap<String, Events> stateTransEventMap = new HashMap<String, Events>(); | |
0821f854 | 37 | private final String[] syscall_names = new String[256]; |
5d10d135 ASL |
38 | private final String[] trap_names = new String[256]; |
39 | private final String[] irq_names = new String[256]; | |
40 | private final String[] soft_irq_names = new String[32]; | |
41 | ||
42 | private StateStrings() { | |
43 | // Build a Hash map from string name to actual event structure | |
44 | for (Events event : Events.values()) { | |
45 | eventStrMap.put(event.inName, event); | |
46 | if (event.isStateTransition()) { | |
47 | stateTransEventMap.put(event.inName, event); | |
48 | } | |
49 | } | |
50 | ||
51 | // Build system call names | |
52 | for (int i = 0; i < 256; i++) { | |
53 | syscall_names[i] = "syscall " + i; | |
54 | } | |
55 | ||
56 | // Build trap names | |
57 | for (int i = 0; i < 256; i++) { | |
58 | trap_names[i] = "trap " + i; | |
59 | } | |
60 | ||
61 | // Build irq names | |
62 | for (int i = 0; i < 256; i++) { | |
63 | irq_names[i] = "irq " + i; | |
64 | } | |
65 | ||
66 | // Build softirq names | |
67 | for (int i = 0; i < 32; i++) { | |
68 | soft_irq_names[i] = "softirq " + i; | |
69 | } | |
5d10d135 ASL |
70 | } |
71 | ||
72 | public static StateStrings getInstance() { | |
0821f854 | 73 | // Create singleton instance if not already done |
5d10d135 ASL |
74 | if (instance == null) { |
75 | instance = new StateStrings(); | |
76 | } | |
77 | return instance; | |
78 | } | |
79 | ||
80 | public enum Channels { | |
0821f854 FC |
81 | LTT_CHANNEL_FD_STATE("fd_state"), /* file descriptor state events */ |
82 | LTT_CHANNEL_GLOBAL_STATE("global_state"), /* system state dump events */ | |
83 | LTT_CHANNEL_IRQ_STATE("irq_state"), /* interrupt request (IRQ) events */ | |
84 | LTT_CHANNEL_MODULE_STATE("module_state"), /* modules state events (list of modules) */ | |
85 | LTT_CHANNEL_NETIF_STATE("netif_state"), /* network interface events */ | |
86 | LTT_CHANNEL_SOFTIRQ_STATE("softirq_state"), /* soft IRQs state events (soft IRQ vector table) */ | |
87 | LTT_CHANNEL_SWAP_STATE("swap_state"), /* swap state events */ | |
88 | LTT_CHANNEL_SYSCALL_STATE("syscall_state"), /* system calls state events (system call table) */ | |
89 | LTT_CHANNEL_TASK_STATE("task_state"), /* process state events */ | |
90 | LTT_CHANNEL_VM_STATE("vm_state"), /* virtual memory events (virtual memory table) */ | |
91 | LTT_CHANNEL_KPROBE_STATE("kprobe_state"), /* kprobe events (kprobe table) */ | |
92 | LTT_CHANNEL_FS("fs"), /* file system events */ | |
93 | LTT_CHANNEL_KERNEL("kernel"), /* kernel events */ | |
94 | LTT_CHANNEL_MM("mm"), /* memory management events */ | |
95 | LTT_CHANNEL_USERSPACE("userspace"), /* user space tracing events */ | |
96 | LTT_CHANNEL_BLOCK("block"); /* block devices events */ | |
97 | /* remaining channels: */ | |
98 | /* LTT_CHANNEL_DEFAULT("default"), /* null (i.e. no default) */ | |
99 | /* LTT_CHANNEL_INPUT("input"), /* LTT control command inputs */ | |
100 | /* LTT_CHANNEL_IPC("ipc"), /* Inter Process Communication (IPC) events */ | |
101 | /* LTT_CHANNEL_JBD2("jbd2"), /* Journaling Block Device (JBD) events (JBD2 fork for ext4 file system) */ | |
102 | /* LTT_CHANNEL_METADATA("metadata"), /* trace meta data */ | |
103 | /* LTT_CHANNEL_NET("net"), /* networking events */ | |
104 | /* LTT_CHANNEL_PM("pm"), /* power management events */ | |
105 | /* LTT_CHANNEL_RCU("rcu"), /* Read-Copy-Update (RCU) events */ | |
5d10d135 ASL |
106 | |
107 | private final String inName; | |
108 | ||
109 | private Channels(String name) { | |
110 | this.inName = name; | |
111 | } | |
112 | ||
113 | public String getInName() { | |
0821f854 FC |
114 | return this.inName; |
115 | } | |
116 | ||
5d10d135 | 117 | } |
5d10d135 | 118 | |
5d10d135 ASL |
119 | public enum Events { |
120 | LTT_EVENT_SYSCALL_ENTRY("syscall_entry"), /* */ | |
121 | LTT_EVENT_SYSCALL_EXIT("syscall_exit"), /* */ | |
122 | LTT_EVENT_TRAP_ENTRY("trap_entry"), /* */ | |
123 | LTT_EVENT_TRAP_EXIT("trap_exit"), /* */ | |
124 | LTT_EVENT_PAGE_FAULT_ENTRY("page_fault_entry"), /* */ | |
125 | LTT_EVENT_PAGE_FAULT_EXIT("page_fault_exit"), /* */ | |
126 | LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY("page_fault_nosem_entry"), /* */ | |
127 | LTT_EVENT_PAGE_FAULT_NOSEM_EXIT("page_fault_nosem_exit"), /* */ | |
128 | LTT_EVENT_IRQ_ENTRY("irq_entry"), /* */ | |
129 | LTT_EVENT_IRQ_EXIT("irq_exit"), /* */ | |
130 | LTT_EVENT_SOFT_IRQ_RAISE("softirq_raise"), /* */ | |
131 | LTT_EVENT_SOFT_IRQ_ENTRY("softirq_entry"), /* */ | |
132 | LTT_EVENT_SOFT_IRQ_EXIT("softirq_exit"), /* */ | |
133 | LTT_EVENT_SCHED_SCHEDULE("sched_schedule"), /* */ | |
134 | LTT_EVENT_PROCESS_FORK("process_fork"), /* */ | |
135 | LTT_EVENT_KTHREAD_CREATE("kthread_create"), /* */ | |
136 | LTT_EVENT_PROCESS_EXIT("process_exit"), /* */ | |
137 | LTT_EVENT_PROCESS_FREE("process_free"), /* */ | |
138 | LTT_EVENT_EXEC("exec"), /* */ | |
139 | LTT_EVENT_PROCESS_STATE("process_state"), /* */ | |
140 | LTT_EVENT_STATEDUMP_END("statedump_end"), /* */ | |
141 | LTT_EVENT_FUNCTION_ENTRY("function_entry"), /* */ | |
142 | LTT_EVENT_FUNCTION_EXIT("function_exit"), /* */ | |
143 | LTT_EVENT_THREAD_BRAND("thread_brand"), /* */ | |
144 | LTT_EVENT_REQUEST_ISSUE("_blk_request_issue"), /* */ | |
145 | LTT_EVENT_REQUEST_COMPLETE("_blk_request_complete"), /* */ | |
146 | LTT_EVENT_LIST_INTERRUPT("interrupt"), /* */ | |
147 | LTT_EVENT_SYS_CALL_TABLE("sys_call_table"), /* */ | |
148 | LTT_EVENT_SOFTIRQ_VEC("softirq_vec"), /* */ | |
149 | LTT_EVENT_KPROBE_TABLE("kprobe_table"), /* */ | |
150 | LTT_EVENT_KPROBE("kprobe"); /* */ | |
151 | ||
152 | private final String inName; | |
153 | private final HashSet<Fields> children = new HashSet<Fields>(); | |
154 | private Channels parent = null; | |
0821f854 FC |
155 | // Default value for the "expected to cause a state transition?" flag |
156 | // Although most events do cause a state transition, the default is kept | |
157 | // false to make this important property explicit in the static initializer | |
5d10d135 ASL |
158 | private boolean stateTransition = false; |
159 | ||
160 | static { | |
161 | associate(); | |
162 | } | |
163 | ||
164 | private Events(String name) { | |
165 | this.inName = name; | |
166 | } | |
167 | ||
168 | public String getInName() { | |
169 | return this.inName; | |
170 | } | |
171 | ||
172 | public Channels getParent() { | |
173 | return this.parent; | |
174 | } | |
175 | ||
176 | public void setParent(Channels parent) { | |
177 | this.parent = parent; | |
178 | } | |
179 | ||
180 | public HashSet<Fields> getChildren() { | |
181 | return children; | |
182 | } | |
183 | ||
184 | public boolean isStateTransition() { | |
185 | return stateTransition; | |
186 | } | |
187 | ||
188 | private static void associate() { | |
0821f854 | 189 | // SYSCALL_ENTRY can receive ip (?), syscall_id |
5d10d135 | 190 | LTT_EVENT_SYSCALL_ENTRY.setParent(Channels.LTT_CHANNEL_KERNEL); |
5d10d135 | 191 | LTT_EVENT_SYSCALL_ENTRY.stateTransition = true; |
0821f854 | 192 | LTT_EVENT_SYSCALL_ENTRY.getChildren().add(Fields.LTT_FIELD_SYSCALL_ID); |
5d10d135 | 193 | |
0821f854 | 194 | //SYSCALL_EXIT |
5d10d135 ASL |
195 | LTT_EVENT_SYSCALL_EXIT.setParent(Channels.LTT_CHANNEL_KERNEL); |
196 | LTT_EVENT_SYSCALL_EXIT.stateTransition = true; | |
197 | ||
0821f854 | 198 | // TRAP_ENTRY |
5d10d135 ASL |
199 | LTT_EVENT_TRAP_ENTRY.setParent(Channels.LTT_CHANNEL_KERNEL); |
200 | LTT_EVENT_TRAP_ENTRY.getChildren().add(Fields.LTT_FIELD_TRAP_ID); | |
201 | LTT_EVENT_TRAP_ENTRY.stateTransition = true; | |
202 | ||
0821f854 | 203 | // TRAP_EXIT |
5d10d135 ASL |
204 | LTT_EVENT_TRAP_EXIT.setParent(Channels.LTT_CHANNEL_KERNEL); |
205 | LTT_EVENT_TRAP_EXIT.stateTransition = true; | |
206 | ||
0821f854 | 207 | // PAGE_FAULT_ENTRY |
5d10d135 | 208 | LTT_EVENT_PAGE_FAULT_ENTRY.setParent(Channels.LTT_CHANNEL_KERNEL); |
0821f854 | 209 | LTT_EVENT_PAGE_FAULT_ENTRY.getChildren().add(Fields.LTT_FIELD_TRAP_ID); |
5d10d135 ASL |
210 | LTT_EVENT_PAGE_FAULT_ENTRY.stateTransition = true; |
211 | ||
0821f854 | 212 | // PAGE_FAULT_EXIT |
5d10d135 ASL |
213 | LTT_EVENT_PAGE_FAULT_EXIT.setParent(Channels.LTT_CHANNEL_KERNEL); |
214 | LTT_EVENT_PAGE_FAULT_EXIT.stateTransition = true; | |
215 | ||
0821f854 FC |
216 | // PAGE_FAULT_NOSEM_ENTRY |
217 | LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY.setParent(Channels.LTT_CHANNEL_KERNEL); | |
218 | LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY.getChildren().add(Fields.LTT_FIELD_TRAP_ID); | |
5d10d135 ASL |
219 | LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY.stateTransition = true; |
220 | ||
0821f854 FC |
221 | // PAGE_FAULT_NOSEM_EXIT |
222 | LTT_EVENT_PAGE_FAULT_NOSEM_EXIT.setParent(Channels.LTT_CHANNEL_KERNEL); | |
223 | LTT_EVENT_PAGE_FAULT_NOSEM_EXIT.getChildren().add(Fields.LTT_FIELD_TRAP_ID); | |
5d10d135 ASL |
224 | LTT_EVENT_PAGE_FAULT_NOSEM_EXIT.stateTransition = true; |
225 | ||
0821f854 | 226 | // IRQ_ENTRY also receives fields kernel_mode, ip and handler (??) |
5d10d135 ASL |
227 | LTT_EVENT_IRQ_ENTRY.setParent(Channels.LTT_CHANNEL_KERNEL); |
228 | LTT_EVENT_IRQ_ENTRY.getChildren().add(Fields.LTT_FIELD_IRQ_ID); | |
229 | LTT_EVENT_IRQ_ENTRY.stateTransition = true; | |
230 | ||
0821f854 | 231 | // IRQ_EXIT |
5d10d135 ASL |
232 | LTT_EVENT_IRQ_EXIT.setParent(Channels.LTT_CHANNEL_KERNEL); |
233 | LTT_EVENT_IRQ_EXIT.stateTransition = true; | |
234 | ||
0821f854 | 235 | // SOFT_IRQ_RAISE |
5d10d135 | 236 | LTT_EVENT_SOFT_IRQ_RAISE.setParent(Channels.LTT_CHANNEL_KERNEL); |
0821f854 | 237 | LTT_EVENT_SOFT_IRQ_RAISE.getChildren().add(Fields.LTT_FIELD_SOFT_IRQ_ID); |
5d10d135 ASL |
238 | LTT_EVENT_SOFT_IRQ_RAISE.stateTransition = true; |
239 | ||
0821f854 | 240 | // SOFT_IRQ_ENTRY |
5d10d135 | 241 | LTT_EVENT_SOFT_IRQ_ENTRY.setParent(Channels.LTT_CHANNEL_KERNEL); |
0821f854 | 242 | LTT_EVENT_SOFT_IRQ_ENTRY.getChildren().add(Fields.LTT_FIELD_SOFT_IRQ_ID); |
5d10d135 ASL |
243 | LTT_EVENT_SOFT_IRQ_ENTRY.stateTransition = true; |
244 | ||
0821f854 | 245 | // SOFT_IRQ_EXIT |
5d10d135 ASL |
246 | LTT_EVENT_SOFT_IRQ_EXIT.setParent(Channels.LTT_CHANNEL_KERNEL); |
247 | LTT_EVENT_SOFT_IRQ_EXIT.stateTransition = true; | |
248 | ||
0821f854 | 249 | // SCHED_SCHEDULE |
5d10d135 | 250 | LTT_EVENT_SCHED_SCHEDULE.setParent(Channels.LTT_CHANNEL_KERNEL); |
0821f854 FC |
251 | LTT_EVENT_SCHED_SCHEDULE.getChildren().add(Fields.LTT_FIELD_PREV_PID); |
252 | LTT_EVENT_SCHED_SCHEDULE.getChildren().add(Fields.LTT_FIELD_NEXT_PID); | |
253 | LTT_EVENT_SCHED_SCHEDULE.getChildren().add(Fields.LTT_FIELD_PREV_STATE); | |
5d10d135 ASL |
254 | LTT_EVENT_SCHED_SCHEDULE.stateTransition = true; |
255 | ||
0821f854 | 256 | // PROCESS_FORK |
5d10d135 | 257 | LTT_EVENT_PROCESS_FORK.setParent(Channels.LTT_CHANNEL_KERNEL); |
0821f854 FC |
258 | LTT_EVENT_PROCESS_FORK.getChildren().add(Fields.LTT_FIELD_PARENT_PID); |
259 | LTT_EVENT_PROCESS_FORK.getChildren().add(Fields.LTT_FIELD_CHILD_PID); | |
260 | LTT_EVENT_PROCESS_FORK.getChildren().add(Fields.LTT_FIELD_CHILD_TGID); | |
5d10d135 ASL |
261 | LTT_EVENT_PROCESS_FORK.stateTransition = true; |
262 | ||
0821f854 | 263 | // KTHREAD_CREATE |
5d10d135 ASL |
264 | LTT_EVENT_KTHREAD_CREATE.setParent(Channels.LTT_CHANNEL_KERNEL); |
265 | LTT_EVENT_KTHREAD_CREATE.getChildren().add(Fields.LTT_FIELD_PID); | |
266 | LTT_EVENT_KTHREAD_CREATE.stateTransition = true; | |
267 | ||
0821f854 | 268 | // PROCESS_EXIT |
5d10d135 ASL |
269 | LTT_EVENT_PROCESS_EXIT.setParent(Channels.LTT_CHANNEL_KERNEL); |
270 | LTT_EVENT_PROCESS_EXIT.getChildren().add(Fields.LTT_FIELD_PID); | |
271 | LTT_EVENT_PROCESS_EXIT.stateTransition = true; | |
272 | ||
0821f854 | 273 | // PROCESS_FREE |
5d10d135 ASL |
274 | LTT_EVENT_PROCESS_FREE.setParent(Channels.LTT_CHANNEL_KERNEL); |
275 | LTT_EVENT_PROCESS_FREE.getChildren().add(Fields.LTT_FIELD_PID); | |
276 | LTT_EVENT_PROCESS_FREE.stateTransition = true; | |
277 | ||
0821f854 | 278 | // EVENT_EXEC |
5d10d135 ASL |
279 | LTT_EVENT_EXEC.setParent(Channels.LTT_CHANNEL_FS); |
280 | LTT_EVENT_EXEC.getChildren().add(Fields.LTT_FIELD_FILENAME); | |
281 | LTT_EVENT_EXEC.stateTransition = true; | |
282 | ||
0821f854 | 283 | // EVENT_PROCESS_STATE |
5d10d135 ASL |
284 | LTT_EVENT_PROCESS_STATE.setParent(Channels.LTT_CHANNEL_TASK_STATE); |
285 | LTT_EVENT_PROCESS_STATE.getChildren().add(Fields.LTT_FIELD_PID); | |
0821f854 | 286 | LTT_EVENT_PROCESS_STATE.getChildren().add(Fields.LTT_FIELD_PARENT_PID); |
5d10d135 ASL |
287 | LTT_EVENT_PROCESS_STATE.getChildren().add(Fields.LTT_FIELD_NAME); |
288 | LTT_EVENT_PROCESS_STATE.getChildren().add(Fields.LTT_FIELD_TYPE); | |
289 | LTT_EVENT_PROCESS_STATE.getChildren().add(Fields.LTT_FIELD_MODE); | |
290 | LTT_EVENT_PROCESS_STATE.getChildren().add(Fields.LTT_FIELD_SUBMODE); | |
291 | LTT_EVENT_PROCESS_STATE.getChildren().add(Fields.LTT_FIELD_STATUS); | |
292 | LTT_EVENT_PROCESS_STATE.getChildren().add(Fields.LTT_FIELD_TGID); | |
293 | LTT_EVENT_PROCESS_STATE.stateTransition = true; | |
294 | ||
0821f854 FC |
295 | // STATEDUMP_END |
296 | LTT_EVENT_STATEDUMP_END.setParent(Channels.LTT_CHANNEL_GLOBAL_STATE); | |
5d10d135 ASL |
297 | LTT_EVENT_STATEDUMP_END.stateTransition = true; |
298 | ||
0821f854 FC |
299 | // FUNCTION_ENTRY |
300 | LTT_EVENT_FUNCTION_ENTRY.setParent(Channels.LTT_CHANNEL_USERSPACE); | |
301 | LTT_EVENT_FUNCTION_ENTRY.getChildren().add(Fields.LTT_FIELD_THIS_FN); | |
302 | LTT_EVENT_FUNCTION_ENTRY.getChildren().add(Fields.LTT_FIELD_CALL_SITE); | |
303 | LTT_EVENT_FUNCTION_ENTRY.stateTransition = true; | |
5d10d135 | 304 | |
0821f854 FC |
305 | // FUNCTION_EXIT |
306 | LTT_EVENT_FUNCTION_EXIT.setParent(Channels.LTT_CHANNEL_USERSPACE); | |
307 | LTT_EVENT_FUNCTION_EXIT.getChildren().add(Fields.LTT_FIELD_THIS_FN); | |
308 | LTT_EVENT_FUNCTION_EXIT.getChildren().add(Fields.LTT_FIELD_CALL_SITE); | |
309 | LTT_EVENT_FUNCTION_EXIT.stateTransition = true; | |
310 | ||
311 | // THREAD_BRAND | |
312 | LTT_EVENT_THREAD_BRAND.setParent(Channels.LTT_CHANNEL_USERSPACE); | |
313 | LTT_EVENT_THREAD_BRAND.getChildren().add(Fields.LTT_FIELD_NAME); | |
314 | LTT_EVENT_THREAD_BRAND.stateTransition = true; | |
315 | ||
316 | // REQUEST_ISSUE | |
5d10d135 ASL |
317 | LTT_EVENT_REQUEST_ISSUE.setParent(Channels.LTT_CHANNEL_BLOCK); |
318 | LTT_EVENT_REQUEST_ISSUE.getChildren().add(Fields.LTT_FIELD_MAJOR); | |
319 | LTT_EVENT_REQUEST_ISSUE.getChildren().add(Fields.LTT_FIELD_MINOR); | |
320 | LTT_EVENT_REQUEST_ISSUE.getChildren().add(Fields.LTT_FIELD_OPERATION); | |
5d10d135 ASL |
321 | LTT_EVENT_REQUEST_ISSUE.stateTransition = true; |
322 | ||
0821f854 | 323 | // REQUEST_COMPLETE |
5d10d135 | 324 | LTT_EVENT_REQUEST_COMPLETE.setParent(Channels.LTT_CHANNEL_BLOCK); |
0821f854 FC |
325 | LTT_EVENT_REQUEST_COMPLETE.getChildren().add(Fields.LTT_FIELD_MAJOR); |
326 | LTT_EVENT_REQUEST_COMPLETE.getChildren().add(Fields.LTT_FIELD_MINOR); | |
327 | LTT_EVENT_REQUEST_COMPLETE.getChildren().add(Fields.LTT_FIELD_OPERATION); | |
5d10d135 ASL |
328 | LTT_EVENT_REQUEST_COMPLETE.stateTransition = true; |
329 | ||
0821f854 FC |
330 | // LIST_INTERRUPT |
331 | LTT_EVENT_LIST_INTERRUPT.setParent(Channels.LTT_CHANNEL_IRQ_STATE); | |
332 | LTT_EVENT_LIST_INTERRUPT.getChildren().add(Fields.LTT_FIELD_ACTION); | |
333 | LTT_EVENT_LIST_INTERRUPT.getChildren().add(Fields.LTT_FIELD_IRQ_ID); | |
334 | LTT_EVENT_LIST_INTERRUPT.stateTransition = true; | |
5d10d135 | 335 | |
0821f854 FC |
336 | // SYS_CALL_TABLE |
337 | LTT_EVENT_SYS_CALL_TABLE.setParent(Channels.LTT_CHANNEL_SYSCALL_STATE); | |
5d10d135 | 338 | LTT_EVENT_SYS_CALL_TABLE.getChildren().add(Fields.LTT_FIELD_ID); |
0821f854 | 339 | LTT_EVENT_SYS_CALL_TABLE.getChildren().add(Fields.LTT_FIELD_ADDRESS); |
5d10d135 ASL |
340 | LTT_EVENT_SYS_CALL_TABLE.getChildren().add(Fields.LTT_FIELD_SYMBOL); |
341 | LTT_EVENT_SYS_CALL_TABLE.stateTransition = true; | |
342 | ||
0821f854 | 343 | // SOFTIRQ_VEC |
5d10d135 ASL |
344 | LTT_EVENT_SOFTIRQ_VEC.setParent(Channels.LTT_CHANNEL_SOFTIRQ_STATE); |
345 | LTT_EVENT_SOFTIRQ_VEC.getChildren().add(Fields.LTT_FIELD_ID); | |
346 | LTT_EVENT_SOFTIRQ_VEC.getChildren().add(Fields.LTT_FIELD_ADDRESS); | |
347 | LTT_EVENT_SOFTIRQ_VEC.getChildren().add(Fields.LTT_FIELD_SYMBOL); | |
348 | LTT_EVENT_SOFTIRQ_VEC.stateTransition = true; | |
0821f854 FC |
349 | |
350 | // KPROBE_TABLE | |
351 | LTT_EVENT_KPROBE_TABLE.setParent(Channels.LTT_CHANNEL_KPROBE_STATE); | |
352 | LTT_EVENT_KPROBE_TABLE.getChildren().add(Fields.LTT_FIELD_IP); | |
353 | LTT_EVENT_KPROBE_TABLE.getChildren().add(Fields.LTT_FIELD_SYMBOL); | |
354 | LTT_EVENT_KPROBE_TABLE.stateTransition = true; | |
355 | ||
356 | // KPROBE | |
357 | LTT_EVENT_KPROBE.setParent(Channels.LTT_CHANNEL_KERNEL); | |
358 | LTT_EVENT_KPROBE.getChildren().add(Fields.LTT_FIELD_IP); | |
359 | // LTT_EVENT_KPROBE.getChildren().add(Fields.LTT_FIELD_SYMBOL); | |
360 | LTT_EVENT_KPROBE.stateTransition = true; | |
5d10d135 ASL |
361 | } |
362 | ||
0821f854 | 363 | } |
5d10d135 ASL |
364 | |
365 | public enum Fields { | |
366 | LTT_FIELD_SYSCALL_ID("syscall_id"), /* */ | |
367 | LTT_FIELD_TRAP_ID("trap_id"), /* */ | |
368 | LTT_FIELD_IRQ_ID("irq_id"), /* */ | |
369 | LTT_FIELD_SOFT_IRQ_ID("softirq_id"), /* */ | |
370 | LTT_FIELD_PREV_PID("prev_pid"), /* */ | |
371 | LTT_FIELD_NEXT_PID("next_pid"), /* */ | |
372 | LTT_FIELD_PREV_STATE("prev_state"), /* */ | |
373 | LTT_FIELD_PARENT_PID("parent_pid"), /* */ | |
374 | LTT_FIELD_CHILD_PID("child_pid"), /* */ | |
375 | LTT_FIELD_PID("pid"), /* */ | |
376 | LTT_FIELD_TGID("tgid"), /* */ | |
377 | LTT_FIELD_CHILD_TGID("child_tgid"), /* */ | |
378 | LTT_FIELD_FILENAME("filename"), /* */ | |
379 | LTT_FIELD_NAME("name"), /* */ | |
380 | LTT_FIELD_TYPE("type"), /* */ | |
381 | LTT_FIELD_MODE("mode"), /* */ | |
382 | LTT_FIELD_SUBMODE("submode"), /* */ | |
383 | LTT_FIELD_STATUS("status"), /* */ | |
384 | LTT_FIELD_THIS_FN("this_fn"), /* */ | |
385 | LTT_FIELD_CALL_SITE("call_site"), /* */ | |
386 | LTT_FIELD_MAJOR("major"), /* */ | |
387 | LTT_FIELD_MINOR("minor"), /* */ | |
388 | LTT_FIELD_OPERATION("direction"), /* */ | |
389 | LTT_FIELD_ACTION("action"), /* */ | |
390 | LTT_FIELD_ID("id"), /* */ | |
391 | LTT_FIELD_ADDRESS("address"), /* */ | |
392 | LTT_FIELD_SYMBOL("symbol"), /* */ | |
393 | LTT_FIELD_IP("ip"); /* */ | |
394 | ||
395 | private final String inName; | |
396 | ||
397 | private Fields(String name) { | |
398 | this.inName = name; | |
399 | } | |
400 | ||
401 | public String getInName() { | |
402 | return this.inName; | |
403 | } | |
0821f854 FC |
404 | |
405 | } | |
5d10d135 ASL |
406 | |
407 | public enum CpuMode { | |
408 | LTTV_CPU_UNKNOWN("unknown"), /* */ | |
409 | LTTV_CPU_IDLE("idle"), /* */ | |
410 | LTTV_CPU_BUSY("busy"), /* */ | |
411 | LTTV_CPU_IRQ("irq"), /* */ | |
412 | LTTV_CPU_SOFT_IRQ("softirq"), /* */ | |
413 | LTTV_CPU_TRAP("trap"); /* */ | |
414 | ||
0821f854 | 415 | private final String inName; |
5d10d135 ASL |
416 | |
417 | private CpuMode(String name) { | |
418 | this.inName = name; | |
419 | } | |
420 | ||
421 | public String getInName() { | |
422 | return this.inName; | |
423 | } | |
424 | ||
425 | } | |
426 | ||
427 | public enum IRQMode { | |
428 | LTTV_IRQ_UNKNOWN("unknown"), /* */ | |
429 | LTTV_IRQ_IDLE("idle"), /* */ | |
430 | LTTV_IRQ_BUSY("busy"); /* */ | |
431 | ||
0821f854 | 432 | private final String inName; |
5d10d135 ASL |
433 | |
434 | private IRQMode(String name) { | |
435 | this.inName = name; | |
436 | } | |
437 | ||
438 | public String getInName() { | |
439 | return this.inName; | |
440 | } | |
441 | ||
442 | } | |
443 | ||
444 | public enum SoftIRQMode { | |
445 | LTTV_SOFT_IRQ_UNKNOWN("unknown"), /* */ | |
446 | LTTV_SOFT_IRQ_IDLE("idle"), /* */ | |
447 | LTTV_SOFT_IRQ_PENDING("pending"), /* */ | |
448 | LTTV_SOFT_IRQ_BUSY("busy"); /* */ | |
449 | ||
0821f854 | 450 | private final String inName; |
5d10d135 ASL |
451 | |
452 | private SoftIRQMode(String name) { | |
453 | this.inName = name; | |
454 | } | |
455 | ||
456 | public String getInName() { | |
457 | return this.inName; | |
458 | } | |
459 | ||
460 | } | |
461 | ||
462 | public enum BdevMode { | |
463 | LTTV_BDEV_UNKNOWN("unknown"), /* */ | |
464 | LTTV_BDEV_IDLE("idle"), /* */ | |
465 | LTTV_BDEV_BUSY_READING("busy_reading"), /* */ | |
466 | LTTV_BDEV_BUSY_WRITING("busy_writing"); /* */ | |
467 | ||
0821f854 | 468 | private final String inName; |
5d10d135 ASL |
469 | |
470 | private BdevMode(String name) { | |
471 | this.inName = name; | |
472 | } | |
473 | ||
474 | public String getInName() { | |
475 | return this.inName; | |
476 | } | |
477 | ||
478 | } | |
479 | ||
480 | public enum TrapMode { | |
481 | LTTV_TRAP_UNKNOWN("unknown"), /* */ | |
482 | LTTV_TRAP_IDLE("idle"), /* */ | |
483 | LTTV_TRAP_BUSY("busy"); /* */ | |
484 | ||
0821f854 | 485 | private final String inName; |
5d10d135 ASL |
486 | |
487 | private TrapMode(String name) { | |
488 | this.inName = name; | |
489 | } | |
490 | ||
491 | public String getInName() { | |
492 | return this.inName; | |
493 | } | |
494 | ||
495 | } | |
0821f854 | 496 | |
5d10d135 ASL |
497 | public enum ProcessType { |
498 | LTTV_STATE_USER_THREAD("USER_THREAD"), /* */ | |
499 | LTTV_STATE_KERNEL_THREAD("KERNEL_THREAD"); /* */ | |
500 | ||
0821f854 | 501 | private final String inName; |
5d10d135 ASL |
502 | |
503 | private ProcessType(String name) { | |
504 | this.inName = name; | |
505 | } | |
506 | ||
507 | public String getInName() { | |
508 | return this.inName; | |
509 | } | |
510 | ||
511 | } | |
512 | ||
513 | public enum ProcessStatus { | |
0821f854 FC |
514 | LTTV_STATE_UNNAMED("UNNAMED"), /* */ |
515 | LTTV_STATE_WAIT_FORK("WAIT_FORK"), /* */ | |
5d10d135 ASL |
516 | LTTV_STATE_WAIT_CPU("WAIT_CPU"), /* */ |
517 | LTTV_STATE_EXIT("EXIT"), /* */ | |
518 | LTTV_STATE_ZOMBIE("ZOMBIE"), /* */ | |
519 | LTTV_STATE_WAIT("WAIT"), /* */ | |
520 | LTTV_STATE_RUN("RUN"), /* */ | |
521 | LTTV_STATE_DEAD("DEAD"); /* */ | |
522 | ||
0821f854 | 523 | private final String inName; |
5d10d135 ASL |
524 | |
525 | private ProcessStatus(String name) { | |
526 | this.inName = name; | |
527 | } | |
528 | ||
529 | public String getInName() { | |
530 | return this.inName; | |
531 | } | |
532 | ||
533 | } | |
534 | ||
535 | public enum ExecutionSubMode { | |
536 | LTTV_STATE_SUBMODE_UNKNOWN("UNKNOWN"), /* */ | |
537 | LTTV_STATE_SUBMODE_NONE("NONE"); /* */ | |
538 | ||
0821f854 | 539 | private final String inName; |
5d10d135 ASL |
540 | |
541 | private ExecutionSubMode(String name) { | |
542 | this.inName = name; | |
543 | } | |
544 | ||
545 | public String getInName() { | |
546 | return this.inName; | |
547 | } | |
548 | ||
549 | } | |
550 | ||
551 | public enum ExecutionMode { | |
552 | LTTV_STATE_MODE_UNKNOWN("MODE_UNKNOWN"), /* */ | |
553 | LTTV_STATE_USER_MODE("USER_MODE"), /* */ | |
554 | LTTV_STATE_SYSCALL("SYSCALL"), /* */ | |
555 | LTTV_STATE_TRAP("TRAP"), /* */ | |
556 | LTTV_STATE_IRQ("IRQ"), /* */ | |
557 | LTTV_STATE_SOFT_IRQ("SOFTIRQ"); /* */ | |
558 | ||
0821f854 | 559 | private final String inName; |
5d10d135 ASL |
560 | |
561 | private ExecutionMode(String name) { | |
562 | this.inName = name; | |
563 | } | |
564 | ||
565 | public String getInName() { | |
566 | return this.inName; | |
567 | } | |
568 | ||
569 | } | |
570 | ||
571 | public enum GenStates { | |
572 | LTTV_STATE_TRACEFILES("tracefiles"), /* */ | |
573 | LTTV_STATE_PROCESSES("processes"), /* */ | |
574 | LTTV_STATE_PROCESS("process"), /* */ | |
575 | LTTV_STATE_RUNNING_PROCESS("running_process"), /* */ | |
576 | LTTV_STATE_EVENT("event"), /* */ | |
577 | LTTV_STATE_SAVED_STATES("saved states"), /* */ | |
578 | LTTV_STATE_SAVED_STATES_TIME("saved states time"), /* */ | |
579 | LTTV_STATE_TIME("time"), /* */ | |
580 | LTTV_STATE_HOOKS("saved state hooks"), /* */ | |
581 | LTTV_STATE_NAME_TABLES("name tables"), /* */ | |
582 | LTTV_STATE_TRACE_STATE_USE_COUNT("trace_state_use_count"), /* */ | |
583 | LTTV_STATE_RESOURCE_CPUS("cpu count"), /* */ | |
584 | LTTV_STATE_RESOURCE_IRQS("irq resource states"), /* */ | |
585 | LTTV_STATE_RESOURCE_SOFT_IRQS("soft irq resource states"), /* */ | |
586 | LTTV_STATE_RESOURCE_TRAPS("trap resource states"), /* */ | |
587 | LTTV_STATE_RESOURCE_BLKDEVS("blkdevs resource states"); /* */ | |
588 | ||
0821f854 | 589 | private final String inName; |
5d10d135 ASL |
590 | |
591 | private GenStates(String name) { | |
592 | this.inName = name; | |
593 | } | |
594 | ||
595 | public String getInName() { | |
596 | return this.inName; | |
597 | } | |
598 | ||
599 | } | |
600 | ||
601 | // ======================================================================== | |
602 | // Methods | |
603 | // ======================================================================= | |
0821f854 | 604 | |
5d10d135 | 605 | /** |
0821f854 | 606 | * Return the map from event name strings to Events instances |
5d10d135 ASL |
607 | * |
608 | * @return the eventstrmap | |
609 | */ | |
610 | public HashMap<String, Events> getEventStrmap() { | |
611 | return eventStrMap; | |
612 | } | |
613 | ||
614 | /** | |
0821f854 FC |
615 | * Return the map from state transition event name strings to Events instances |
616 | * State transition events are the subset of events that have the attribute stateTransition == True. | |
5d10d135 ASL |
617 | * |
618 | * @return the stateTransEventMap | |
619 | */ | |
620 | public HashMap<String, Events> getStateTransEventMap() { | |
621 | return stateTransEventMap; | |
622 | } | |
623 | ||
624 | /** | |
0821f854 | 625 | * @return the mapping from int (0..255) to system call names |
5d10d135 ASL |
626 | */ |
627 | public String[] getSyscallNames() { | |
212550ba | 628 | return Arrays.copyOf(syscall_names, syscall_names.length); |
5d10d135 ASL |
629 | } |
630 | ||
631 | /** | |
0821f854 | 632 | * @return the mapping from int (0..255) to trap names |
5d10d135 ASL |
633 | */ |
634 | public String[] getTrapNames() { | |
212550ba | 635 | return Arrays.copyOf(trap_names, trap_names.length); |
5d10d135 ASL |
636 | } |
637 | ||
638 | /** | |
0821f854 | 639 | * @return the mapping from int (0..255) to IRQ names |
5d10d135 ASL |
640 | */ |
641 | public String[] getIrqNames() { | |
212550ba | 642 | return Arrays.copyOf(irq_names, irq_names.length); |
5d10d135 ASL |
643 | } |
644 | ||
645 | /** | |
0821f854 | 646 | * @return the mapping from int (0..31) to soft IRQ names |
5d10d135 ASL |
647 | */ |
648 | public String[] getSoftIrqNames() { | |
212550ba | 649 | return Arrays.copyOf(soft_irq_names, soft_irq_names.length); |
5d10d135 ASL |
650 | } |
651 | ||
652 | } |