xref: /xnu-8792.81.2/bsd/sys/sdt_impl.h (revision 19c3b8c28c31cb8130e034cfb5df6bf9ba342d90)
1*19c3b8c2SApple OSS Distributions /*
2*19c3b8c2SApple OSS Distributions  * CDDL HEADER START
3*19c3b8c2SApple OSS Distributions  *
4*19c3b8c2SApple OSS Distributions  * The contents of this file are subject to the terms of the
5*19c3b8c2SApple OSS Distributions  * Common Development and Distribution License, Version 1.0 only
6*19c3b8c2SApple OSS Distributions  * (the "License").  You may not use this file except in compliance
7*19c3b8c2SApple OSS Distributions  * with the License.
8*19c3b8c2SApple OSS Distributions  *
9*19c3b8c2SApple OSS Distributions  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*19c3b8c2SApple OSS Distributions  * or http://www.opensolaris.org/os/licensing.
11*19c3b8c2SApple OSS Distributions  * See the License for the specific language governing permissions
12*19c3b8c2SApple OSS Distributions  * and limitations under the License.
13*19c3b8c2SApple OSS Distributions  *
14*19c3b8c2SApple OSS Distributions  * When distributing Covered Code, include this CDDL HEADER in each
15*19c3b8c2SApple OSS Distributions  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*19c3b8c2SApple OSS Distributions  * If applicable, add the following below this CDDL HEADER, with the
17*19c3b8c2SApple OSS Distributions  * fields enclosed by brackets "[]" replaced with your own identifying
18*19c3b8c2SApple OSS Distributions  * information: Portions Copyright [yyyy] [name of copyright owner]
19*19c3b8c2SApple OSS Distributions  *
20*19c3b8c2SApple OSS Distributions  * CDDL HEADER END
21*19c3b8c2SApple OSS Distributions  */
22*19c3b8c2SApple OSS Distributions /*
23*19c3b8c2SApple OSS Distributions  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24*19c3b8c2SApple OSS Distributions  * Use is subject to license terms.
25*19c3b8c2SApple OSS Distributions  */
26*19c3b8c2SApple OSS Distributions 
27*19c3b8c2SApple OSS Distributions #ifndef _SDT_IMPL_H
28*19c3b8c2SApple OSS Distributions #define _SDT_IMPL_H
29*19c3b8c2SApple OSS Distributions 
30*19c3b8c2SApple OSS Distributions #ifdef  __cplusplus
31*19c3b8c2SApple OSS Distributions extern "C" {
32*19c3b8c2SApple OSS Distributions #endif
33*19c3b8c2SApple OSS Distributions 
34*19c3b8c2SApple OSS Distributions extern const char *sdt_prefix;
35*19c3b8c2SApple OSS Distributions 
36*19c3b8c2SApple OSS Distributions typedef struct sdt_probedesc {
37*19c3b8c2SApple OSS Distributions 	char                    *sdpd_name;     /* name of this probe */
38*19c3b8c2SApple OSS Distributions 	int                     sdpd_namelen;
39*19c3b8c2SApple OSS Distributions 	char                    *sdpd_func;     /* APPLE NOTE: function name */
40*19c3b8c2SApple OSS Distributions 	const char              *sdpd_prov;     /* APPLE NOTE: provider name */
41*19c3b8c2SApple OSS Distributions 	unsigned long           sdpd_offset;    /* offset of call in text */
42*19c3b8c2SApple OSS Distributions 	struct sdt_probedesc    *sdpd_next;     /* next static probe */
43*19c3b8c2SApple OSS Distributions } sdt_probedesc_t;
44*19c3b8c2SApple OSS Distributions 
45*19c3b8c2SApple OSS Distributions #ifdef  __cplusplus
46*19c3b8c2SApple OSS Distributions }
47*19c3b8c2SApple OSS Distributions #endif
48*19c3b8c2SApple OSS Distributions 
49*19c3b8c2SApple OSS Distributions #ifdef  __cplusplus
50*19c3b8c2SApple OSS Distributions extern "C" {
51*19c3b8c2SApple OSS Distributions #endif
52*19c3b8c2SApple OSS Distributions 
53*19c3b8c2SApple OSS Distributions #include <sys/dtrace.h>
54*19c3b8c2SApple OSS Distributions 
55*19c3b8c2SApple OSS Distributions struct module {
56*19c3b8c2SApple OSS Distributions 	int sdt_nprobes;
57*19c3b8c2SApple OSS Distributions 	sdt_probedesc_t *sdt_probes;
58*19c3b8c2SApple OSS Distributions };
59*19c3b8c2SApple OSS Distributions 
60*19c3b8c2SApple OSS Distributions extern int sdt_invop(uintptr_t, uintptr_t *, uintptr_t);
61*19c3b8c2SApple OSS Distributions extern uint64_t sdt_getarg(void *, dtrace_id_t, void *, int, int);
62*19c3b8c2SApple OSS Distributions 
63*19c3b8c2SApple OSS Distributions void sdt_provide_module(void *, struct modctl *);
64*19c3b8c2SApple OSS Distributions void sdt_early_init(void);
65*19c3b8c2SApple OSS Distributions void sdt_load_machsect(struct modctl *ctl);
66*19c3b8c2SApple OSS Distributions void sdt_init(void);
67*19c3b8c2SApple OSS Distributions 
68*19c3b8c2SApple OSS Distributions extern int          sdt_probetab_size;
69*19c3b8c2SApple OSS Distributions extern int          sdt_probetab_mask;
70*19c3b8c2SApple OSS Distributions #define SDT_ADDR2NDX(addr)  ((((uintptr_t)(addr)) >> 4) & sdt_probetab_mask)
71*19c3b8c2SApple OSS Distributions 
72*19c3b8c2SApple OSS Distributions 
73*19c3b8c2SApple OSS Distributions #if defined(__x86_64__)
74*19c3b8c2SApple OSS Distributions typedef uint8_t sdt_instr_t;
75*19c3b8c2SApple OSS Distributions #elif defined(__arm64__)
76*19c3b8c2SApple OSS Distributions typedef uint32_t sdt_instr_t;
77*19c3b8c2SApple OSS Distributions #else
78*19c3b8c2SApple OSS Distributions #error Unknown implementation
79*19c3b8c2SApple OSS Distributions #endif
80*19c3b8c2SApple OSS Distributions 
81*19c3b8c2SApple OSS Distributions typedef struct sdt_provider {
82*19c3b8c2SApple OSS Distributions 	const char                      *sdtp_name;     /* name of provider */
83*19c3b8c2SApple OSS Distributions 	const char                      *sdtp_prefix;   /* prefix for probe names */
84*19c3b8c2SApple OSS Distributions 	dtrace_pattr_t          *sdtp_attr;     /* stability attributes */
85*19c3b8c2SApple OSS Distributions 	dtrace_provider_id_t    sdtp_id;        /* provider ID */
86*19c3b8c2SApple OSS Distributions } sdt_provider_t;
87*19c3b8c2SApple OSS Distributions 
88*19c3b8c2SApple OSS Distributions extern sdt_provider_t sdt_providers[];          /* array of providers */
89*19c3b8c2SApple OSS Distributions 
90*19c3b8c2SApple OSS Distributions typedef struct sdt_probe {
91*19c3b8c2SApple OSS Distributions 	sdt_provider_t  *sdp_provider;          /* provider */
92*19c3b8c2SApple OSS Distributions 	char            *sdp_name;              /* name of probe */
93*19c3b8c2SApple OSS Distributions 	int             sdp_namelen;            /* length of allocated name */
94*19c3b8c2SApple OSS Distributions 	dtrace_id_t     sdp_id;                 /* probe ID */
95*19c3b8c2SApple OSS Distributions 	struct modctl   *sdp_ctl;               /* modctl for module */
96*19c3b8c2SApple OSS Distributions 	int             sdp_loadcnt;            /* load count for module */
97*19c3b8c2SApple OSS Distributions 	int             sdp_primary;            /* non-zero if primary mod */
98*19c3b8c2SApple OSS Distributions 	sdt_instr_t     *sdp_patchpoint;        /* patch point */
99*19c3b8c2SApple OSS Distributions 	sdt_instr_t     sdp_patchval;           /* instruction to patch */
100*19c3b8c2SApple OSS Distributions 	sdt_instr_t     sdp_savedval;           /* saved instruction value */
101*19c3b8c2SApple OSS Distributions 	struct sdt_probe *sdp_next;             /* next probe */
102*19c3b8c2SApple OSS Distributions 	struct sdt_probe *sdp_hashnext;         /* next on hash */
103*19c3b8c2SApple OSS Distributions } sdt_probe_t;
104*19c3b8c2SApple OSS Distributions 
105*19c3b8c2SApple OSS Distributions typedef struct sdt_argdesc {
106*19c3b8c2SApple OSS Distributions 	const char *sda_provider;               /* provider for arg */
107*19c3b8c2SApple OSS Distributions 	const char *sda_name;                   /* name of probe */
108*19c3b8c2SApple OSS Distributions 	const int sda_ndx;                      /* argument index */
109*19c3b8c2SApple OSS Distributions 	const int sda_mapping;                  /* mapping of argument */
110*19c3b8c2SApple OSS Distributions 	const char *sda_native;                 /* native type of argument */
111*19c3b8c2SApple OSS Distributions 	const char *sda_xlate;                  /* translated type of arg */
112*19c3b8c2SApple OSS Distributions } sdt_argdesc_t;
113*19c3b8c2SApple OSS Distributions 
114*19c3b8c2SApple OSS Distributions extern void sdt_getargdesc(void *, dtrace_id_t, void *, dtrace_argdesc_t *);
115*19c3b8c2SApple OSS Distributions 
116*19c3b8c2SApple OSS Distributions #ifdef  __cplusplus
117*19c3b8c2SApple OSS Distributions }
118*19c3b8c2SApple OSS Distributions #endif
119*19c3b8c2SApple OSS Distributions 
120*19c3b8c2SApple OSS Distributions #endif  /* _SDT_IMPL_H */
121