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