15e53a4f9SPedro F. Giffuni /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 35e53a4f9SPedro F. Giffuni * 43c1e38eaSMarcel Moolenaar * Copyright (c) 2004 David Xu <davidxu@freebsd.org> 53c1e38eaSMarcel Moolenaar * All rights reserved. 63c1e38eaSMarcel Moolenaar * 73c1e38eaSMarcel Moolenaar * Redistribution and use in source and binary forms, with or without 83c1e38eaSMarcel Moolenaar * modification, are permitted provided that the following conditions 93c1e38eaSMarcel Moolenaar * are met: 103c1e38eaSMarcel Moolenaar * 1. Redistributions of source code must retain the above copyright 113c1e38eaSMarcel Moolenaar * notice, this list of conditions and the following disclaimer. 123c1e38eaSMarcel Moolenaar * 2. Redistributions in binary form must reproduce the above copyright 133c1e38eaSMarcel Moolenaar * notice, this list of conditions and the following disclaimer in the 143c1e38eaSMarcel Moolenaar * documentation and/or other materials provided with the distribution. 153c1e38eaSMarcel Moolenaar * 163c1e38eaSMarcel Moolenaar * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 173c1e38eaSMarcel Moolenaar * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 183c1e38eaSMarcel Moolenaar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 193c1e38eaSMarcel Moolenaar * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 203c1e38eaSMarcel Moolenaar * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 213c1e38eaSMarcel Moolenaar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 223c1e38eaSMarcel Moolenaar * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 233c1e38eaSMarcel Moolenaar * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 243c1e38eaSMarcel Moolenaar * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 253c1e38eaSMarcel Moolenaar * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 263c1e38eaSMarcel Moolenaar * SUCH DAMAGE. 273c1e38eaSMarcel Moolenaar */ 283c1e38eaSMarcel Moolenaar 293c1e38eaSMarcel Moolenaar #ifndef _THREAD_DB_INT_H_ 303c1e38eaSMarcel Moolenaar #define _THREAD_DB_INT_H_ 313c1e38eaSMarcel Moolenaar 323c1e38eaSMarcel Moolenaar #include <sys/types.h> 333c1e38eaSMarcel Moolenaar #include <sys/queue.h> 343c1e38eaSMarcel Moolenaar 35098d0537SKonstantin Belousov typedef struct { 36098d0537SKonstantin Belousov const td_thragent_t *ti_ta_p; 37098d0537SKonstantin Belousov thread_t ti_tid; 38098d0537SKonstantin Belousov psaddr_t ti_thread; 39098d0537SKonstantin Belousov td_thr_state_e ti_state; 40098d0537SKonstantin Belousov td_thr_type_e ti_type; 41098d0537SKonstantin Belousov td_thr_events_t ti_events; 42098d0537SKonstantin Belousov int ti_pri; 43098d0537SKonstantin Belousov lwpid_t ti_lid; 44098d0537SKonstantin Belousov char ti_db_suspended; 45098d0537SKonstantin Belousov char ti_traceme; 46098d0537SKonstantin Belousov sigset_t ti_sigmask; 47098d0537SKonstantin Belousov sigset_t ti_pending; 48098d0537SKonstantin Belousov psaddr_t ti_tls; 49098d0537SKonstantin Belousov psaddr_t ti_startfunc; 50098d0537SKonstantin Belousov psaddr_t ti_stkbase; 51098d0537SKonstantin Belousov size_t ti_stksize; 52098d0537SKonstantin Belousov } td_old_thrinfo_t; 53098d0537SKonstantin Belousov 543c1e38eaSMarcel Moolenaar #define TD_THRAGENT_FIELDS \ 553c1e38eaSMarcel Moolenaar struct ta_ops *ta_ops; \ 563c1e38eaSMarcel Moolenaar TAILQ_ENTRY(td_thragent) ta_next; \ 573c1e38eaSMarcel Moolenaar struct ps_prochandle *ph 583c1e38eaSMarcel Moolenaar 593c1e38eaSMarcel Moolenaar struct ta_ops { 603c1e38eaSMarcel Moolenaar td_err_e (*to_init)(void); 613c1e38eaSMarcel Moolenaar 623c1e38eaSMarcel Moolenaar td_err_e (*to_ta_clear_event)(const td_thragent_t *, 633c1e38eaSMarcel Moolenaar td_thr_events_t *); 643c1e38eaSMarcel Moolenaar td_err_e (*to_ta_delete)(td_thragent_t *); 653c1e38eaSMarcel Moolenaar td_err_e (*to_ta_event_addr)(const td_thragent_t *, td_thr_events_e, 663c1e38eaSMarcel Moolenaar td_notify_t *); 673c1e38eaSMarcel Moolenaar td_err_e (*to_ta_event_getmsg)(const td_thragent_t *, 683c1e38eaSMarcel Moolenaar td_event_msg_t *); 693c1e38eaSMarcel Moolenaar td_err_e (*to_ta_map_id2thr)(const td_thragent_t *, thread_t, 703c1e38eaSMarcel Moolenaar td_thrhandle_t *); 713c1e38eaSMarcel Moolenaar td_err_e (*to_ta_map_lwp2thr)(const td_thragent_t *, lwpid_t, 723c1e38eaSMarcel Moolenaar td_thrhandle_t *); 733c1e38eaSMarcel Moolenaar td_err_e (*to_ta_new)(struct ps_prochandle *, td_thragent_t **); 743c1e38eaSMarcel Moolenaar td_err_e (*to_ta_set_event)(const td_thragent_t *, td_thr_events_t *); 753c1e38eaSMarcel Moolenaar td_err_e (*to_ta_thr_iter)(const td_thragent_t *, td_thr_iter_f *, 763c1e38eaSMarcel Moolenaar void *, td_thr_state_e, int, sigset_t *, unsigned int); 773c1e38eaSMarcel Moolenaar td_err_e (*to_ta_tsd_iter)(const td_thragent_t *, td_key_iter_f *, 783c1e38eaSMarcel Moolenaar void *); 793c1e38eaSMarcel Moolenaar 803c1e38eaSMarcel Moolenaar td_err_e (*to_thr_clear_event)(const td_thrhandle_t *, 813c1e38eaSMarcel Moolenaar td_thr_events_t *); 823c1e38eaSMarcel Moolenaar td_err_e (*to_thr_dbresume)(const td_thrhandle_t *); 833c1e38eaSMarcel Moolenaar td_err_e (*to_thr_dbsuspend)(const td_thrhandle_t *); 843c1e38eaSMarcel Moolenaar td_err_e (*to_thr_event_enable)(const td_thrhandle_t *, int); 853c1e38eaSMarcel Moolenaar td_err_e (*to_thr_event_getmsg)(const td_thrhandle_t *, 863c1e38eaSMarcel Moolenaar td_event_msg_t *); 87098d0537SKonstantin Belousov td_err_e (*to_thr_old_get_info)(const td_thrhandle_t *, 88098d0537SKonstantin Belousov td_old_thrinfo_t *); 893c1e38eaSMarcel Moolenaar td_err_e (*to_thr_get_info)(const td_thrhandle_t *, td_thrinfo_t *); 903c1e38eaSMarcel Moolenaar td_err_e (*to_thr_getfpregs)(const td_thrhandle_t *, prfpregset_t *); 913c1e38eaSMarcel Moolenaar td_err_e (*to_thr_getgregs)(const td_thrhandle_t *, prgregset_t); 923c1e38eaSMarcel Moolenaar td_err_e (*to_thr_set_event)(const td_thrhandle_t *, 933c1e38eaSMarcel Moolenaar td_thr_events_t *); 943c1e38eaSMarcel Moolenaar td_err_e (*to_thr_setfpregs)(const td_thrhandle_t *, 953c1e38eaSMarcel Moolenaar const prfpregset_t *); 963c1e38eaSMarcel Moolenaar td_err_e (*to_thr_setgregs)(const td_thrhandle_t *, const prgregset_t); 973c1e38eaSMarcel Moolenaar td_err_e (*to_thr_validate)(const td_thrhandle_t *); 9816b0c20cSMarcel Moolenaar td_err_e (*to_thr_tls_get_addr)(const td_thrhandle_t *, psaddr_t, 9916b0c20cSMarcel Moolenaar size_t, psaddr_t *); 1003c1e38eaSMarcel Moolenaar 1013c1e38eaSMarcel Moolenaar /* FreeBSD specific extensions. */ 1023c1e38eaSMarcel Moolenaar td_err_e (*to_thr_sstep)(const td_thrhandle_t *, int); 1038d7681bbSDoug Rabson #if defined(__i386__) 1048d7681bbSDoug Rabson td_err_e (*to_thr_getxmmregs)(const td_thrhandle_t *, char *); 1058d7681bbSDoug Rabson td_err_e (*to_thr_setxmmregs)(const td_thrhandle_t *, const char *); 1068d7681bbSDoug Rabson #endif 1073c1e38eaSMarcel Moolenaar }; 1083c1e38eaSMarcel Moolenaar 1093c1e38eaSMarcel Moolenaar #ifdef TD_DEBUG 1103c1e38eaSMarcel Moolenaar #define TDBG(...) ps_plog(__VA_ARGS__) 1113c1e38eaSMarcel Moolenaar #define TDBG_FUNC() ps_plog("%s\n", __func__) 1123c1e38eaSMarcel Moolenaar #else 1133c1e38eaSMarcel Moolenaar #define TDBG(...) 1143c1e38eaSMarcel Moolenaar #define TDBG_FUNC() 1153c1e38eaSMarcel Moolenaar #endif 1163c1e38eaSMarcel Moolenaar 1178d4e4b79SMarcel Moolenaar struct td_thragent; 1188d4e4b79SMarcel Moolenaar 11903fad2adSMarcel Moolenaar int thr_pread_int(const struct td_thragent *, psaddr_t, uint32_t *); 12003fad2adSMarcel Moolenaar int thr_pread_long(const struct td_thragent *, psaddr_t, uint64_t *); 12103fad2adSMarcel Moolenaar int thr_pread_ptr(const struct td_thragent *, psaddr_t, psaddr_t *); 1228d4e4b79SMarcel Moolenaar 12303fad2adSMarcel Moolenaar int thr_pwrite_int(const struct td_thragent *, psaddr_t, uint32_t); 12403fad2adSMarcel Moolenaar int thr_pwrite_long(const struct td_thragent *, psaddr_t, uint64_t); 12503fad2adSMarcel Moolenaar int thr_pwrite_ptr(const struct td_thragent *, psaddr_t, psaddr_t); 1268d4e4b79SMarcel Moolenaar 127098d0537SKonstantin Belousov td_err_e td_thr_old_get_info(const td_thrhandle_t *th, td_old_thrinfo_t *info); 128098d0537SKonstantin Belousov 1293c1e38eaSMarcel Moolenaar #endif /* _THREAD_DB_INT_H_ */ 130