1132332Smarcel/* 2132332Smarcel * Copyright (c) 2004 David Xu <davidxu@freebsd.org> 3132332Smarcel * All rights reserved. 4132332Smarcel * 5132332Smarcel * Redistribution and use in source and binary forms, with or without 6132332Smarcel * modification, are permitted provided that the following conditions 7132332Smarcel * are met: 8132332Smarcel * 1. Redistributions of source code must retain the above copyright 9132332Smarcel * notice, this list of conditions and the following disclaimer. 10132332Smarcel * 2. Redistributions in binary form must reproduce the above copyright 11132332Smarcel * notice, this list of conditions and the following disclaimer in the 12132332Smarcel * documentation and/or other materials provided with the distribution. 13132332Smarcel * 14132332Smarcel * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15132332Smarcel * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16132332Smarcel * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17132332Smarcel * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18132332Smarcel * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19132332Smarcel * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20132332Smarcel * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21132332Smarcel * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22132332Smarcel * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23132332Smarcel * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24132332Smarcel * SUCH DAMAGE. 25132332Smarcel * 26132332Smarcel * $FreeBSD$ 27132332Smarcel */ 28132332Smarcel 29132332Smarcel#ifndef _LIBPTHREAD_DB_H_ 30132332Smarcel#define _LIBPTHREAD_DB_H_ 31132332Smarcel 32132332Smarcel#include <sys/ucontext.h> 33132332Smarcel#include <machine/reg.h> 34132332Smarcel 35132332Smarcel#include "thread_db_int.h" 36132332Smarcel 37181059Smarcelenum pt_type { 38181059Smarcel PT_NONE, 39181059Smarcel PT_USER, 40181059Smarcel PT_LWP 41181059Smarcel}; 42181059Smarcel 43132332Smarcelstruct pt_map { 44181059Smarcel enum pt_type type; 45132332Smarcel union { 46132332Smarcel lwpid_t lwp; 47132332Smarcel psaddr_t thr; 48132332Smarcel }; 49132332Smarcel}; 50132332Smarcel 51132332Smarcelstruct td_thragent { 52132332Smarcel TD_THRAGENT_FIELDS; 53132332Smarcel psaddr_t libkse_debug_addr; 54132332Smarcel psaddr_t thread_list_addr; 55132332Smarcel psaddr_t thread_listgen_addr; 56132332Smarcel psaddr_t thread_activated_addr; 57132332Smarcel psaddr_t thread_active_threads_addr; 58132332Smarcel psaddr_t thread_keytable_addr; 59132332Smarcel int thread_activated; 60133802Sdavidxu int thread_off_dtv; 61133802Sdavidxu int thread_off_kse_locklevel; 62133802Sdavidxu int thread_off_kse; 63133802Sdavidxu int thread_off_tlsindex; 64133802Sdavidxu int thread_off_attr_flags; 65133802Sdavidxu int thread_size_key; 66133802Sdavidxu int thread_off_tcb; 67133802Sdavidxu int thread_off_linkmap; 68133802Sdavidxu int thread_off_tmbx; 69133802Sdavidxu int thread_off_thr_locklevel; 70133802Sdavidxu int thread_off_next; 71133802Sdavidxu int thread_off_state; 72133802Sdavidxu int thread_max_keys; 73133802Sdavidxu int thread_off_key_allocated; 74133802Sdavidxu int thread_off_key_destructor; 75133802Sdavidxu int thread_state_zoombie; 76133802Sdavidxu int thread_state_running; 77158680Sdavidxu int thread_off_sigmask; 78158680Sdavidxu int thread_off_sigpend; 79132332Smarcel struct pt_map *map; 80132332Smarcel int map_len; 81132332Smarcel}; 82132332Smarcel 83132332Smarcelvoid pt_md_init(void); 84132332Smarcelvoid pt_reg_to_ucontext(const struct reg *, ucontext_t *); 85132332Smarcelvoid pt_ucontext_to_reg(const ucontext_t *, struct reg *); 86132332Smarcelvoid pt_fpreg_to_ucontext(const struct fpreg *, ucontext_t *); 87132332Smarcelvoid pt_ucontext_to_fpreg(const ucontext_t *, struct fpreg *); 88146818Sdfr#ifdef __i386__ 89146818Sdfrvoid pt_fxsave_to_ucontext(const char *, ucontext_t *); 90146818Sdfrvoid pt_ucontext_to_fxsave(const ucontext_t *, char *); 91146818Sdfr#endif 92132332Smarcelint pt_reg_sstep(struct reg *reg, int step); 93132332Smarcel 94132332Smarcel#endif /* _LIBPTHREAD_DB_H_ */ 95