blob: 9c76d40d6c8ffbe3674c373192be8a491199c6e4 [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>
12
13
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;
70} td_thragent_t;
71
72typedef struct
73{
74 pid_t pid;
75 pid_t tid;
76} td_thrhandle_t;
77
78typedef struct
79{
80 td_event_e event;
81 td_thrhandle_t const * th_p;
82 union {
83 void * data;
84 } msg;
85} td_event_msg_t;
86
87typedef struct
88{
89 uint32_t events;
90} td_thr_events_t;
91
92typedef struct
93{
94 union {
95 void * bptaddr;
96 } u;
97} td_notify_t;
98
99typedef struct
100{
101 td_thr_state_e ti_state;
102 thread_t ti_tid; // pthread's id for the thread
103 int32_t ti_lid; // the kernel's id for the thread
104} td_thrinfo_t;
105
106
107#define td_event_emptyset(set) \
108 (set)->events = 0
109
110#define td_event_fillset(set) \
111 (set)->events = 0xffffffff
112
113#define td_event_addset(set, n) \
114 (set)->events |= (1 << n)
115
116
117typedef int td_thr_iter_f(td_thrhandle_t const *, void *);
118
119
120struct ps_prochandle;
121
122#ifdef __cplusplus
123extern "C"{
124#endif
125
126extern td_err_e td_ta_new(struct ps_prochandle const * proc_handle, td_thragent_t ** thread_agent);
127
128extern td_err_e td_ta_set_event(td_thragent_t const * agent, td_thr_events_t * event);
129
130extern td_err_e td_ta_event_addr(td_thragent_t const * agent, td_event_e event, td_notify_t * notify);
131
132extern td_err_e td_ta_event_getmsg(td_thragent_t const * agent, td_event_msg_t * event);
133
134extern td_err_e td_ta_thr_iter(td_thragent_t const * agent, td_thr_iter_f * func, void * cookie,
135 td_thr_state_e state, int32_t prio, sigset_t * sigmask, uint32_t user_flags);
136
137extern char const ** td_symbol_list(void);
138
139#ifdef __cplusplus
140}
141#endif
142
143#endif