Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/cddl/dev/dtrace/dtrace_cddl.h
48255 views
1
/*
2
* CDDL HEADER START
3
*
4
* The contents of this file are subject to the terms of the
5
* Common Development and Distribution License (the "License").
6
* You may not use this file except in compliance with the License.
7
*
8
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9
* or http://www.opensolaris.org/os/licensing.
10
* See the License for the specific language governing permissions
11
* and limitations under the License.
12
*
13
* When distributing Covered Code, include this CDDL HEADER in each
14
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15
* If applicable, add the following below this CDDL HEADER, with the
16
* fields enclosed by brackets "[]" replaced with your own identifying
17
* information: Portions Copyright [yyyy] [name of copyright owner]
18
*
19
* CDDL HEADER END
20
*
21
*/
22
23
#ifndef _DTRACE_CDDL_H_
24
#define _DTRACE_CDDL_H_
25
26
#include <sys/proc.h>
27
28
/*
29
* Kernel DTrace extension to 'struct proc' for FreeBSD.
30
*/
31
typedef struct kdtrace_proc {
32
int p_dtrace_probes; /* Are there probes for this proc? */
33
uint64_t p_dtrace_count; /* Number of DTrace tracepoints */
34
void *p_dtrace_helpers; /* DTrace helpers, if any */
35
int p_dtrace_model;
36
uint64_t p_fasttrap_tp_gen; /* Tracepoint hash table gen */
37
} kdtrace_proc_t;
38
39
/*
40
* Kernel DTrace extension to 'struct thread' for FreeBSD.
41
*/
42
typedef struct kdtrace_thread {
43
uint8_t td_dtrace_stop; /* Indicates a DTrace-desired stop */
44
uint8_t td_dtrace_sig; /* Signal sent via DTrace's raise() */
45
uint8_t td_dtrace_inprobe; /* Are we in a probe? */
46
u_int td_predcache; /* DTrace predicate cache */
47
uint64_t td_dtrace_vtime; /* DTrace virtual time */
48
uint64_t td_dtrace_start; /* DTrace slice start time */
49
50
union __tdu {
51
struct __tds {
52
uint8_t _td_dtrace_on;
53
/* Hit a fasttrap tracepoint. */
54
uint8_t _td_dtrace_step;
55
/* About to return to kernel. */
56
uint8_t _td_dtrace_ret;
57
/* Handling a return probe. */
58
uint8_t _td_dtrace_ast;
59
/* Saved ast flag. */
60
#ifdef __amd64__
61
uint8_t _td_dtrace_reg;
62
#endif
63
} _tds;
64
u_long _td_dtrace_ft; /* Bitwise or of these flags. */
65
} _tdu;
66
#define td_dtrace_ft _tdu._td_dtrace_ft
67
#define td_dtrace_on _tdu._tds._td_dtrace_on
68
#define td_dtrace_step _tdu._tds._td_dtrace_step
69
#define td_dtrace_ret _tdu._tds._td_dtrace_ret
70
#define td_dtrace_ast _tdu._tds._td_dtrace_ast
71
#define td_dtrace_reg _tdu._tds._td_dtrace_reg
72
73
uintptr_t td_dtrace_pc; /* DTrace saved pc from fasttrap. */
74
uintptr_t td_dtrace_npc; /* DTrace next pc from fasttrap. */
75
uintptr_t td_dtrace_scrpc;
76
/* DTrace per-thread scratch location. */
77
uintptr_t td_dtrace_astpc;
78
/* DTrace return sequence location. */
79
#ifdef __amd64__
80
uintptr_t td_dtrace_regv;
81
#endif
82
uintptr_t td_dtrace_sdt_arg[1]; /* Space for extra SDT args */
83
void *td_dtrace_sscr; /* Saved scratch space location. */
84
void *td_systrace_args; /* syscall probe arguments. */
85
uint64_t td_fasttrap_tp_gen; /* Tracepoint hash table gen. */
86
struct trapframe *td_dtrace_trapframe; /* Trap frame from invop. */
87
void *td_kinst_tramp;
88
} kdtrace_thread_t;
89
90
/*
91
* Definitions to reference fields in the FreeBSD DTrace structures defined
92
* above using the names of fields in similar structures in Solaris. Note
93
* that the separation on FreeBSD is a licensing constraint designed to
94
* keep the GENERIC kernel BSD licensed.
95
*/
96
#define t_dtrace_vtime td_dtrace->td_dtrace_vtime
97
#define t_dtrace_start td_dtrace->td_dtrace_start
98
#define t_dtrace_stop td_dtrace->td_dtrace_stop
99
#define t_dtrace_sig td_dtrace->td_dtrace_sig
100
#define t_dtrace_inprobe td_dtrace->td_dtrace_inprobe
101
#define t_predcache td_dtrace->td_predcache
102
#define t_dtrace_ft td_dtrace->td_dtrace_ft
103
#define t_dtrace_on td_dtrace->td_dtrace_on
104
#define t_dtrace_step td_dtrace->td_dtrace_step
105
#define t_dtrace_ret td_dtrace->td_dtrace_ret
106
#define t_dtrace_ast td_dtrace->td_dtrace_ast
107
#define t_dtrace_reg td_dtrace->td_dtrace_reg
108
#define t_dtrace_pc td_dtrace->td_dtrace_pc
109
#define t_dtrace_npc td_dtrace->td_dtrace_npc
110
#define t_dtrace_scrpc td_dtrace->td_dtrace_scrpc
111
#define t_dtrace_astpc td_dtrace->td_dtrace_astpc
112
#define t_dtrace_regv td_dtrace->td_dtrace_regv
113
#define t_dtrace_sdt_arg td_dtrace->td_dtrace_sdt_arg
114
#define t_dtrace_sscr td_dtrace->td_dtrace_sscr
115
#define t_dtrace_systrace_args td_dtrace->td_systrace_args
116
#define t_fasttrap_tp_gen td_dtrace->td_fasttrap_tp_gen
117
#define t_dtrace_trapframe td_dtrace->td_dtrace_trapframe
118
#define t_kinst_tramp td_dtrace->td_kinst_tramp
119
#define p_dtrace_helpers p_dtrace->p_dtrace_helpers
120
#define p_dtrace_count p_dtrace->p_dtrace_count
121
#define p_dtrace_probes p_dtrace->p_dtrace_probes
122
#define p_model p_dtrace->p_dtrace_model
123
#define p_fasttrap_tp_gen p_dtrace->p_fasttrap_tp_gen
124
125
#define DATAMODEL_NATIVE 0
126
#ifdef __amd64__
127
#define DATAMODEL_LP64 0
128
#define DATAMODEL_ILP32 1
129
#else
130
#define DATAMODEL_LP64 1
131
#define DATAMODEL_ILP32 0
132
#endif
133
134
/*
135
* Definitions for fields in struct proc which are named differently in FreeBSD.
136
*/
137
#define p_cred p_ucred
138
#define p_parent p_pptr
139
140
/*
141
* Definitions for fields in struct thread which are named differently in FreeBSD.
142
*/
143
#define t_procp td_proc
144
#define t_tid td_tid
145
#define t_did td_tid
146
#define t_cred td_ucred
147
148
149
int priv_policy(const cred_t *, int, boolean_t, int, const char *);
150
boolean_t priv_policy_only(const cred_t *, int, boolean_t);
151
boolean_t priv_policy_choice(const cred_t *, int, boolean_t);
152
153
/*
154
* Test privilege. Audit success or failure, allow privilege debugging.
155
* Returns 0 for success, err for failure.
156
*/
157
#define PRIV_POLICY(cred, priv, all, err, reason) \
158
priv_policy((cred), (priv), (all), (err), (reason))
159
160
/*
161
* Test privilege. Audit success only, no privilege debugging.
162
* Returns 1 for success, and 0 for failure.
163
*/
164
#define PRIV_POLICY_CHOICE(cred, priv, all) \
165
priv_policy_choice((cred), (priv), (all))
166
167
/*
168
* Test privilege. No priv_debugging, no auditing.
169
* Returns 1 for success, and 0 for failure.
170
*/
171
172
#define PRIV_POLICY_ONLY(cred, priv, all) \
173
priv_policy_only((cred), (priv), (all))
174
175
#endif /* !_DTRACE_CDDL_H_ */
176
177