xref: /xnu-12377.41.6/bsd/dev/dtrace/scripts/darwin.d (revision bbb1b6f9e71b8cdde6e5cd6f4841f207dee3d828) !
1*bbb1b6f9SApple OSS Distributions /*
2*bbb1b6f9SApple OSS Distributions  * Copyright (c) 2005-2006 Apple Computer, Inc. All rights reserved.
3*bbb1b6f9SApple OSS Distributions  *
4*bbb1b6f9SApple OSS Distributions  * @APPLE_LICENSE_HEADER_START@
5*bbb1b6f9SApple OSS Distributions  *
6*bbb1b6f9SApple OSS Distributions  * The contents of this file constitute Original Code as defined in and
7*bbb1b6f9SApple OSS Distributions  * are subject to the Apple Public Source License Version 1.1 (the
8*bbb1b6f9SApple OSS Distributions  * "License").  You may not use this file except in compliance with the
9*bbb1b6f9SApple OSS Distributions  * License.  Please obtain a copy of the License at
10*bbb1b6f9SApple OSS Distributions  * http://www.apple.com/publicsource and read it before using this file.
11*bbb1b6f9SApple OSS Distributions  *
12*bbb1b6f9SApple OSS Distributions  * This Original Code and all software distributed under the License are
13*bbb1b6f9SApple OSS Distributions  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14*bbb1b6f9SApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15*bbb1b6f9SApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16*bbb1b6f9SApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
17*bbb1b6f9SApple OSS Distributions  * License for the specific language governing rights and limitations
18*bbb1b6f9SApple OSS Distributions  * under the License.
19*bbb1b6f9SApple OSS Distributions  *
20*bbb1b6f9SApple OSS Distributions  * @APPLE_LICENSE_HEADER_END@
21*bbb1b6f9SApple OSS Distributions  */
22*bbb1b6f9SApple OSS Distributions 
23*bbb1b6f9SApple OSS Distributions inline int UT_VFORK = 0x02000000;  /* thread has vfork children */
24*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" UT_VFORK
25*bbb1b6f9SApple OSS Distributions 
26*bbb1b6f9SApple OSS Distributions inline uthread_t uthread = (mach_kernel`uthread_t)(&curthread[1]); /* ` */
27*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" uthread
28*bbb1b6f9SApple OSS Distributions 
29*bbb1b6f9SApple OSS Distributions inline struct proc * curproc =
30*bbb1b6f9SApple OSS Distributions 	((struct proc *)(curthread->t_tro->tro_proc)) != NULL ? ((struct proc *)(curthread->t_tro->tro_proc)) :
31*bbb1b6f9SApple OSS Distributions 	mach_kernel`kernproc; /* ` */
32*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" curproc
33*bbb1b6f9SApple OSS Distributions 
34*bbb1b6f9SApple OSS Distributions /*
35*bbb1b6f9SApple OSS Distributions  * curthread->thread_tag will have this set if the thread is the main thread
36*bbb1b6f9SApple OSS Distributions  */
37*bbb1b6f9SApple OSS Distributions inline uint32_t THREAD_TAG_MAINTHREAD = 0x1;
38*bbb1b6f9SApple OSS Distributions inline uint32_t THREAD_TAG_CALLOUT = 0x2;
39*bbb1b6f9SApple OSS Distributions inline uint32_t THREAD_TAG_IOWORKLOOP = 0x4;
40*bbb1b6f9SApple OSS Distributions 
41*bbb1b6f9SApple OSS Distributions /*
42*bbb1b6f9SApple OSS Distributions  * mach thread scheduler state
43*bbb1b6f9SApple OSS Distributions  */
44*bbb1b6f9SApple OSS Distributions inline int TH_WAIT		= 0x01;
45*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" TH_WAIT
46*bbb1b6f9SApple OSS Distributions inline int TH_SUSP		= 0x02;
47*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" TH_SUSP
48*bbb1b6f9SApple OSS Distributions inline int TH_RUN		= 0x04;
49*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" TH_RUN
50*bbb1b6f9SApple OSS Distributions inline int TH_UNINT		= 0x08;
51*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" TH_UNINT
52*bbb1b6f9SApple OSS Distributions inline int TH_TERMINATE  	= 0x10;
53*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" TH_TERMINATE
54*bbb1b6f9SApple OSS Distributions inline int TH_TERMINATE2	= 0x20;
55*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" TH_TERMINATE2
56*bbb1b6f9SApple OSS Distributions inline int TH_IDLE		= 0x80;
57*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" TH_IDLE
58*bbb1b6f9SApple OSS Distributions 
59*bbb1b6f9SApple OSS Distributions /*
60*bbb1b6f9SApple OSS Distributions  * The following miscellaneous constants are used by the proc(4) translators
61*bbb1b6f9SApple OSS Distributions  * defined below.
62*bbb1b6f9SApple OSS Distributions  */
63*bbb1b6f9SApple OSS Distributions inline char SIDL = 1;
64*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SIDL
65*bbb1b6f9SApple OSS Distributions inline char SRUN = 2;
66*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SRUN
67*bbb1b6f9SApple OSS Distributions inline char SSLEEP = 3;
68*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SSLEEP
69*bbb1b6f9SApple OSS Distributions inline char SSTOP = 4;
70*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SSTOP
71*bbb1b6f9SApple OSS Distributions inline char SZOMB = 5;
72*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SZOMB
73*bbb1b6f9SApple OSS Distributions /*
74*bbb1b6f9SApple OSS Distributions  * SONPROC defined here for compatability with ported scripts
75*bbb1b6f9SApple OSS Distributions  */
76*bbb1b6f9SApple OSS Distributions inline char SONPROC = 6;
77*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SONPROC
78*bbb1b6f9SApple OSS Distributions 
79*bbb1b6f9SApple OSS Distributions inline char SOBJ_NONE = 0;
80*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SOBJ_NONE
81*bbb1b6f9SApple OSS Distributions /*
82*bbb1b6f9SApple OSS Distributions  * SOBJ_* defined here for compatability with ported scripts
83*bbb1b6f9SApple OSS Distributions  */
84*bbb1b6f9SApple OSS Distributions inline char SOBJ_MUTEX = 1;
85*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SOBJ_MUTEX
86*bbb1b6f9SApple OSS Distributions inline char SOBJ_RWLOCK = 2;
87*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SOBJ_RWLOCK
88*bbb1b6f9SApple OSS Distributions inline char SOBJ_CV = 3;
89*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SOBJ_CV
90*bbb1b6f9SApple OSS Distributions inline char SOBJ_SEMA = 4;
91*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SOBJ_SEMA
92*bbb1b6f9SApple OSS Distributions inline char SOBJ_USER = 5;
93*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SOBJ_USER
94*bbb1b6f9SApple OSS Distributions inline char SOBJ_USER_PI = 6;
95*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SOBJ_USER_PI
96*bbb1b6f9SApple OSS Distributions inline char SOBJ_SHUTTLE = 7;
97*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" SOBJ_SHUTTLE
98*bbb1b6f9SApple OSS Distributions 
99*bbb1b6f9SApple OSS Distributions inline char PR_MODEL_ILP32 = 1;
100*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_MODEL_ILP32
101*bbb1b6f9SApple OSS Distributions inline char PR_MODEL_LP64 = 2;
102*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_MODEL_LP64
103*bbb1b6f9SApple OSS Distributions 
104*bbb1b6f9SApple OSS Distributions /*
105*bbb1b6f9SApple OSS Distributions  * PR_* defined here for compatability with ported scripts
106*bbb1b6f9SApple OSS Distributions  */
107*bbb1b6f9SApple OSS Distributions inline int PR_STOPPED = 0x00000001;
108*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_STOPPED
109*bbb1b6f9SApple OSS Distributions inline int PR_ISTOP = 0x00000002;
110*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_ISTOP
111*bbb1b6f9SApple OSS Distributions inline int PR_DSTOP = 0x00000004;
112*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_DSTOP
113*bbb1b6f9SApple OSS Distributions inline int PR_STEP = 0x00000008;
114*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_STEP
115*bbb1b6f9SApple OSS Distributions inline int PR_ASLEEP = 0x00000010;
116*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_ASLEEP
117*bbb1b6f9SApple OSS Distributions inline int PR_PCINVAL = 0x00000020;
118*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_PCINVAL
119*bbb1b6f9SApple OSS Distributions inline int PR_ASLWP = 0x00000040;
120*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_ASLWP
121*bbb1b6f9SApple OSS Distributions inline int PR_AGENT = 0x00000080;
122*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_AGENT
123*bbb1b6f9SApple OSS Distributions inline int PR_DETACH = 0x00000100;
124*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_DETACH
125*bbb1b6f9SApple OSS Distributions inline int PR_DAEMON = 0x00000200;
126*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_DAEMON
127*bbb1b6f9SApple OSS Distributions inline int PR_ISSYS = 0x00001000;
128*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_ISSYS
129*bbb1b6f9SApple OSS Distributions inline int PR_VFORKP = 0x00002000;
130*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_VFORKP
131*bbb1b6f9SApple OSS Distributions inline int PR_ORPHAN = 0x00004000;
132*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_ORPHAN
133*bbb1b6f9SApple OSS Distributions inline int PR_FORK = 0x00100000;
134*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_FORK
135*bbb1b6f9SApple OSS Distributions inline int PR_RLC = 0x00200000;
136*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_RLC
137*bbb1b6f9SApple OSS Distributions inline int PR_KLC = 0x00400000;
138*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_KLC
139*bbb1b6f9SApple OSS Distributions inline int PR_ASYNC = 0x00800000;
140*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_ASYNC
141*bbb1b6f9SApple OSS Distributions inline int PR_MSACCT = 0x01000000;
142*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_MSACCT
143*bbb1b6f9SApple OSS Distributions inline int PR_BPTADJ = 0x02000000;
144*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_BPTADJ
145*bbb1b6f9SApple OSS Distributions inline int PR_PTRACE = 0x04000000;
146*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_PTRACE
147*bbb1b6f9SApple OSS Distributions inline int PR_MSFORK = 0x08000000;
148*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_MSFORK
149*bbb1b6f9SApple OSS Distributions inline int PR_IDLE = 0x10000000;
150*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PR_IDLE
151*bbb1b6f9SApple OSS Distributions 
152*bbb1b6f9SApple OSS Distributions /*
153*bbb1b6f9SApple OSS Distributions  * Translate from the kernel's proc_t structure to a proc(4) psinfo_t struct.
154*bbb1b6f9SApple OSS Distributions  * We do not provide support for pr_size, pr_rssize, pr_pctcpu, and pr_pctmem.
155*bbb1b6f9SApple OSS Distributions  * We also do not fill in pr_lwp (the lwpsinfo_t for the representative LWP)
156*bbb1b6f9SApple OSS Distributions  * because we do not have the ability to select and stop any representative.
157*bbb1b6f9SApple OSS Distributions  * Also, for the moment, pr_wstat, pr_time, and pr_ctime are not supported,
158*bbb1b6f9SApple OSS Distributions  * but these could be supported by DTrace in the future using subroutines.
159*bbb1b6f9SApple OSS Distributions  * Note that any member added to this translator should also be added to the
160*bbb1b6f9SApple OSS Distributions  * kthread_t-to-psinfo_t translator, below.
161*bbb1b6f9SApple OSS Distributions  */
162*bbb1b6f9SApple OSS Distributions typedef int taskid_t;
163*bbb1b6f9SApple OSS Distributions typedef int projid_t;
164*bbb1b6f9SApple OSS Distributions typedef int poolid_t;
165*bbb1b6f9SApple OSS Distributions typedef struct timespec timestruc_t; /* (SECONDS, NANOSECONDS) */
166*bbb1b6f9SApple OSS Distributions 
167*bbb1b6f9SApple OSS Distributions typedef struct psinfo {
168*bbb1b6f9SApple OSS Distributions 	int	pr_nlwp;	/* number of active lwps in the process */
169*bbb1b6f9SApple OSS Distributions 	pid_t	pr_pid;		/* unique process id */
170*bbb1b6f9SApple OSS Distributions 	pid_t	pr_ppid;	/* process id of parent */
171*bbb1b6f9SApple OSS Distributions 	pid_t	pr_pgid;	/* pid of process group leader */
172*bbb1b6f9SApple OSS Distributions 	pid_t	pr_sid;		/* session id */
173*bbb1b6f9SApple OSS Distributions 	uid_t	pr_uid;		/* real user id */
174*bbb1b6f9SApple OSS Distributions 	uid_t	pr_euid;	/* effective user id */
175*bbb1b6f9SApple OSS Distributions 	gid_t	pr_gid;		/* real group id */
176*bbb1b6f9SApple OSS Distributions 	gid_t	pr_egid;	/* effective group id */
177*bbb1b6f9SApple OSS Distributions 	uintptr_t pr_addr;	/* address of process */
178*bbb1b6f9SApple OSS Distributions 	dev_t	pr_ttydev;	/* controlling tty device (or PRNODEV) */
179*bbb1b6f9SApple OSS Distributions 	timestruc_t pr_start;/* process start time, DEPRECATED, see pr_start_tv below */
180*bbb1b6f9SApple OSS Distributions 	char pr_fname[16];	/* name of execed file */
181*bbb1b6f9SApple OSS Distributions 	char pr_psargs[80];	/* initial characters of arg list */
182*bbb1b6f9SApple OSS Distributions 	int pr_argc;    	/* initial argument count */
183*bbb1b6f9SApple OSS Distributions 	user_addr_t pr_argv;  /* address of initial argument vector */
184*bbb1b6f9SApple OSS Distributions 	user_addr_t pr_envp;  /* address of initial environment vector */
185*bbb1b6f9SApple OSS Distributions 	char    pr_dmodel;  /* data model of the process */
186*bbb1b6f9SApple OSS Distributions 	taskid_t pr_taskid; /* task id */
187*bbb1b6f9SApple OSS Distributions 	projid_t pr_projid; /* project id */
188*bbb1b6f9SApple OSS Distributions 	poolid_t pr_poolid; /* pool id */
189*bbb1b6f9SApple OSS Distributions 	zoneid_t pr_zoneid; /* zone id */
190*bbb1b6f9SApple OSS Distributions 
191*bbb1b6f9SApple OSS Distributions 	struct timeval pr_start_tv; /* process start time, from the epoch (SECONDS, MICROSECONDS) */
192*bbb1b6f9SApple OSS Distributions } psinfo_t;
193*bbb1b6f9SApple OSS Distributions 
194*bbb1b6f9SApple OSS Distributions inline int P_LP64 = 0x00000004;  /* Process is LP64 */
195*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" P_LP64
196*bbb1b6f9SApple OSS Distributions 
197*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" translator
198*bbb1b6f9SApple OSS Distributions translator psinfo_t < struct proc * P > {
199*bbb1b6f9SApple OSS Distributions 	pr_nlwp = 	((struct task *)(P->p_proc_ro->pr_task))->thread_count;
200*bbb1b6f9SApple OSS Distributions 	pr_pid = 	P->p_pid;
201*bbb1b6f9SApple OSS Distributions 	pr_ppid = 	P->p_ppid;
202*bbb1b6f9SApple OSS Distributions 	pr_pgid = 	P->p_pgrp.__smr_ptr->pg_id;
203*bbb1b6f9SApple OSS Distributions 	pr_sid = 	P->p_pgrp.__smr_ptr->pg_session->s_sid;
204*bbb1b6f9SApple OSS Distributions  	pr_uid = 	P->p_proc_ro->p_ucred.__smr_ptr->cr_posix.cr_ruid;
205*bbb1b6f9SApple OSS Distributions  	pr_euid = 	P->p_proc_ro->p_ucred.__smr_ptr->cr_posix.cr_uid;
206*bbb1b6f9SApple OSS Distributions  	pr_gid = 	P->p_proc_ro->p_ucred.__smr_ptr->cr_posix.cr_rgid;
207*bbb1b6f9SApple OSS Distributions  	pr_egid = 	P->p_proc_ro->p_ucred.__smr_ptr->cr_posix.cr_groups[0];
208*bbb1b6f9SApple OSS Distributions 	pr_addr = 	(uintptr_t)P;
209*bbb1b6f9SApple OSS Distributions 
210*bbb1b6f9SApple OSS Distributions 	pr_ttydev = (P->p_pgrp.__smr_ptr->pg_session->s_ttyvp == NULL) ? (dev_t)-1 :
211*bbb1b6f9SApple OSS Distributions 		P->p_pgrp.__smr_ptr->pg_session->s_ttyp->t_dev;
212*bbb1b6f9SApple OSS Distributions 
213*bbb1b6f9SApple OSS Distributions 	/*
214*bbb1b6f9SApple OSS Distributions 	 * timestruct_t (SECONDS, NANOSECONDS) is not available directly nor can a further translation
215*bbb1b6f9SApple OSS Distributions 	 * be specified here. Zero the structure. Use pr_start_tv instead.
216*bbb1b6f9SApple OSS Distributions 	 */
217*bbb1b6f9SApple OSS Distributions 	pr_start = *((timestruc_t *)`dtrace_zero); /* ` */
218*bbb1b6f9SApple OSS Distributions 
219*bbb1b6f9SApple OSS Distributions 	pr_fname = 	P->p_comm;
220*bbb1b6f9SApple OSS Distributions 	pr_psargs = P->p_comm; /* XXX omits command line arguments XXX */
221*bbb1b6f9SApple OSS Distributions 	pr_argc = P->p_argc;
222*bbb1b6f9SApple OSS Distributions 	pr_argv = P->p_dtrace_argv;
223*bbb1b6f9SApple OSS Distributions 	pr_envp = P->p_dtrace_envp;
224*bbb1b6f9SApple OSS Distributions 
225*bbb1b6f9SApple OSS Distributions 	pr_dmodel = (P->p_flag & P_LP64) ? PR_MODEL_LP64 : PR_MODEL_ILP32;
226*bbb1b6f9SApple OSS Distributions 
227*bbb1b6f9SApple OSS Distributions 	pr_taskid = 0;
228*bbb1b6f9SApple OSS Distributions 	pr_projid = 0;
229*bbb1b6f9SApple OSS Distributions 	pr_poolid = 0;
230*bbb1b6f9SApple OSS Distributions 	pr_zoneid = 0;
231*bbb1b6f9SApple OSS Distributions 
232*bbb1b6f9SApple OSS Distributions 	/*
233*bbb1b6f9SApple OSS Distributions 	 * pstats->pstart is a struct timeval: (SECONDS, MICROSECONDS).
234*bbb1b6f9SApple OSS Distributions 	 */
235*bbb1b6f9SApple OSS Distributions 	pr_start_tv = P->p_start;
236*bbb1b6f9SApple OSS Distributions };
237*bbb1b6f9SApple OSS Distributions 
238*bbb1b6f9SApple OSS Distributions /*
239*bbb1b6f9SApple OSS Distributions  * Translate from the kernel's kthread_t structure to a proc(4) psinfo_t
240*bbb1b6f9SApple OSS Distributions  * struct.  Lacking a facility to define one translator only in terms of
241*bbb1b6f9SApple OSS Distributions  * another, we explicitly define each member by using the proc_t-to-psinfo_t
242*bbb1b6f9SApple OSS Distributions  * translator, above; any members added to that translator should also be
243*bbb1b6f9SApple OSS Distributions  * added here.  (The only exception to this is pr_start, which -- due to it
244*bbb1b6f9SApple OSS Distributions  * being a structure -- cannot be defined in terms of a translator at all.)
245*bbb1b6f9SApple OSS Distributions  */
246*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" translator
247*bbb1b6f9SApple OSS Distributions translator psinfo_t < thread_t T > {
248*bbb1b6f9SApple OSS Distributions 	pr_nlwp = xlate <psinfo_t> (T->t_tro->tro_proc).pr_nlwp;
249*bbb1b6f9SApple OSS Distributions 	pr_pid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_pid;
250*bbb1b6f9SApple OSS Distributions 	pr_ppid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_ppid;
251*bbb1b6f9SApple OSS Distributions 	pr_pgid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_pgid;
252*bbb1b6f9SApple OSS Distributions 	pr_sid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_sid;
253*bbb1b6f9SApple OSS Distributions 	pr_uid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_uid;
254*bbb1b6f9SApple OSS Distributions 	pr_euid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_euid;
255*bbb1b6f9SApple OSS Distributions 	pr_gid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_gid;
256*bbb1b6f9SApple OSS Distributions 	pr_egid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_egid;
257*bbb1b6f9SApple OSS Distributions 	pr_addr = xlate <psinfo_t> (T->t_tro->tro_proc).pr_addr;
258*bbb1b6f9SApple OSS Distributions 	pr_ttydev = xlate <psinfo_t> (T->t_tro->tro_proc).pr_ttydev;
259*bbb1b6f9SApple OSS Distributions 	pr_start = xlate <psinfo_t> (T->t_tro->tro_proc).pr_start;
260*bbb1b6f9SApple OSS Distributions 	pr_fname = xlate <psinfo_t> (T->t_tro->tro_proc).pr_fname;
261*bbb1b6f9SApple OSS Distributions 	pr_psargs = xlate <psinfo_t> (T->t_tro->tro_proc).pr_psargs; /* XXX omits command line arguments XXX */
262*bbb1b6f9SApple OSS Distributions 	pr_argc = xlate <psinfo_t> (T->t_tro->tro_proc).pr_argc;
263*bbb1b6f9SApple OSS Distributions 	pr_argv = xlate <psinfo_t> (T->t_tro->tro_proc).pr_argv;
264*bbb1b6f9SApple OSS Distributions 	pr_envp = xlate <psinfo_t> (T->t_tro->tro_proc).pr_envp;
265*bbb1b6f9SApple OSS Distributions 	pr_dmodel = xlate <psinfo_t> (T->t_tro->tro_proc).pr_dmodel;
266*bbb1b6f9SApple OSS Distributions 	pr_taskid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_taskid;
267*bbb1b6f9SApple OSS Distributions 	pr_projid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_projid;
268*bbb1b6f9SApple OSS Distributions 	pr_poolid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_poolid;
269*bbb1b6f9SApple OSS Distributions 	pr_zoneid = xlate <psinfo_t> (T->t_tro->tro_proc).pr_zoneid;
270*bbb1b6f9SApple OSS Distributions 
271*bbb1b6f9SApple OSS Distributions 	pr_start_tv = xlate <psinfo_t> (T->t_tro->tro_proc).pr_start_tv;
272*bbb1b6f9SApple OSS Distributions };
273*bbb1b6f9SApple OSS Distributions 
274*bbb1b6f9SApple OSS Distributions /*
275*bbb1b6f9SApple OSS Distributions  * Translate from the kernel's kthread_t structure to a proc(4) lwpsinfo_t.
276*bbb1b6f9SApple OSS Distributions  * We do not provide support for pr_nice, pr_oldpri, pr_cpu, or pr_pctcpu.
277*bbb1b6f9SApple OSS Distributions  * Also, for the moment, pr_start and pr_time are not supported, but these
278*bbb1b6f9SApple OSS Distributions  * could be supported by DTrace in the future using subroutines.
279*bbb1b6f9SApple OSS Distributions  */
280*bbb1b6f9SApple OSS Distributions 
281*bbb1b6f9SApple OSS Distributions inline processor_t PROCESSOR_NULL = ((processor_t) 0);
282*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" PROCESSOR_NULL
283*bbb1b6f9SApple OSS Distributions 
284*bbb1b6f9SApple OSS Distributions typedef int psetid_t;
285*bbb1b6f9SApple OSS Distributions 
286*bbb1b6f9SApple OSS Distributions typedef struct lwpsinfo {
287*bbb1b6f9SApple OSS Distributions 	int	pr_flag;	/* lwp flags (DEPRECATED; do not use) */
288*bbb1b6f9SApple OSS Distributions 	id_t	pr_lwpid;	/* lwp id */
289*bbb1b6f9SApple OSS Distributions 	uintptr_t pr_addr;	/* internal address of lwp */
290*bbb1b6f9SApple OSS Distributions 	uintptr_t pr_wchan;	/* wait addr for sleeping lwp */
291*bbb1b6f9SApple OSS Distributions 	char	pr_stype;	/* synchronization event type */
292*bbb1b6f9SApple OSS Distributions 	char	pr_state;	/* numeric lwp state */
293*bbb1b6f9SApple OSS Distributions 	char	pr_sname;	/* printable character for pr_state */
294*bbb1b6f9SApple OSS Distributions 	short	pr_syscall;	/* system call number (if in syscall) */
295*bbb1b6f9SApple OSS Distributions 	int	pr_pri;		/* priority, high value is high priority */
296*bbb1b6f9SApple OSS Distributions 	char	pr_clname[8];	/* scheduling class name */
297*bbb1b6f9SApple OSS Distributions 	int	pr_thstate;		/* mach thread scheduler state */
298*bbb1b6f9SApple OSS Distributions 	processorid_t pr_onpro;		/* processor which last ran this lwp */
299*bbb1b6f9SApple OSS Distributions 	processorid_t pr_bindpro;	/* processor to which lwp is bound */
300*bbb1b6f9SApple OSS Distributions 	psetid_t pr_bindpset;	/* processor set to which lwp is bound */
301*bbb1b6f9SApple OSS Distributions } lwpsinfo_t;
302*bbb1b6f9SApple OSS Distributions 
303*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" translator
304*bbb1b6f9SApple OSS Distributions translator lwpsinfo_t < thread_t T > {
305*bbb1b6f9SApple OSS Distributions 	pr_flag = 0; /* lwp flags (DEPRECATED; do not use) */
306*bbb1b6f9SApple OSS Distributions 	pr_lwpid = (id_t)T->thread_id;
307*bbb1b6f9SApple OSS Distributions 	pr_addr = (uintptr_t)T;
308*bbb1b6f9SApple OSS Distributions 	pr_wchan = (uintptr_t)(((uthread_t)&T[1])->uu_wchan);
309*bbb1b6f9SApple OSS Distributions 
310*bbb1b6f9SApple OSS Distributions 	pr_stype = SOBJ_NONE; /* XXX Undefined synch object (or none) XXX */
311*bbb1b6f9SApple OSS Distributions 	pr_state = curproc->p_stat;
312*bbb1b6f9SApple OSS Distributions 	pr_sname = (curproc->p_stat == SIDL) ? 'I' :
313*bbb1b6f9SApple OSS Distributions 			(curproc->p_stat == SRUN) ? 'R' :
314*bbb1b6f9SApple OSS Distributions 			(curproc->p_stat == SSLEEP) ? 'S' :
315*bbb1b6f9SApple OSS Distributions 			(curproc->p_stat == SSTOP) ? 'T' :
316*bbb1b6f9SApple OSS Distributions 			(curproc->p_stat == SZOMB) ? 'Z' : '?';
317*bbb1b6f9SApple OSS Distributions 
318*bbb1b6f9SApple OSS Distributions 	pr_syscall = ((uthread_t)&T[1])->uu_code;
319*bbb1b6f9SApple OSS Distributions 	pr_pri = T->sched_pri;
320*bbb1b6f9SApple OSS Distributions 
321*bbb1b6f9SApple OSS Distributions 	pr_clname = (T->sched_mode & 0x0001) ? "RT" :
322*bbb1b6f9SApple OSS Distributions 			(T->sched_mode & 0x0002) ? "TS" : "SYS";
323*bbb1b6f9SApple OSS Distributions 
324*bbb1b6f9SApple OSS Distributions 	pr_onpro = (T->last_processor == PROCESSOR_NULL) ? -1 : T->last_processor->cpu_id;
325*bbb1b6f9SApple OSS Distributions 	pr_bindpro = -1; /* Darwin does not bind threads to processors. */
326*bbb1b6f9SApple OSS Distributions 	pr_bindpset = -1; /* Darwin does not partition processors. */
327*bbb1b6f9SApple OSS Distributions 	pr_thstate = T->state;
328*bbb1b6f9SApple OSS Distributions };
329*bbb1b6f9SApple OSS Distributions 
330*bbb1b6f9SApple OSS Distributions inline psinfo_t *curpsinfo = xlate <psinfo_t *> (curproc);
331*bbb1b6f9SApple OSS Distributions #pragma D attributes Stable/Stable/Common curpsinfo
332*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" curpsinfo
333*bbb1b6f9SApple OSS Distributions 
334*bbb1b6f9SApple OSS Distributions inline lwpsinfo_t *curlwpsinfo = xlate <lwpsinfo_t *> (curthread);
335*bbb1b6f9SApple OSS Distributions #pragma D attributes Stable/Stable/Common curlwpsinfo
336*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" curlwpsinfo
337*bbb1b6f9SApple OSS Distributions 
338*bbb1b6f9SApple OSS Distributions /* XXX Really want vn_getpath(curproc->p_fd.fd_cdir, , ) but that takes namecache_rw_lock XXX */
339*bbb1b6f9SApple OSS Distributions inline string cwd = curproc->p_fd.fd_cdir->v_name == NULL ?
340*bbb1b6f9SApple OSS Distributions 	"<unknown>" : stringof(curproc->p_fd.fd_cdir->v_name);
341*bbb1b6f9SApple OSS Distributions #pragma D attributes Stable/Stable/Common cwd
342*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" cwd
343*bbb1b6f9SApple OSS Distributions 
344*bbb1b6f9SApple OSS Distributions /* XXX Really want vn_getpath(curproc->p_fd.fd_rdir, , ) but that takes namecache_rw_lock XXX */
345*bbb1b6f9SApple OSS Distributions inline string root = curproc->p_fd.fd_rdir == NULL ? "/" :
346*bbb1b6f9SApple OSS Distributions 	curproc->p_fd.fd_rdir->v_name == NULL ? "<unknown>" :
347*bbb1b6f9SApple OSS Distributions 	stringof(curproc->p_fd.fd_rdir->v_name);
348*bbb1b6f9SApple OSS Distributions #pragma D attributes Stable/Stable/Common root
349*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" root
350*bbb1b6f9SApple OSS Distributions 
351*bbb1b6f9SApple OSS Distributions /* Used with livedump. */
352*bbb1b6f9SApple OSS Distributions inline unsigned DT_HV = 0;
353*bbb1b6f9SApple OSS Distributions #pragma D binding "1.19" DT_HV
354