Stackdb
Stackdb is a stackable, multi-target and -level source debugger and memory forensics library.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
target_event.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 The University of Utah
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of
7  * the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
17  */
18 
19 #ifndef __TARGET_EVENT_H__
20 #define __TARGET_EVENT_H__
21 
22 #include "common.h"
23 
28 typedef enum {
32 
33  /*
34  T_EVENT_THREAD_CREATED,
35  T_EVENT_THREAD_EXITED,
36  T_EVENT_THREAD_EXITING,
37 
38  T_EVENT_SPACE_NEW,
39  T_EVENT_SPACE_MOD,
40  T_EVENT_SPACE_DEL,
41 
42  T_EVENT_REGION_NEW,
43  T_EVENT_REGION_MOD,
44  T_EVENT_REGION_DEL,
45 
46  T_EVENT_RANGE_NEW,
47  T_EVENT_RANGE_MOD,
48  T_EVENT_RANGE_DEL,
49  */
50 
63 
76 
90 
91 #define T_EVENT_IS_OS(event) \
92  ((event)->type >= T_EVENT_OS_THREAD_CREATED \
93  && (event)->type <= T_EVENT_OS_RANGE_DEL)
94 #define T_EVENT_IS_OS_PROCESS(event) \
95  ((event)->type >= T_EVENT_OS_PROCESS_THREAD_CREATED \
96  && (event)->type <= T_EVENT_OS_PROCESS_RANGE_DEL)
97 #define T_EVENT_IS_PROCESS(event) \
98  ((event)->type >= T_EVENT_PROCESS_THREAD_CREATED \
99  && (event)->type <= T_EVENT_PROCESS_RANGE_DEL)
100 #define T_EVENT_IS_SPACE(event,ttype) \
101  ((event)->type >= T_EVENT_ ## ttype ## _SPACE_NEW \
102  && (event)->type <= T_EVENT_ ## ttype ## _SPACE_DEL)
103 #define T_EVENT_IS_REGION(event,ttype) \
104  ((event)->type >= T_EVENT_ ## ttype ## _REGION_NEW \
105  && (event)->type <= T_EVENT_ ## ttype ## _REGION_DEL)
106 #define T_EVENT_IS_RANGE(event,ttype) \
107  ((event)->type >= T_EVENT_ ## ttype ## _RANGE_NEW \
108  && (event)->type <= T_EVENT_ ## ttype ## _RANGE_DEL)
109 
110 static inline char *TARGET_EVENT_NAME(target_event_t type) {
111  switch (type) {
112  case T_EVENT_EXITED: return "EXITED";
113  case T_EVENT_EXITING: return "EXITING";
114  case T_EVENT_ERROR: return "ERROR";
115  /*
116  case T_EVENT_THREAD_CREATED: return "THREAD_CREATED";
117  case T_EVENT_THREAD_EXITED: return "THREAD_EXITED";
118  case T_EVENT_THREAD_EXITING: return "THREAD_EXITING";
119 
120  case T_EVENT_SPACE_NEW: return "SPACE_NEW";
121  case T_EVENT_SPACE_MOD: return "SPACE_MOD";
122  case T_EVENT_SPACE_DEL: return "SPACE_DEL";
123 
124  case T_EVENT_REGION_NEW: return "REGION_NEW";
125  case T_EVENT_REGION_MOD: return "REGION_MOD";
126  case T_EVENT_REGION_DEL: return "REGION_DEL";
127 
128  case T_EVENT_RANGE_NEW: return "RANGE_NEW";
129  case T_EVENT_RANGE_MOD: return "RANGE_MOD";
130  case T_EVENT_RANGE_DEL: return "RANGE_DEL";
131  */
132  case T_EVENT_OS_THREAD_CREATED: return "OS_THREAD_CREATED";
133  case T_EVENT_OS_THREAD_EXITED: return "OS_THREAD_EXITED";
134  case T_EVENT_OS_THREAD_EXITING: return "OS_THREAD_EXITING";
135  case T_EVENT_OS_SPACE_NEW: return "OS_SPACE_NEW";
136  case T_EVENT_OS_SPACE_MOD: return "OS_SPACE_MOD";
137  case T_EVENT_OS_SPACE_DEL: return "OS_SPACE_DEL";
138  case T_EVENT_OS_REGION_NEW: return "OS_REGION_NEW";
139  case T_EVENT_OS_REGION_MOD: return "OS_REGION_MOD";
140  case T_EVENT_OS_REGION_DEL: return "OS_REGION_DEL";
141  case T_EVENT_OS_RANGE_NEW: return "OS_RANGE_NEW";
142  case T_EVENT_OS_RANGE_MOD: return "OS_RANGE_MOD";
143  case T_EVENT_OS_RANGE_DEL: return "OS_RANGE_DEL";
144 
145  case T_EVENT_OS_PROCESS_THREAD_CREATED: return "OS_PROCESS_THREAD_CREATED";
146  case T_EVENT_OS_PROCESS_THREAD_EXITED: return "OS_PROCESS_THREAD_EXITED";
147  case T_EVENT_OS_PROCESS_THREAD_EXITING: return "OS_PROCESS_THREAD_EXITING";
148  case T_EVENT_OS_PROCESS_SPACE_NEW: return "OS_PROCESS_SPACE_NEW";
149  case T_EVENT_OS_PROCESS_SPACE_MOD: return "OS_PROCESS_SPACE_MOD";
150  case T_EVENT_OS_PROCESS_SPACE_DEL: return "OS_PROCESS_SPACE_DEL";
151  case T_EVENT_OS_PROCESS_REGION_NEW: return "OS_PROCESS_REGION_NEW";
152  case T_EVENT_OS_PROCESS_REGION_MOD: return "OS_PROCESS_REGION_MOD";
153  case T_EVENT_OS_PROCESS_REGION_DEL: return "OS_PROCESS_REGION_DEL";
154  case T_EVENT_OS_PROCESS_RANGE_NEW: return "OS_PROCESS_RANGE_NEW";
155  case T_EVENT_OS_PROCESS_RANGE_MOD: return "OS_PROCESS_RANGE_MOD";
156  case T_EVENT_OS_PROCESS_RANGE_DEL: return "OS_PROCESS_RANGE_DEL";
157 
158  case T_EVENT_PROCESS_THREAD_CREATED: return "PROCESS_THREAD_CREATED";
159  case T_EVENT_PROCESS_THREAD_EXITED: return "PROCESS_THREAD_EXITED";
160  case T_EVENT_PROCESS_THREAD_EXITING: return "PROCESS_THREAD_EXITING";
161  case T_EVENT_PROCESS_SPACE_NEW: return "PROCESS_SPACE_NEW";
162  case T_EVENT_PROCESS_SPACE_MOD: return "PROCESS_SPACE_MOD";
163  case T_EVENT_PROCESS_SPACE_DEL: return "PROCESS_SPACE_DEL";
164  case T_EVENT_PROCESS_REGION_NEW: return "PROCESS_REGION_NEW";
165  case T_EVENT_PROCESS_REGION_MOD: return "PROCESS_REGION_MOD";
166  case T_EVENT_PROCESS_REGION_DEL: return "PROCESS_REGION_DEL";
167  case T_EVENT_PROCESS_RANGE_NEW: return "PROCESS_RANGE_NEW";
168  case T_EVENT_PROCESS_RANGE_MOD: return "PROCESS_RANGE_MOD";
169  case T_EVENT_PROCESS_RANGE_DEL: return "PROCESS_RANGE_DEL";
170 
171  default: return NULL;
172  }
173 }
174 
175 struct target;
176 struct target_thread;
177 
189 struct target_event {
191  /*
192  * We copy the target id and thread id in case we have to NULL out
193  * target/thread after creating the event, because the objects got
194  * deleted.
195  */
196  int id;
198  struct target *target;
200  void *priv;
201  void *priv2;
202 };
203 
204 /*
205  * Creates an event.
206  */
208  struct target_thread *thread,
209  target_event_t event,void *priv);
210 
212  struct target_thread *thread,
213  target_event_t event,
214  void *priv,void *priv2);
215 /*
216  * Broadcasts an @event on @target (and target_queue_event iff @target
217  * == @event->target). If @target == @event->target, @target itself
218  * will not be notified. If @target->base, the base target will be
219  * notified. If @event->thread->tid is a member of one of
220  * @target->overlays, the corresponding overlay will be notified too.
221  */
222 void target_broadcast_event(struct target *target,struct target_event *event);
223 
224 #endif /* __TARGET_EVENT_H__ */
struct target_event * target_create_event_2(struct target *target, struct target_thread *thread, target_event_t event, void *priv, void *priv2)
Definition: target_event.c:47
target_event_t
Definition: target_event.h:28
int32_t tid_t
Definition: common.h:36
struct target_event * target_create_event(struct target *target, struct target_thread *thread, target_event_t event, void *priv)
Definition: target_event.c:26
struct target * target
Definition: target_event.h:198
void target_broadcast_event(struct target *target, struct target_event *event)
Definition: target_event.c:56
struct target_thread * thread
Definition: target_event.h:199
target_event_t type
Definition: target_event.h:190