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 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 144