• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2006 The Android Open Source Project
3  */
4 
5 #ifndef _LIBTHREAD_DB__THREAD_DB_H
6 #define _LIBTHREAD_DB__THREAD_DB_H
7 
8 #include <pthread.h>
9 #include <signal.h>
10 #include <stdint.h>
11 #include <sys/types.h>
12 
13 typedef void *psaddr_t;
14 #define HAVE_PSADDR_T 1
15 
16 typedef pid_t lwpid_t;
17 #define HAVE_LWPID_T 1
18 
19 #define TD_THR_ANY_USER_FLAGS       0xffffffff
20 #define TD_THR_LOWEST_PRIORITY      -20
21 #define TD_SIGNO_MASK               NULL
22 
23 /* td_err_e values */
24 enum {
25     TD_OK,
26     TD_ERR,
27     TD_NOTHR,
28     TD_NOSV,
29     TD_NOLWP,
30     TD_BADPH,
31     TD_BADTH,
32     TD_BADSH,
33     TD_BADTA,
34     TD_BADKEY,
35     TD_NOMSG,
36     TD_NOFPREGS,
37     TD_NOLIBTHREAD,
38     TD_NOEVENT,
39     TD_NOCAPAB,
40     TD_DBERR,
41     TD_NOAPLIC,
42     TD_NOTSD,
43     TD_MALLOC,
44     TD_PARTIALREG,
45     TD_NOXREGS,
46     TD_VERSION
47 };
48 
49 /*
50  * td_event_e values
51  * NOTE: There is a max of 32 events
52  */
53 enum {
54     TD_CREATE,
55     TD_DEATH
56 };
57 
58 /* td_thr_state_e values */
59 enum {
60     TD_THR_ANY_STATE,
61     TD_THR_UNKNOWN,
62     TD_THR_SLEEP,
63     TD_THR_ZOMBIE
64 };
65 
66 typedef int32_t td_err_e;
67 typedef uint32_t td_event_e;
68 typedef uint32_t td_notify_e;
69 typedef uint32_t td_thr_state_e;
70 typedef pthread_t thread_t;
71 
72 typedef struct
73 {
74     pid_t pid;
75     struct ps_prochandle *ph;
76 } td_thragent_t;
77 
78 typedef struct
79 {
80     pid_t pid;
81     pid_t tid;
82 } td_thrhandle_t;
83 
84 typedef struct
85 {
86     td_event_e event;
87     td_thrhandle_t const * th_p;
88     union {
89         void * data;
90     } msg;
91 } td_event_msg_t;
92 
93 typedef struct
94 {
95     uint32_t events;
96 } td_thr_events_t;
97 
98 typedef struct
99 {
100     union {
101         void * bptaddr;
102     } u;
103 } td_notify_t;
104 
105 typedef struct
106 {
107     td_thr_state_e ti_state;
108     thread_t ti_tid; // pthread's id for the thread
109     int32_t ti_lid; // the kernel's id for the thread
110 } td_thrinfo_t;
111 
112 
113 #define td_event_emptyset(set) \
114     (set)->events = 0
115 
116 #define td_event_fillset(set) \
117     (set)->events = 0xffffffff
118 
119 #define td_event_addset(set, n) \
120     (set)->events |= (1 << n)
121 
122 
123 typedef int td_thr_iter_f(td_thrhandle_t const *, void *);
124 
125 
126 struct ps_prochandle;
127 
128 #ifdef __cplusplus
129 extern "C"{
130 #endif
131 
132 extern td_err_e td_ta_new(struct ps_prochandle * proc_handle, td_thragent_t ** thread_agent);
133 
134 extern td_err_e td_ta_delete(td_thragent_t * ta);
135 
136 extern td_err_e td_ta_set_event(td_thragent_t const * agent, td_thr_events_t * event);
137 
138 extern td_err_e td_ta_event_addr(td_thragent_t const * agent, td_event_e event, td_notify_t * notify);
139 
140 extern td_err_e td_ta_clear_event(const td_thragent_t * ta_arg,
141 				  td_thr_events_t * event);
142 
143 extern td_err_e td_ta_event_getmsg(td_thragent_t const * agent, td_event_msg_t * event);
144 
145 extern td_err_e td_ta_map_lwp2thr(td_thragent_t const * agent, lwpid_t lwpid,
146 				  td_thrhandle_t *th);
147 
148 extern td_err_e td_thr_get_info(td_thrhandle_t const * handle,
149 				td_thrinfo_t * info);
150 
151 extern td_err_e td_thr_event_enable(td_thrhandle_t const * handle,
152 				    td_event_e event);
153 
154 extern td_err_e td_ta_thr_iter(td_thragent_t const * agent, td_thr_iter_f * func, void * cookie,
155                                td_thr_state_e state, int32_t prio, sigset_t * sigmask, uint32_t user_flags);
156 
157 extern char const ** td_symbol_list(void);
158 
159 extern td_err_e td_thr_event_enable(td_thrhandle_t const * handle, td_event_e event);
160 
161 extern td_err_e td_thr_get_info(td_thrhandle_t const * handle, td_thrinfo_t * info);
162 
163 extern td_err_e td_thr_tls_get_addr(const td_thrhandle_t * th,
164 				    psaddr_t map_address, size_t offset,
165 				    psaddr_t * address);
166 
167 #ifdef __cplusplus
168 }
169 #endif
170 
171 #endif
172