blob: 1ed8ffca8535399d499ced3ccca6a896eb499fb3 [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001/*
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>
Bruce Bearef6ccc152011-01-27 10:26:30 -080012#include <sys/procfs.h>
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080013
14#define TD_THR_ANY_USER_FLAGS 0xffffffff
15#define TD_THR_LOWEST_PRIORITY -20
16#define TD_SIGNO_MASK NULL
17
18/* td_err_e values */
19enum {
20 TD_OK,
21 TD_ERR,
22 TD_NOTHR,
23 TD_NOSV,
24 TD_NOLWP,
25 TD_BADPH,
26 TD_BADTH,
27 TD_BADSH,
28 TD_BADTA,
29 TD_BADKEY,
30 TD_NOMSG,
31 TD_NOFPREGS,
32 TD_NOLIBTHREAD,
33 TD_NOEVENT,
34 TD_NOCAPAB,
35 TD_DBERR,
36 TD_NOAPLIC,
37 TD_NOTSD,
38 TD_MALLOC,
39 TD_PARTIALREG,
40 TD_NOXREGS,
41 TD_VERSION
42};
43
44/*
45 * td_event_e values
46 * NOTE: There is a max of 32 events
47 */
48enum {
49 TD_CREATE,
50 TD_DEATH
51};
52
53/* td_thr_state_e values */
54enum {
55 TD_THR_ANY_STATE,
56 TD_THR_UNKNOWN,
57 TD_THR_SLEEP,
58 TD_THR_ZOMBIE
59};
60
61typedef int32_t td_err_e;
62typedef uint32_t td_event_e;
63typedef uint32_t td_notify_e;
64typedef uint32_t td_thr_state_e;
65typedef pthread_t thread_t;
66
67typedef struct
68{
69 pid_t pid;
David 'Digit' Turner3d4edfc2010-03-19 16:01:28 -070070 struct ps_prochandle *ph;
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080071} td_thragent_t;
72
73typedef struct
74{
75 pid_t pid;
76 pid_t tid;
77} td_thrhandle_t;
78
79typedef struct
80{
81 td_event_e event;
82 td_thrhandle_t const * th_p;
83 union {
84 void * data;
85 } msg;
86} td_event_msg_t;
87
88typedef struct
89{
90 uint32_t events;
91} td_thr_events_t;
92
93typedef struct
94{
95 union {
96 void * bptaddr;
97 } u;
98} td_notify_t;
99
100typedef struct
101{
102 td_thr_state_e ti_state;
103 thread_t ti_tid; // pthread's id for the thread
104 int32_t ti_lid; // the kernel's id for the thread
105} td_thrinfo_t;
106
107
108#define td_event_emptyset(set) \
109 (set)->events = 0
110
111#define td_event_fillset(set) \
112 (set)->events = 0xffffffff
113
114#define td_event_addset(set, n) \
115 (set)->events |= (1 << n)
116
117
118typedef int td_thr_iter_f(td_thrhandle_t const *, void *);
119
120
121struct ps_prochandle;
122
123#ifdef __cplusplus
124extern "C"{
125#endif
126
David 'Digit' Turner3d4edfc2010-03-19 16:01:28 -0700127extern td_err_e td_ta_new(struct ps_prochandle * proc_handle, td_thragent_t ** thread_agent);
128
129extern td_err_e td_ta_delete(td_thragent_t * ta);
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800130
131extern td_err_e td_ta_set_event(td_thragent_t const * agent, td_thr_events_t * event);
132
133extern td_err_e td_ta_event_addr(td_thragent_t const * agent, td_event_e event, td_notify_t * notify);
134
David 'Digit' Turner3d4edfc2010-03-19 16:01:28 -0700135extern td_err_e td_ta_clear_event(const td_thragent_t * ta_arg,
136 td_thr_events_t * event);
137
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800138extern td_err_e td_ta_event_getmsg(td_thragent_t const * agent, td_event_msg_t * event);
139
David 'Digit' Turner3d4edfc2010-03-19 16:01:28 -0700140extern td_err_e td_ta_map_lwp2thr(td_thragent_t const * agent, lwpid_t lwpid,
141 td_thrhandle_t *th);
142
143extern td_err_e td_thr_get_info(td_thrhandle_t const * handle,
144 td_thrinfo_t * info);
145
146extern td_err_e td_thr_event_enable(td_thrhandle_t const * handle,
147 td_event_e event);
148
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800149extern td_err_e td_ta_thr_iter(td_thragent_t const * agent, td_thr_iter_f * func, void * cookie,
150 td_thr_state_e state, int32_t prio, sigset_t * sigmask, uint32_t user_flags);
151
Bruce Beare8e551a62011-03-28 09:47:35 -0700152extern td_err_e td_thr_event_enable(td_thrhandle_t const * handle, td_event_e event);
153
154extern td_err_e td_thr_get_info(td_thrhandle_t const * handle, td_thrinfo_t * info);
155
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800156extern char const ** td_symbol_list(void);
157
David 'Digit' Turner3d4edfc2010-03-19 16:01:28 -0700158extern td_err_e td_thr_tls_get_addr(const td_thrhandle_t * th,
159 psaddr_t map_address, size_t offset,
160 psaddr_t * address);
161
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800162#ifdef __cplusplus
163}
164#endif
165
166#endif