1331722Seadler/*
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: stable/11/lib/libthread_db/libpthread_db.h 317797 2017-05-04 15:00:09Z pfg $
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;
80317797Spfg	unsigned 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