Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/agent/src/os/linux/thread_db.h
38833 views
1
/*
2
* Copyright (C) 2013 The Android Open Source Project
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
17
#pragma once
18
19
#include <pthread.h>
20
#include <signal.h>
21
#include <stdint.h>
22
// #include <sys/procfs.h>
23
#include "glibc_procfs.h"
24
#include <sys/types.h>
25
26
#define TD_THR_ANY_USER_FLAGS 0xffffffff
27
#define TD_THR_LOWEST_PRIORITY -20
28
#define TD_SIGNO_MASK NULL
29
30
/* td_err_e values */
31
enum {
32
TD_OK,
33
TD_ERR,
34
TD_NOTHR,
35
TD_NOSV,
36
TD_NOLWP,
37
TD_BADPH,
38
TD_BADTH,
39
TD_BADSH,
40
TD_BADTA,
41
TD_BADKEY,
42
TD_NOMSG,
43
TD_NOFPREGS,
44
TD_NOLIBTHREAD,
45
TD_NOEVENT,
46
TD_NOCAPAB,
47
TD_DBERR,
48
TD_NOAPLIC,
49
TD_NOTSD,
50
TD_MALLOC,
51
TD_PARTIALREG,
52
TD_NOXREGS,
53
TD_VERSION
54
};
55
56
/*
57
* td_event_e values
58
* NOTE: There is a max of 32 events
59
*/
60
enum {
61
TD_CREATE,
62
TD_DEATH
63
};
64
65
/* td_thr_state_e values */
66
enum {
67
TD_THR_ANY_STATE,
68
TD_THR_UNKNOWN,
69
TD_THR_SLEEP,
70
TD_THR_ZOMBIE
71
};
72
73
typedef int32_t td_err_e;
74
typedef uint32_t td_event_e;
75
typedef uint32_t td_notify_e;
76
typedef uint32_t td_thr_state_e;
77
typedef pthread_t thread_t;
78
79
typedef struct
80
{
81
pid_t pid;
82
struct ps_prochandle *ph;
83
} td_thragent_t;
84
85
typedef struct
86
{
87
pid_t pid;
88
pid_t tid;
89
psaddr_t th_unique;
90
} td_thrhandle_t;
91
92
typedef struct
93
{
94
td_event_e event;
95
td_thrhandle_t const * th_p;
96
union {
97
void * data;
98
} msg;
99
} td_event_msg_t;
100
101
typedef struct
102
{
103
uint32_t events;
104
} td_thr_events_t;
105
106
typedef struct
107
{
108
union {
109
void * bptaddr;
110
} u;
111
} td_notify_t;
112
113
typedef struct
114
{
115
td_thr_state_e ti_state;
116
thread_t ti_tid; // pthread's id for the thread
117
int32_t ti_lid; // the kernel's id for the thread
118
} td_thrinfo_t;
119
120
121
#define td_event_emptyset(set) \
122
(set)->events = 0
123
124
#define td_event_fillset(set) \
125
(set)->events = 0xffffffff
126
127
#define td_event_addset(set, n) \
128
(set)->events |= (1 << n)
129
130
131
typedef int td_thr_iter_f(td_thrhandle_t const *, void *);
132
133
134
struct ps_prochandle;
135
136
#ifdef __cplusplus
137
extern "C"{
138
#endif
139
140
extern td_err_e td_ta_new(struct ps_prochandle * proc_handle, td_thragent_t ** thread_agent);
141
142
extern td_err_e td_ta_delete(td_thragent_t * ta);
143
144
extern td_err_e td_ta_set_event(td_thragent_t const * agent, td_thr_events_t * event);
145
146
extern td_err_e td_ta_event_addr(td_thragent_t const * agent, td_event_e event, td_notify_t * notify);
147
148
extern td_err_e td_ta_clear_event(const td_thragent_t * ta_arg,
149
td_thr_events_t * event);
150
151
extern td_err_e td_ta_event_getmsg(td_thragent_t const * agent, td_event_msg_t * event);
152
153
extern td_err_e td_ta_map_lwp2thr(td_thragent_t const * agent, lwpid_t lwpid,
154
td_thrhandle_t *th);
155
156
extern td_err_e td_thr_get_info(td_thrhandle_t const * handle,
157
td_thrinfo_t * info);
158
159
extern td_err_e td_thr_event_enable(const td_thrhandle_t * handle,
160
int event);
161
162
extern td_err_e td_ta_thr_iter(td_thragent_t const * agent, td_thr_iter_f * func, void * cookie,
163
td_thr_state_e state, int32_t prio, sigset_t * sigmask, uint32_t user_flags);
164
165
extern char const ** td_symbol_list(void);
166
167
extern td_err_e td_thr_get_info(td_thrhandle_t const * handle, td_thrinfo_t * info);
168
169
extern td_err_e td_thr_tlsbase(const td_thrhandle_t*, unsigned long int, psaddr_t*);
170
171
extern td_err_e td_thr_tls_get_addr(const td_thrhandle_t*, psaddr_t, size_t, psaddr_t*);
172
173
#ifdef __cplusplus
174
}
175
#endif
176
177