1951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 2951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright 2006 The Android Open Source Project 3951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 4951a39d68df598db08dfced8b4707755864a0492Ying Wang 5951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _LIBTHREAD_DB__THREAD_DB_H 6951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _LIBTHREAD_DB__THREAD_DB_H 7951a39d68df598db08dfced8b4707755864a0492Ying Wang 8951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <pthread.h> 9951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <signal.h> 10951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <stdint.h> 11951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <sys/types.h> 12951a39d68df598db08dfced8b4707755864a0492Ying Wang 13951a39d68df598db08dfced8b4707755864a0492Ying Wang 14951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TD_THR_ANY_USER_FLAGS 0xffffffff 15951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TD_THR_LOWEST_PRIORITY -20 16951a39d68df598db08dfced8b4707755864a0492Ying Wang#define TD_SIGNO_MASK NULL 17951a39d68df598db08dfced8b4707755864a0492Ying Wang 18951a39d68df598db08dfced8b4707755864a0492Ying Wang/* td_err_e values */ 19951a39d68df598db08dfced8b4707755864a0492Ying Wangenum { 20951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_OK, 21951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_ERR, 22951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOTHR, 23951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOSV, 24951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOLWP, 25951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_BADPH, 26951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_BADTH, 27951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_BADSH, 28951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_BADTA, 29951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_BADKEY, 30951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOMSG, 31951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOFPREGS, 32951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOLIBTHREAD, 33951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOEVENT, 34951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOCAPAB, 35951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_DBERR, 36951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOAPLIC, 37951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOTSD, 38951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_MALLOC, 39951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_PARTIALREG, 40951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_NOXREGS, 41951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_VERSION 42951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 43951a39d68df598db08dfced8b4707755864a0492Ying Wang 44951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 45951a39d68df598db08dfced8b4707755864a0492Ying Wang * td_event_e values 46951a39d68df598db08dfced8b4707755864a0492Ying Wang * NOTE: There is a max of 32 events 47951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 48951a39d68df598db08dfced8b4707755864a0492Ying Wangenum { 49951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_CREATE, 50951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_DEATH 51951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 52951a39d68df598db08dfced8b4707755864a0492Ying Wang 53951a39d68df598db08dfced8b4707755864a0492Ying Wang/* td_thr_state_e values */ 54951a39d68df598db08dfced8b4707755864a0492Ying Wangenum { 55951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_THR_ANY_STATE, 56951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_THR_UNKNOWN, 57951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_THR_SLEEP, 58951a39d68df598db08dfced8b4707755864a0492Ying Wang TD_THR_ZOMBIE 59951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 60951a39d68df598db08dfced8b4707755864a0492Ying Wang 61951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef int32_t td_err_e; 62951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef uint32_t td_event_e; 63951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef uint32_t td_notify_e; 64951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef uint32_t td_thr_state_e; 65951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef pthread_t thread_t; 66951a39d68df598db08dfced8b4707755864a0492Ying Wang 67951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct 68951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 69951a39d68df598db08dfced8b4707755864a0492Ying Wang pid_t pid; 70951a39d68df598db08dfced8b4707755864a0492Ying Wang} td_thragent_t; 71951a39d68df598db08dfced8b4707755864a0492Ying Wang 72951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct 73951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 74951a39d68df598db08dfced8b4707755864a0492Ying Wang pid_t pid; 75951a39d68df598db08dfced8b4707755864a0492Ying Wang pid_t tid; 76951a39d68df598db08dfced8b4707755864a0492Ying Wang} td_thrhandle_t; 77951a39d68df598db08dfced8b4707755864a0492Ying Wang 78951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct 79951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 80951a39d68df598db08dfced8b4707755864a0492Ying Wang td_event_e event; 81951a39d68df598db08dfced8b4707755864a0492Ying Wang td_thrhandle_t const * th_p; 82951a39d68df598db08dfced8b4707755864a0492Ying Wang union { 83951a39d68df598db08dfced8b4707755864a0492Ying Wang void * data; 84951a39d68df598db08dfced8b4707755864a0492Ying Wang } msg; 85951a39d68df598db08dfced8b4707755864a0492Ying Wang} td_event_msg_t; 86951a39d68df598db08dfced8b4707755864a0492Ying Wang 87951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct 88951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 89951a39d68df598db08dfced8b4707755864a0492Ying Wang uint32_t events; 90951a39d68df598db08dfced8b4707755864a0492Ying Wang} td_thr_events_t; 91951a39d68df598db08dfced8b4707755864a0492Ying Wang 92951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct 93951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 94951a39d68df598db08dfced8b4707755864a0492Ying Wang union { 95951a39d68df598db08dfced8b4707755864a0492Ying Wang void * bptaddr; 96951a39d68df598db08dfced8b4707755864a0492Ying Wang } u; 97951a39d68df598db08dfced8b4707755864a0492Ying Wang} td_notify_t; 98951a39d68df598db08dfced8b4707755864a0492Ying Wang 99951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct 100951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 101951a39d68df598db08dfced8b4707755864a0492Ying Wang td_thr_state_e ti_state; 102951a39d68df598db08dfced8b4707755864a0492Ying Wang thread_t ti_tid; // pthread's id for the thread 103951a39d68df598db08dfced8b4707755864a0492Ying Wang int32_t ti_lid; // the kernel's id for the thread 104951a39d68df598db08dfced8b4707755864a0492Ying Wang} td_thrinfo_t; 105951a39d68df598db08dfced8b4707755864a0492Ying Wang 106951a39d68df598db08dfced8b4707755864a0492Ying Wang 107951a39d68df598db08dfced8b4707755864a0492Ying Wang#define td_event_emptyset(set) \ 108951a39d68df598db08dfced8b4707755864a0492Ying Wang (set)->events = 0 109951a39d68df598db08dfced8b4707755864a0492Ying Wang 110951a39d68df598db08dfced8b4707755864a0492Ying Wang#define td_event_fillset(set) \ 111951a39d68df598db08dfced8b4707755864a0492Ying Wang (set)->events = 0xffffffff 112951a39d68df598db08dfced8b4707755864a0492Ying Wang 113951a39d68df598db08dfced8b4707755864a0492Ying Wang#define td_event_addset(set, n) \ 114951a39d68df598db08dfced8b4707755864a0492Ying Wang (set)->events |= (1 << n) 115951a39d68df598db08dfced8b4707755864a0492Ying Wang 116951a39d68df598db08dfced8b4707755864a0492Ying Wang 117951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef int td_thr_iter_f(td_thrhandle_t const *, void *); 118951a39d68df598db08dfced8b4707755864a0492Ying Wang 119951a39d68df598db08dfced8b4707755864a0492Ying Wang 120951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct ps_prochandle; 121951a39d68df598db08dfced8b4707755864a0492Ying Wang 122951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __cplusplus 123951a39d68df598db08dfced8b4707755864a0492Ying Wangextern "C"{ 124951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 125951a39d68df598db08dfced8b4707755864a0492Ying Wang 126951a39d68df598db08dfced8b4707755864a0492Ying Wangextern td_err_e td_ta_new(struct ps_prochandle const * proc_handle, td_thragent_t ** thread_agent); 127951a39d68df598db08dfced8b4707755864a0492Ying Wang 128951a39d68df598db08dfced8b4707755864a0492Ying Wangextern td_err_e td_ta_set_event(td_thragent_t const * agent, td_thr_events_t * event); 129951a39d68df598db08dfced8b4707755864a0492Ying Wang 130951a39d68df598db08dfced8b4707755864a0492Ying Wangextern td_err_e td_ta_event_addr(td_thragent_t const * agent, td_event_e event, td_notify_t * notify); 131951a39d68df598db08dfced8b4707755864a0492Ying Wang 132951a39d68df598db08dfced8b4707755864a0492Ying Wangextern td_err_e td_ta_event_getmsg(td_thragent_t const * agent, td_event_msg_t * event); 133951a39d68df598db08dfced8b4707755864a0492Ying Wang 134951a39d68df598db08dfced8b4707755864a0492Ying Wangextern td_err_e td_ta_thr_iter(td_thragent_t const * agent, td_thr_iter_f * func, void * cookie, 135951a39d68df598db08dfced8b4707755864a0492Ying Wang td_thr_state_e state, int32_t prio, sigset_t * sigmask, uint32_t user_flags); 136951a39d68df598db08dfced8b4707755864a0492Ying Wang 137951a39d68df598db08dfced8b4707755864a0492Ying Wangextern char const ** td_symbol_list(void); 138951a39d68df598db08dfced8b4707755864a0492Ying Wang 139951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __cplusplus 140951a39d68df598db08dfced8b4707755864a0492Ying Wang} 141951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 142951a39d68df598db08dfced8b4707755864a0492Ying Wang 143951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 144