191eaf3e1SJohn Birrell /* 291eaf3e1SJohn Birrell * CDDL HEADER START 391eaf3e1SJohn Birrell * 491eaf3e1SJohn Birrell * The contents of this file are subject to the terms of the 591eaf3e1SJohn Birrell * Common Development and Distribution License (the "License"). 691eaf3e1SJohn Birrell * You may not use this file except in compliance with the License. 791eaf3e1SJohn Birrell * 891eaf3e1SJohn Birrell * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 991eaf3e1SJohn Birrell * or http://www.opensolaris.org/os/licensing. 1091eaf3e1SJohn Birrell * See the License for the specific language governing permissions 1191eaf3e1SJohn Birrell * and limitations under the License. 1291eaf3e1SJohn Birrell * 1391eaf3e1SJohn Birrell * When distributing Covered Code, include this CDDL HEADER in each 1491eaf3e1SJohn Birrell * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1591eaf3e1SJohn Birrell * If applicable, add the following below this CDDL HEADER, with the 1691eaf3e1SJohn Birrell * fields enclosed by brackets "[]" replaced with your own identifying 1791eaf3e1SJohn Birrell * information: Portions Copyright [yyyy] [name of copyright owner] 1891eaf3e1SJohn Birrell * 1991eaf3e1SJohn Birrell * CDDL HEADER END 2091eaf3e1SJohn Birrell * 2191eaf3e1SJohn Birrell */ 2291eaf3e1SJohn Birrell 2391eaf3e1SJohn Birrell #ifndef _DTRACE_CDDL_H_ 2491eaf3e1SJohn Birrell #define _DTRACE_CDDL_H_ 2591eaf3e1SJohn Birrell 2691eaf3e1SJohn Birrell #include <sys/proc.h> 2791eaf3e1SJohn Birrell 2891eaf3e1SJohn Birrell /* 2991eaf3e1SJohn Birrell * Kernel DTrace extension to 'struct proc' for FreeBSD. 3091eaf3e1SJohn Birrell */ 3191eaf3e1SJohn Birrell typedef struct kdtrace_proc { 3291eaf3e1SJohn Birrell int p_dtrace_probes; /* Are there probes for this proc? */ 33326d5782SJohn Baldwin uint64_t p_dtrace_count; /* Number of DTrace tracepoints */ 3491eaf3e1SJohn Birrell void *p_dtrace_helpers; /* DTrace helpers, if any */ 356c445208SRui Paulo int p_dtrace_model; 364f1b715cSMark Johnston uint64_t p_fasttrap_tp_gen; /* Tracepoint hash table gen */ 3791eaf3e1SJohn Birrell } kdtrace_proc_t; 3891eaf3e1SJohn Birrell 3991eaf3e1SJohn Birrell /* 4091eaf3e1SJohn Birrell * Kernel DTrace extension to 'struct thread' for FreeBSD. 4191eaf3e1SJohn Birrell */ 4291eaf3e1SJohn Birrell typedef struct kdtrace_thread { 43326d5782SJohn Baldwin uint8_t td_dtrace_stop; /* Indicates a DTrace-desired stop */ 44326d5782SJohn Baldwin uint8_t td_dtrace_sig; /* Signal sent via DTrace's raise() */ 45326d5782SJohn Baldwin uint8_t td_dtrace_inprobe; /* Are we in a probe? */ 4691eaf3e1SJohn Birrell u_int td_predcache; /* DTrace predicate cache */ 47326d5782SJohn Baldwin uint64_t td_dtrace_vtime; /* DTrace virtual time */ 48326d5782SJohn Baldwin uint64_t td_dtrace_start; /* DTrace slice start time */ 4991eaf3e1SJohn Birrell 5091eaf3e1SJohn Birrell union __tdu { 5191eaf3e1SJohn Birrell struct __tds { 52326d5782SJohn Baldwin uint8_t _td_dtrace_on; 5391eaf3e1SJohn Birrell /* Hit a fasttrap tracepoint. */ 54326d5782SJohn Baldwin uint8_t _td_dtrace_step; 5591eaf3e1SJohn Birrell /* About to return to kernel. */ 56326d5782SJohn Baldwin uint8_t _td_dtrace_ret; 5791eaf3e1SJohn Birrell /* Handling a return probe. */ 58326d5782SJohn Baldwin uint8_t _td_dtrace_ast; 5991eaf3e1SJohn Birrell /* Saved ast flag. */ 606c445208SRui Paulo #ifdef __amd64__ 61326d5782SJohn Baldwin uint8_t _td_dtrace_reg; 626c445208SRui Paulo #endif 6391eaf3e1SJohn Birrell } _tds; 6491eaf3e1SJohn Birrell u_long _td_dtrace_ft; /* Bitwise or of these flags. */ 6591eaf3e1SJohn Birrell } _tdu; 6691eaf3e1SJohn Birrell #define td_dtrace_ft _tdu._td_dtrace_ft 6791eaf3e1SJohn Birrell #define td_dtrace_on _tdu._tds._td_dtrace_on 6891eaf3e1SJohn Birrell #define td_dtrace_step _tdu._tds._td_dtrace_step 6991eaf3e1SJohn Birrell #define td_dtrace_ret _tdu._tds._td_dtrace_ret 7091eaf3e1SJohn Birrell #define td_dtrace_ast _tdu._tds._td_dtrace_ast 716c445208SRui Paulo #define td_dtrace_reg _tdu._tds._td_dtrace_reg 7291eaf3e1SJohn Birrell 7391eaf3e1SJohn Birrell uintptr_t td_dtrace_pc; /* DTrace saved pc from fasttrap. */ 7491eaf3e1SJohn Birrell uintptr_t td_dtrace_npc; /* DTrace next pc from fasttrap. */ 7591eaf3e1SJohn Birrell uintptr_t td_dtrace_scrpc; 7691eaf3e1SJohn Birrell /* DTrace per-thread scratch location. */ 7791eaf3e1SJohn Birrell uintptr_t td_dtrace_astpc; 7891eaf3e1SJohn Birrell /* DTrace return sequence location. */ 796c445208SRui Paulo #ifdef __amd64__ 806c445208SRui Paulo uintptr_t td_dtrace_regv; 816c445208SRui Paulo #endif 82*70c712a8SMark Johnston uintptr_t td_dtrace_sdt_arg[1]; /* Space for extra SDT args */ 830626f3e4SMark Johnston void *td_dtrace_sscr; /* Saved scratch space location. */ 848ff6d9ddSMark Johnston void *td_systrace_args; /* syscall probe arguments. */ 854f1b715cSMark Johnston uint64_t td_fasttrap_tp_gen; /* Tracepoint hash table gen. */ 86bdd101c4SMark Johnston struct trapframe *td_dtrace_trapframe; /* Trap frame from invop. */ 871aa48621SChristos Margiolis void *td_kinst_tramp; 8891eaf3e1SJohn Birrell } kdtrace_thread_t; 8991eaf3e1SJohn Birrell 9091eaf3e1SJohn Birrell /* 9191eaf3e1SJohn Birrell * Definitions to reference fields in the FreeBSD DTrace structures defined 9291eaf3e1SJohn Birrell * above using the names of fields in similar structures in Solaris. Note 9391eaf3e1SJohn Birrell * that the separation on FreeBSD is a licensing constraint designed to 9491eaf3e1SJohn Birrell * keep the GENERIC kernel BSD licensed. 9591eaf3e1SJohn Birrell */ 9691eaf3e1SJohn Birrell #define t_dtrace_vtime td_dtrace->td_dtrace_vtime 9791eaf3e1SJohn Birrell #define t_dtrace_start td_dtrace->td_dtrace_start 9891eaf3e1SJohn Birrell #define t_dtrace_stop td_dtrace->td_dtrace_stop 9991eaf3e1SJohn Birrell #define t_dtrace_sig td_dtrace->td_dtrace_sig 10085931364SMark Johnston #define t_dtrace_inprobe td_dtrace->td_dtrace_inprobe 10191eaf3e1SJohn Birrell #define t_predcache td_dtrace->td_predcache 1026c445208SRui Paulo #define t_dtrace_ft td_dtrace->td_dtrace_ft 1036c445208SRui Paulo #define t_dtrace_on td_dtrace->td_dtrace_on 1046c445208SRui Paulo #define t_dtrace_step td_dtrace->td_dtrace_step 1056c445208SRui Paulo #define t_dtrace_ret td_dtrace->td_dtrace_ret 1066c445208SRui Paulo #define t_dtrace_ast td_dtrace->td_dtrace_ast 1076c445208SRui Paulo #define t_dtrace_reg td_dtrace->td_dtrace_reg 1086c445208SRui Paulo #define t_dtrace_pc td_dtrace->td_dtrace_pc 1096c445208SRui Paulo #define t_dtrace_npc td_dtrace->td_dtrace_npc 1106c445208SRui Paulo #define t_dtrace_scrpc td_dtrace->td_dtrace_scrpc 1116c445208SRui Paulo #define t_dtrace_astpc td_dtrace->td_dtrace_astpc 1126c445208SRui Paulo #define t_dtrace_regv td_dtrace->td_dtrace_regv 113*70c712a8SMark Johnston #define t_dtrace_sdt_arg td_dtrace->td_dtrace_sdt_arg 1140626f3e4SMark Johnston #define t_dtrace_sscr td_dtrace->td_dtrace_sscr 1158ff6d9ddSMark Johnston #define t_dtrace_systrace_args td_dtrace->td_systrace_args 1164f1b715cSMark Johnston #define t_fasttrap_tp_gen td_dtrace->td_fasttrap_tp_gen 117bdd101c4SMark Johnston #define t_dtrace_trapframe td_dtrace->td_dtrace_trapframe 1181aa48621SChristos Margiolis #define t_kinst_tramp td_dtrace->td_kinst_tramp 11991eaf3e1SJohn Birrell #define p_dtrace_helpers p_dtrace->p_dtrace_helpers 1206c445208SRui Paulo #define p_dtrace_count p_dtrace->p_dtrace_count 1216c445208SRui Paulo #define p_dtrace_probes p_dtrace->p_dtrace_probes 1226c445208SRui Paulo #define p_model p_dtrace->p_dtrace_model 1234f1b715cSMark Johnston #define p_fasttrap_tp_gen p_dtrace->p_fasttrap_tp_gen 1240626f3e4SMark Johnston 1256c445208SRui Paulo #define DATAMODEL_NATIVE 0 1266c445208SRui Paulo #ifdef __amd64__ 1276c445208SRui Paulo #define DATAMODEL_LP64 0 1286c445208SRui Paulo #define DATAMODEL_ILP32 1 1296c445208SRui Paulo #else 1306c445208SRui Paulo #define DATAMODEL_LP64 1 1316c445208SRui Paulo #define DATAMODEL_ILP32 0 1326c445208SRui Paulo #endif 13391eaf3e1SJohn Birrell 13491eaf3e1SJohn Birrell /* 1356c445208SRui Paulo * Definitions for fields in struct proc which are named differently in FreeBSD. 13691eaf3e1SJohn Birrell */ 13791eaf3e1SJohn Birrell #define p_cred p_ucred 13891eaf3e1SJohn Birrell #define p_parent p_pptr 13991eaf3e1SJohn Birrell 14091eaf3e1SJohn Birrell /* 1416c445208SRui Paulo * Definitions for fields in struct thread which are named differently in FreeBSD. 14291eaf3e1SJohn Birrell */ 14391eaf3e1SJohn Birrell #define t_procp td_proc 14491eaf3e1SJohn Birrell #define t_tid td_tid 14591eaf3e1SJohn Birrell #define t_did td_tid 1460c2b6019SRui Paulo #define t_cred td_ucred 14791eaf3e1SJohn Birrell 14891eaf3e1SJohn Birrell 14991eaf3e1SJohn Birrell int priv_policy(const cred_t *, int, boolean_t, int, const char *); 15091eaf3e1SJohn Birrell boolean_t priv_policy_only(const cred_t *, int, boolean_t); 15191eaf3e1SJohn Birrell boolean_t priv_policy_choice(const cred_t *, int, boolean_t); 15291eaf3e1SJohn Birrell 15391eaf3e1SJohn Birrell /* 15491eaf3e1SJohn Birrell * Test privilege. Audit success or failure, allow privilege debugging. 15591eaf3e1SJohn Birrell * Returns 0 for success, err for failure. 15691eaf3e1SJohn Birrell */ 15791eaf3e1SJohn Birrell #define PRIV_POLICY(cred, priv, all, err, reason) \ 15891eaf3e1SJohn Birrell priv_policy((cred), (priv), (all), (err), (reason)) 15991eaf3e1SJohn Birrell 16091eaf3e1SJohn Birrell /* 16191eaf3e1SJohn Birrell * Test privilege. Audit success only, no privilege debugging. 16291eaf3e1SJohn Birrell * Returns 1 for success, and 0 for failure. 16391eaf3e1SJohn Birrell */ 16491eaf3e1SJohn Birrell #define PRIV_POLICY_CHOICE(cred, priv, all) \ 16591eaf3e1SJohn Birrell priv_policy_choice((cred), (priv), (all)) 16691eaf3e1SJohn Birrell 16791eaf3e1SJohn Birrell /* 16891eaf3e1SJohn Birrell * Test privilege. No priv_debugging, no auditing. 16991eaf3e1SJohn Birrell * Returns 1 for success, and 0 for failure. 17091eaf3e1SJohn Birrell */ 17191eaf3e1SJohn Birrell 17291eaf3e1SJohn Birrell #define PRIV_POLICY_ONLY(cred, priv, all) \ 17391eaf3e1SJohn Birrell priv_policy_only((cred), (priv), (all)) 17491eaf3e1SJohn Birrell 17591eaf3e1SJohn Birrell #endif /* !_DTRACE_CDDL_H_ */ 176