17c478bd9Sstevel@tonic-gate/* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 55518d15bSdp * Common Development and Distribution License (the "License"). 65518d15bSdp * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 21657b1f3dSraf 227c478bd9Sstevel@tonic-gate/* 23*4372c245SVamsi Nagineni * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 247c478bd9Sstevel@tonic-gate * Use is subject to license terms. 257c478bd9Sstevel@tonic-gate */ 267c478bd9Sstevel@tonic-gate 277c478bd9Sstevel@tonic-gate/* 287c478bd9Sstevel@tonic-gate * This file defines the standard set of inlines and translators to be made 297c478bd9Sstevel@tonic-gate * available for all D programs to use to examine process model state. 307c478bd9Sstevel@tonic-gate */ 317c478bd9Sstevel@tonic-gate 327c478bd9Sstevel@tonic-gate#pragma D depends_on module procfs 337c478bd9Sstevel@tonic-gate 347c478bd9Sstevel@tonic-gate/* 357c478bd9Sstevel@tonic-gate * The following miscellaneous constants are used by the proc(4) translators 367c478bd9Sstevel@tonic-gate * defined below. These are assigned the latest values from the system .h's. 377c478bd9Sstevel@tonic-gate */ 387c478bd9Sstevel@tonic-gateinline char SSLEEP = @SSLEEP@; 397c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SSLEEP 407c478bd9Sstevel@tonic-gateinline char SRUN = @SRUN@; 417c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SRUN 427c478bd9Sstevel@tonic-gateinline char SZOMB = @SZOMB@; 437c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SZOMB 447c478bd9Sstevel@tonic-gateinline char SSTOP = @SSTOP@; 457c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SSTOP 467c478bd9Sstevel@tonic-gateinline char SIDL = @SIDL@; 477c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SIDL 487c478bd9Sstevel@tonic-gateinline char SONPROC = @SONPROC@; 497c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SONPROC 50c97ad5cdSakolbinline char SWAIT = @SWAIT@; 51c97ad5cdSakolb#pragma D binding "1.0" SWAIT 527c478bd9Sstevel@tonic-gate 537c478bd9Sstevel@tonic-gateinline int PR_STOPPED = @PR_STOPPED@; 547c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_STOPPED 557c478bd9Sstevel@tonic-gateinline int PR_ISTOP = @PR_ISTOP@; 567c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_ISTOP 577c478bd9Sstevel@tonic-gateinline int PR_DSTOP = @PR_DSTOP@; 587c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_DSTOP 597c478bd9Sstevel@tonic-gateinline int PR_STEP = @PR_STEP@; 607c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_STEP 617c478bd9Sstevel@tonic-gateinline int PR_ASLEEP = @PR_ASLEEP@; 627c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_ASLEEP 637c478bd9Sstevel@tonic-gateinline int PR_PCINVAL = @PR_PCINVAL@; 647c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_PCINVAL 657c478bd9Sstevel@tonic-gateinline int PR_ASLWP = @PR_ASLWP@; 667c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_ASLWP 677c478bd9Sstevel@tonic-gateinline int PR_AGENT = @PR_AGENT@; 687c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_AGENT 697c478bd9Sstevel@tonic-gateinline int PR_DETACH = @PR_DETACH@; 707c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_DETACH 717c478bd9Sstevel@tonic-gateinline int PR_DAEMON = @PR_DAEMON@; 727c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_DAEMON 73657b1f3dSrafinline int PR_IDLE = @PR_IDLE@; 74657b1f3dSraf#pragma D binding "1.4" PR_IDLE 757c478bd9Sstevel@tonic-gateinline int PR_ISSYS = @PR_ISSYS@; 767c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_ISSYS 777c478bd9Sstevel@tonic-gateinline int PR_VFORKP = @PR_VFORKP@; 787c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_VFORKP 797c478bd9Sstevel@tonic-gateinline int PR_ORPHAN = @PR_ORPHAN@; 807c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_ORPHAN 81657b1f3dSrafinline int PR_NOSIGCHLD = @PR_NOSIGCHLD@; 82657b1f3dSraf#pragma D binding "1.4" PR_NOSIGCHLD 83657b1f3dSrafinline int PR_WAITPID = @PR_WAITPID@; 84657b1f3dSraf#pragma D binding "1.4" PR_WAITPID 857c478bd9Sstevel@tonic-gateinline int PR_FORK = @PR_FORK@; 867c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_FORK 877c478bd9Sstevel@tonic-gateinline int PR_RLC = @PR_RLC@; 887c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_RLC 897c478bd9Sstevel@tonic-gateinline int PR_KLC = @PR_KLC@; 907c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_KLC 917c478bd9Sstevel@tonic-gateinline int PR_ASYNC = @PR_ASYNC@; 927c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_ASYNC 937c478bd9Sstevel@tonic-gateinline int PR_MSACCT = @PR_MSACCT@; 947c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_MSACCT 957c478bd9Sstevel@tonic-gateinline int PR_BPTADJ = @PR_BPTADJ@; 967c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_BPTADJ 977c478bd9Sstevel@tonic-gateinline int PR_PTRACE = @PR_PTRACE@; 987c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_PTRACE 997c478bd9Sstevel@tonic-gateinline int PR_MSFORK = @PR_MSFORK@; 1007c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_MSFORK 1017c478bd9Sstevel@tonic-gate 1027c478bd9Sstevel@tonic-gateinline char PR_MODEL_ILP32 = @PR_MODEL_ILP32@; 1037c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_MODEL_ILP32 1047c478bd9Sstevel@tonic-gateinline char PR_MODEL_LP64 = @PR_MODEL_LP64@; 1057c478bd9Sstevel@tonic-gate#pragma D binding "1.0" PR_MODEL_LP64 1067c478bd9Sstevel@tonic-gate 1077c478bd9Sstevel@tonic-gateinline char SOBJ_NONE = @SOBJ_NONE@; 1087c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SOBJ_NONE 1097c478bd9Sstevel@tonic-gateinline char SOBJ_MUTEX = @SOBJ_MUTEX@; 1107c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SOBJ_MUTEX 1117c478bd9Sstevel@tonic-gateinline char SOBJ_RWLOCK = @SOBJ_RWLOCK@; 1127c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SOBJ_RWLOCK 1137c478bd9Sstevel@tonic-gateinline char SOBJ_CV = @SOBJ_CV@; 1147c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SOBJ_CV 1157c478bd9Sstevel@tonic-gateinline char SOBJ_SEMA = @SOBJ_SEMA@; 1167c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SOBJ_SEMA 1177c478bd9Sstevel@tonic-gateinline char SOBJ_USER = @SOBJ_USER@; 1187c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SOBJ_USER 1197c478bd9Sstevel@tonic-gateinline char SOBJ_USER_PI = @SOBJ_USER_PI@; 1207c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SOBJ_USER_PI 1217c478bd9Sstevel@tonic-gateinline char SOBJ_SHUTTLE = @SOBJ_SHUTTLE@; 1227c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SOBJ_SHUTTLE 1237c478bd9Sstevel@tonic-gate 1247c478bd9Sstevel@tonic-gateinline int SI_USER = @SI_USER@; 1257c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SI_USER 1267c478bd9Sstevel@tonic-gateinline int SI_LWP = @SI_LWP@; 1277c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SI_LWP 1287c478bd9Sstevel@tonic-gateinline int SI_QUEUE = @SI_QUEUE@; 1297c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SI_QUEUE 1307c478bd9Sstevel@tonic-gateinline int SI_TIMER = @SI_TIMER@; 1317c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SI_TIMER 1327c478bd9Sstevel@tonic-gateinline int SI_ASYNCIO = @SI_ASYNCIO@; 1337c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SI_ASYNCIO 1347c478bd9Sstevel@tonic-gateinline int SI_MESGQ = @SI_MESGQ@; 1357c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SI_MESGQ 1367c478bd9Sstevel@tonic-gateinline int SI_RCTL = @SI_RCTL@; 1377c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SI_RCTL 1387c478bd9Sstevel@tonic-gateinline int ILL_ILLOPC = @ILL_ILLOPC@; 1397c478bd9Sstevel@tonic-gate#pragma D binding "1.0" ILL_ILLOPC 1407c478bd9Sstevel@tonic-gateinline int ILL_ILLOPN = @ILL_ILLOPN@; 1417c478bd9Sstevel@tonic-gate#pragma D binding "1.0" ILL_ILLOPN 1427c478bd9Sstevel@tonic-gateinline int ILL_ILLADR = @ILL_ILLADR@; 1437c478bd9Sstevel@tonic-gate#pragma D binding "1.0" ILL_ILLADR 1447c478bd9Sstevel@tonic-gateinline int ILL_ILLTRP = @ILL_ILLTRP@; 1457c478bd9Sstevel@tonic-gate#pragma D binding "1.0" ILL_ILLTRP 1467c478bd9Sstevel@tonic-gateinline int ILL_PRVOPC = @ILL_PRVOPC@; 1477c478bd9Sstevel@tonic-gate#pragma D binding "1.0" ILL_PRVOPC 1487c478bd9Sstevel@tonic-gateinline int ILL_PRVREG = @ILL_PRVREG@; 1497c478bd9Sstevel@tonic-gate#pragma D binding "1.0" ILL_PRVREG 1507c478bd9Sstevel@tonic-gateinline int ILL_COPROC = @ILL_COPROC@; 1517c478bd9Sstevel@tonic-gate#pragma D binding "1.0" ILL_COPROC 1527c478bd9Sstevel@tonic-gateinline int ILL_BADSTK = @ILL_BADSTK@; 1537c478bd9Sstevel@tonic-gate#pragma D binding "1.0" ILL_BADSTK 1547c478bd9Sstevel@tonic-gateinline int FPE_INTDIV = @FPE_INTDIV@; 1557c478bd9Sstevel@tonic-gate#pragma D binding "1.0" FPE_INTDIV 1567c478bd9Sstevel@tonic-gateinline int FPE_INTOVF = @FPE_INTOVF@; 1577c478bd9Sstevel@tonic-gate#pragma D binding "1.0" FPE_INTOVF 1587c478bd9Sstevel@tonic-gateinline int FPE_FLTDIV = @FPE_FLTDIV@; 1597c478bd9Sstevel@tonic-gate#pragma D binding "1.0" FPE_FLTDIV 1607c478bd9Sstevel@tonic-gateinline int FPE_FLTOVF = @FPE_FLTOVF@; 1617c478bd9Sstevel@tonic-gate#pragma D binding "1.0" FPE_FLTOVF 1627c478bd9Sstevel@tonic-gateinline int FPE_FLTUND = @FPE_FLTUND@; 1637c478bd9Sstevel@tonic-gate#pragma D binding "1.0" FPE_FLTUND 1647c478bd9Sstevel@tonic-gateinline int FPE_FLTRES = @FPE_FLTRES@; 1657c478bd9Sstevel@tonic-gate#pragma D binding "1.0" FPE_FLTRES 1667c478bd9Sstevel@tonic-gateinline int FPE_FLTINV = @FPE_FLTINV@; 1677c478bd9Sstevel@tonic-gate#pragma D binding "1.0" FPE_FLTINV 1687c478bd9Sstevel@tonic-gateinline int FPE_FLTSUB = @FPE_FLTSUB@; 1697c478bd9Sstevel@tonic-gate#pragma D binding "1.0" FPE_FLTSUB 1707c478bd9Sstevel@tonic-gateinline int SEGV_MAPERR = @SEGV_MAPERR@; 1717c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SEGV_MAPERR 1727c478bd9Sstevel@tonic-gateinline int SEGV_ACCERR = @SEGV_ACCERR@; 1737c478bd9Sstevel@tonic-gate#pragma D binding "1.0" SEGV_ACCERR 1747c478bd9Sstevel@tonic-gateinline int BUS_ADRALN = @BUS_ADRALN@; 1757c478bd9Sstevel@tonic-gate#pragma D binding "1.0" BUS_ADRALN 1767c478bd9Sstevel@tonic-gateinline int BUS_ADRERR = @BUS_ADRERR@; 1777c478bd9Sstevel@tonic-gate#pragma D binding "1.0" BUS_ADRERR 1787c478bd9Sstevel@tonic-gateinline int BUS_OBJERR = @BUS_OBJERR@; 1797c478bd9Sstevel@tonic-gate#pragma D binding "1.0" BUS_OBJERR 1807c478bd9Sstevel@tonic-gateinline int TRAP_BRKPT = @TRAP_BRKPT@; 1817c478bd9Sstevel@tonic-gate#pragma D binding "1.0" TRAP_BRKPT 1827c478bd9Sstevel@tonic-gateinline int TRAP_TRACE = @TRAP_TRACE@; 1837c478bd9Sstevel@tonic-gate#pragma D binding "1.0" TRAP_TRACE 1847c478bd9Sstevel@tonic-gateinline int CLD_EXITED = @CLD_EXITED@; 1857c478bd9Sstevel@tonic-gate#pragma D binding "1.0" CLD_EXITED 1867c478bd9Sstevel@tonic-gateinline int CLD_KILLED = @CLD_KILLED@; 1877c478bd9Sstevel@tonic-gate#pragma D binding "1.0" CLD_KILLED 1887c478bd9Sstevel@tonic-gateinline int CLD_DUMPED = @CLD_DUMPED@; 1897c478bd9Sstevel@tonic-gate#pragma D binding "1.0" CLD_DUMPED 1907c478bd9Sstevel@tonic-gateinline int CLD_TRAPPED = @CLD_TRAPPED@; 1917c478bd9Sstevel@tonic-gate#pragma D binding "1.0" CLD_TRAPPED 1927c478bd9Sstevel@tonic-gateinline int CLD_STOPPED = @CLD_STOPPED@; 1937c478bd9Sstevel@tonic-gate#pragma D binding "1.0" CLD_STOPPED 1947c478bd9Sstevel@tonic-gateinline int CLD_CONTINUED = @CLD_CONTINUED@; 1957c478bd9Sstevel@tonic-gate#pragma D binding "1.0" CLD_CONTINUED 1967c478bd9Sstevel@tonic-gateinline int POLL_IN = @POLL_IN@; 1977c478bd9Sstevel@tonic-gate#pragma D binding "1.0" POLL_IN 1987c478bd9Sstevel@tonic-gateinline int POLL_OUT = @POLL_OUT@; 1997c478bd9Sstevel@tonic-gate#pragma D binding "1.0" POLL_OUT 2007c478bd9Sstevel@tonic-gateinline int POLL_MSG = @POLL_MSG@; 2017c478bd9Sstevel@tonic-gate#pragma D binding "1.0" POLL_MSG 2027c478bd9Sstevel@tonic-gateinline int POLL_ERR = @POLL_ERR@; 2037c478bd9Sstevel@tonic-gate#pragma D binding "1.0" POLL_ERR 2047c478bd9Sstevel@tonic-gateinline int POLL_PRI = @POLL_PRI@; 2057c478bd9Sstevel@tonic-gate#pragma D binding "1.0" POLL_PRI 2067c478bd9Sstevel@tonic-gateinline int POLL_HUP = @POLL_HUP@; 2077c478bd9Sstevel@tonic-gate#pragma D binding "1.0" POLL_HUP 2087c478bd9Sstevel@tonic-gate 2097c478bd9Sstevel@tonic-gate/* 2107c478bd9Sstevel@tonic-gate * Translate from the kernel's proc_t structure to a proc(4) psinfo_t struct. 2117c478bd9Sstevel@tonic-gate * We do not provide support for pr_size, pr_rssize, pr_pctcpu, and pr_pctmem. 2127c478bd9Sstevel@tonic-gate * We also do not fill in pr_lwp (the lwpsinfo_t for the representative LWP) 2137c478bd9Sstevel@tonic-gate * because we do not have the ability to select and stop any representative. 2147c478bd9Sstevel@tonic-gate * Also, for the moment, pr_wstat, pr_time, and pr_ctime are not supported, 2157c478bd9Sstevel@tonic-gate * but these could be supported by DTrace in the future using subroutines. 2167c478bd9Sstevel@tonic-gate * Note that any member added to this translator should also be added to the 2177c478bd9Sstevel@tonic-gate * kthread_t-to-psinfo_t translator, below. 2187c478bd9Sstevel@tonic-gate */ 2197c478bd9Sstevel@tonic-gate#pragma D binding "1.0" translator 2207c478bd9Sstevel@tonic-gatetranslator psinfo_t < proc_t *T > { 2217c478bd9Sstevel@tonic-gate pr_nlwp = T->p_lwpcnt; 2227c478bd9Sstevel@tonic-gate pr_pid = T->p_pidp->pid_id; 2237c478bd9Sstevel@tonic-gate pr_ppid = T->p_ppid; 2247c478bd9Sstevel@tonic-gate pr_pgid = T->p_pgidp->pid_id; 2257c478bd9Sstevel@tonic-gate pr_sid = T->p_sessp->s_sidp->pid_id; 2267c478bd9Sstevel@tonic-gate pr_uid = T->p_cred->cr_ruid; 2277c478bd9Sstevel@tonic-gate pr_euid = T->p_cred->cr_uid; 2287c478bd9Sstevel@tonic-gate pr_gid = T->p_cred->cr_rgid; 2297c478bd9Sstevel@tonic-gate pr_egid = T->p_cred->cr_gid; 2307c478bd9Sstevel@tonic-gate pr_addr = (uintptr_t)T; 2317c478bd9Sstevel@tonic-gate 2327c478bd9Sstevel@tonic-gate pr_ttydev = (T->p_sessp->s_vp == NULL) ? (dev_t)-1 : 2337c478bd9Sstevel@tonic-gate (T->p_sessp->s_dev == `rwsconsdev) ? `uconsdev : 2347c478bd9Sstevel@tonic-gate (T->p_sessp->s_dev == `rconsdev) ? `uconsdev : T->p_sessp->s_dev; 2357c478bd9Sstevel@tonic-gate 2367c478bd9Sstevel@tonic-gate pr_start = T->p_user.u_start; 2377c478bd9Sstevel@tonic-gate pr_fname = T->p_user.u_comm; 2387c478bd9Sstevel@tonic-gate pr_psargs = T->p_user.u_psargs; 2397c478bd9Sstevel@tonic-gate pr_argc = T->p_user.u_argc; 2407c478bd9Sstevel@tonic-gate pr_argv = T->p_user.u_argv; 2417c478bd9Sstevel@tonic-gate pr_envp = T->p_user.u_envp; 2427c478bd9Sstevel@tonic-gate 2437c478bd9Sstevel@tonic-gate pr_dmodel = (T->p_model == @DATAMODEL_ILP32@) ? 2447c478bd9Sstevel@tonic-gate PR_MODEL_ILP32 : PR_MODEL_LP64; 2457c478bd9Sstevel@tonic-gate 2467c478bd9Sstevel@tonic-gate pr_taskid = T->p_task->tk_tkid; 2477c478bd9Sstevel@tonic-gate pr_projid = T->p_task->tk_proj->kpj_id; 2487c478bd9Sstevel@tonic-gate pr_poolid = T->p_pool->pool_id; 2497c478bd9Sstevel@tonic-gate pr_zoneid = T->p_zone->zone_id; 250*4372c245SVamsi Nagineni pr_contract = (T->p_ct_process == NULL) ? -1 : 251*4372c245SVamsi Nagineni T->p_ct_process->conp_contract.ct_id; 2527c478bd9Sstevel@tonic-gate}; 2537c478bd9Sstevel@tonic-gate 2547c478bd9Sstevel@tonic-gate/* 2557c478bd9Sstevel@tonic-gate * Translate from the kernel's kthread_t structure to a proc(4) psinfo_t 2567c478bd9Sstevel@tonic-gate * struct. Lacking a facility to define one translator only in terms of 2577c478bd9Sstevel@tonic-gate * another, we explicitly define each member by using the proc_t-to-psinfo_t 2587c478bd9Sstevel@tonic-gate * translator, above; any members added to that translator should also be 2597c478bd9Sstevel@tonic-gate * added here. (The only exception to this is pr_start, which -- due to it 2607c478bd9Sstevel@tonic-gate * being a structure -- cannot be defined in terms of a translator at all.) 2617c478bd9Sstevel@tonic-gate */ 2627c478bd9Sstevel@tonic-gate#pragma D binding "1.0" translator 2637c478bd9Sstevel@tonic-gatetranslator psinfo_t < kthread_t *T > { 2647c478bd9Sstevel@tonic-gate pr_nlwp = xlate <psinfo_t> (T->t_procp).pr_nlwp; 2657c478bd9Sstevel@tonic-gate pr_pid = xlate <psinfo_t> (T->t_procp).pr_pid; 2667c478bd9Sstevel@tonic-gate pr_ppid = xlate <psinfo_t> (T->t_procp).pr_ppid; 2677c478bd9Sstevel@tonic-gate pr_pgid = xlate <psinfo_t> (T->t_procp).pr_pgid; 2687c478bd9Sstevel@tonic-gate pr_sid = xlate <psinfo_t> (T->t_procp).pr_sid; 2697c478bd9Sstevel@tonic-gate pr_uid = xlate <psinfo_t> (T->t_procp).pr_uid; 2707c478bd9Sstevel@tonic-gate pr_euid = xlate <psinfo_t> (T->t_procp).pr_euid; 2717c478bd9Sstevel@tonic-gate pr_gid = xlate <psinfo_t> (T->t_procp).pr_gid; 2727c478bd9Sstevel@tonic-gate pr_egid = xlate <psinfo_t> (T->t_procp).pr_egid; 2737c478bd9Sstevel@tonic-gate pr_addr = xlate <psinfo_t> (T->t_procp).pr_addr; 2747c478bd9Sstevel@tonic-gate pr_ttydev = xlate <psinfo_t> (T->t_procp).pr_ttydev; 2757c478bd9Sstevel@tonic-gate pr_start = (timestruc_t)xlate <psinfo_t> (T->t_procp).pr_start; 2767c478bd9Sstevel@tonic-gate pr_fname = xlate <psinfo_t> (T->t_procp).pr_fname; 2777c478bd9Sstevel@tonic-gate pr_psargs = xlate <psinfo_t> (T->t_procp).pr_psargs; 2787c478bd9Sstevel@tonic-gate pr_argc = xlate <psinfo_t> (T->t_procp).pr_argc; 2797c478bd9Sstevel@tonic-gate pr_argv = xlate <psinfo_t> (T->t_procp).pr_argv; 2807c478bd9Sstevel@tonic-gate pr_envp = xlate <psinfo_t> (T->t_procp).pr_envp; 2817c478bd9Sstevel@tonic-gate pr_dmodel = xlate <psinfo_t> (T->t_procp).pr_dmodel; 2827c478bd9Sstevel@tonic-gate pr_taskid = xlate <psinfo_t> (T->t_procp).pr_taskid; 2837c478bd9Sstevel@tonic-gate pr_projid = xlate <psinfo_t> (T->t_procp).pr_projid; 2847c478bd9Sstevel@tonic-gate pr_poolid = xlate <psinfo_t> (T->t_procp).pr_poolid; 2857c478bd9Sstevel@tonic-gate pr_zoneid = xlate <psinfo_t> (T->t_procp).pr_zoneid; 286*4372c245SVamsi Nagineni pr_contract = xlate <psinfo_t> (T->t_procp).pr_contract; 2877c478bd9Sstevel@tonic-gate}; 2887c478bd9Sstevel@tonic-gate 2897c478bd9Sstevel@tonic-gate/* 2907c478bd9Sstevel@tonic-gate * Translate from the kernel's kthread_t structure to a proc(4) lwpsinfo_t. 2917c478bd9Sstevel@tonic-gate * We do not provide support for pr_nice, pr_oldpri, pr_cpu, or pr_pctcpu. 2927c478bd9Sstevel@tonic-gate * Also, for the moment, pr_start and pr_time are not supported, but these 2937c478bd9Sstevel@tonic-gate * could be supported by DTrace in the future using subroutines. 2947c478bd9Sstevel@tonic-gate */ 2957c478bd9Sstevel@tonic-gate#pragma D binding "1.0" translator 2967c478bd9Sstevel@tonic-gatetranslator lwpsinfo_t < kthread_t *T > { 2977c478bd9Sstevel@tonic-gate pr_flag = ((T->t_state == @TS_STOPPED@) ? (PR_STOPPED | 2987c478bd9Sstevel@tonic-gate ((!(T->t_schedflag & @TS_PSTART@)) ? PR_ISTOP : 0)) : 2997c478bd9Sstevel@tonic-gate ((T->t_proc_flag & @TP_PRVSTOP@) ? PR_STOPPED | PR_ISTOP : 0)) | 3007c478bd9Sstevel@tonic-gate ((T == T->t_procp->p_agenttp) ? PR_AGENT : 0) | 3017c478bd9Sstevel@tonic-gate ((!(T->t_proc_flag & @TP_TWAIT@)) ? PR_DETACH : 0) | 3027c478bd9Sstevel@tonic-gate ((T->t_proc_flag & @TP_DAEMON@) ? PR_DAEMON : 0) | 303657b1f3dSraf ((T->t_procp->p_pidflag & @CLDNOSIGCHLD@) ? PR_NOSIGCHLD : 0) | 304657b1f3dSraf ((T->t_procp->p_pidflag & @CLDWAITPID@) ? PR_WAITPID : 0) | 3057c478bd9Sstevel@tonic-gate ((T->t_procp->p_proc_flag & @P_PR_FORK@) ? PR_FORK : 0) | 3067c478bd9Sstevel@tonic-gate ((T->t_procp->p_proc_flag & @P_PR_RUNLCL@) ? PR_RLC : 0) | 3077c478bd9Sstevel@tonic-gate ((T->t_procp->p_proc_flag & @P_PR_KILLCL@) ? PR_KLC : 0) | 3087c478bd9Sstevel@tonic-gate ((T->t_procp->p_proc_flag & @P_PR_ASYNC@) ? PR_ASYNC : 0) | 3097c478bd9Sstevel@tonic-gate ((T->t_procp->p_proc_flag & @P_PR_BPTADJ@) ? PR_BPTADJ : 0) | 3107c478bd9Sstevel@tonic-gate ((T->t_procp->p_proc_flag & @P_PR_PTRACE@) ? PR_PTRACE : 0) | 3117c478bd9Sstevel@tonic-gate ((T->t_procp->p_flag & @SMSACCT@) ? PR_MSACCT : 0) | 3127c478bd9Sstevel@tonic-gate ((T->t_procp->p_flag & @SMSFORK@) ? PR_MSFORK : 0) | 3137c478bd9Sstevel@tonic-gate ((T->t_procp->p_flag & @SVFWAIT@) ? PR_VFORKP : 0) | 3147c478bd9Sstevel@tonic-gate (((T->t_procp->p_flag & @SSYS@) || 3157c478bd9Sstevel@tonic-gate (T->t_procp->p_as == &`kas)) ? PR_ISSYS : 0) | 3167c478bd9Sstevel@tonic-gate ((T == T->t_cpu->cpu_idle_thread) ? PR_IDLE : 0); 3177c478bd9Sstevel@tonic-gate 3187c478bd9Sstevel@tonic-gate pr_lwpid = T->t_tid; 3197c478bd9Sstevel@tonic-gate pr_addr = (uintptr_t)T; 3207c478bd9Sstevel@tonic-gate pr_wchan = (uintptr_t)T->t_lwpchan.lc_wchan; 3217c478bd9Sstevel@tonic-gate pr_stype = T->t_sobj_ops ? T->t_sobj_ops->sobj_type : 0; 3227c478bd9Sstevel@tonic-gate 3237c478bd9Sstevel@tonic-gate pr_state = (T->t_proc_flag & @TP_PRVSTOP@) ? SSTOP : 3247c478bd9Sstevel@tonic-gate (T->t_state == @TS_SLEEP@) ? SSLEEP : 3257c478bd9Sstevel@tonic-gate (T->t_state == @TS_RUN@) ? SRUN : 3267c478bd9Sstevel@tonic-gate (T->t_state == @TS_ONPROC@) ? SONPROC : 3277c478bd9Sstevel@tonic-gate (T->t_state == @TS_ZOMB@) ? SZOMB : 328c97ad5cdSakolb (T->t_state == @TS_STOPPED@) ? SSTOP : 329c97ad5cdSakolb (T->t_state == @TS_WAIT@) ? SWAIT : 0; 3307c478bd9Sstevel@tonic-gate 3317c478bd9Sstevel@tonic-gate pr_sname = (T->t_proc_flag & @TP_PRVSTOP@) ? 'T' : 3327c478bd9Sstevel@tonic-gate (T->t_state == @TS_SLEEP@) ? 'S' : 3337c478bd9Sstevel@tonic-gate (T->t_state == @TS_RUN@) ? 'R' : 3347c478bd9Sstevel@tonic-gate (T->t_state == @TS_ONPROC@) ? 'O' : 3357c478bd9Sstevel@tonic-gate (T->t_state == @TS_ZOMB@) ? 'Z' : 336c97ad5cdSakolb (T->t_state == @TS_STOPPED@) ? 'T' : 337c97ad5cdSakolb (T->t_state == @TS_WAIT@) ? 'W' : '?'; 3387c478bd9Sstevel@tonic-gate 3397c478bd9Sstevel@tonic-gate pr_syscall = T->t_sysnum; 3407c478bd9Sstevel@tonic-gate pr_pri = T->t_pri; 3417c478bd9Sstevel@tonic-gate pr_clname = `sclass[T->t_cid].cl_name; 3427c478bd9Sstevel@tonic-gate pr_onpro = T->t_cpu->cpu_id; 3437c478bd9Sstevel@tonic-gate pr_bindpro = T->t_bind_cpu; 3447c478bd9Sstevel@tonic-gate pr_bindpset = T->t_bind_pset; 345c6402783Sakolb pr_lgrp = T->t_lpl->lpl_lgrpid; 3467c478bd9Sstevel@tonic-gate}; 3477c478bd9Sstevel@tonic-gate 3487c478bd9Sstevel@tonic-gateinline psinfo_t *curpsinfo = xlate <psinfo_t *> (curthread->t_procp); 3497c478bd9Sstevel@tonic-gate#pragma D attributes Stable/Stable/Common curpsinfo 3507c478bd9Sstevel@tonic-gate#pragma D binding "1.0" curpsinfo 3517c478bd9Sstevel@tonic-gate 3527c478bd9Sstevel@tonic-gateinline lwpsinfo_t *curlwpsinfo = xlate <lwpsinfo_t *> (curthread); 3537c478bd9Sstevel@tonic-gate#pragma D attributes Stable/Stable/Common curlwpsinfo 3547c478bd9Sstevel@tonic-gate#pragma D binding "1.0" curlwpsinfo 3557c478bd9Sstevel@tonic-gate 3567c478bd9Sstevel@tonic-gateinline string cwd = curthread->t_procp->p_user.u_cdir->v_path == NULL ? 3577c478bd9Sstevel@tonic-gate "<unknown>" : stringof(curthread->t_procp->p_user.u_cdir->v_path); 3587c478bd9Sstevel@tonic-gate#pragma D attributes Stable/Stable/Common cwd 3597c478bd9Sstevel@tonic-gate#pragma D binding "1.0" cwd 3607c478bd9Sstevel@tonic-gate 3617c478bd9Sstevel@tonic-gateinline string root = curthread->t_procp->p_user.u_rdir == NULL ? "/" : 3627c478bd9Sstevel@tonic-gate curthread->t_procp->p_user.u_rdir->v_path == NULL ? "<unknown>" : 3637c478bd9Sstevel@tonic-gate stringof(curthread->t_procp->p_user.u_rdir->v_path); 3647c478bd9Sstevel@tonic-gate#pragma D attributes Stable/Stable/Common root 3657c478bd9Sstevel@tonic-gate#pragma D binding "1.0" root 366