Merge commit 'b1e7e97d3b60469b243b3b2e22c7d8cbd11c7c90'
[unleashed.git] / usr / src / cmd / truss / ramdata.c
blobabb8ee202bc9e0c5603097d31fa8cb4a7d652540
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
23 * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
26 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
27 /* All Rights Reserved */
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <unistd.h>
32 #include <sys/types.h>
33 #include <libproc.h>
34 #include "ramdata.h"
35 #include "proto.h"
36 #include "htbl.h"
39 * ramdata.c -- read/write data definitions are collected here.
40 * Default initialization of zero applies in all cases.
43 thread_key_t private_key; /* set by thr_keycreate() */
44 char *command; /* name of command ("truss") */
45 int interrupt; /* interrupt signal was received */
46 int sigusr1; /* received SIGUSR1 (release process) */
47 int sfd; /* shared tmp file descriptor */
48 pid_t created; /* if process was created, its process id */
49 uid_t Euid; /* truss's effective uid */
50 uid_t Egid; /* truss's effective gid */
51 uid_t Ruid; /* truss's real uid */
52 uid_t Rgid; /* truss's real gid */
53 prcred_t credentials; /* traced process credentials */
54 prpriv_t *privdata; /* traced process privileges */
55 int istty; /* TRUE iff output is a tty */
56 time_t starttime; /* start time */
58 int Fflag; /* option flags from getopt() */
59 int fflag;
60 int cflag;
61 int aflag;
62 int eflag;
63 int iflag;
64 int lflag;
65 int tflag;
66 int pflag;
67 int sflag;
68 int mflag;
69 int oflag;
70 int vflag;
71 int xflag;
72 int hflag;
74 int dflag;
75 int Dflag;
76 int Eflag;
77 int Tflag;
78 int Sflag;
79 int Mflag;
81 sysset_t trace; /* sys calls to trace */
82 sysset_t traceeven; /* sys calls to trace even if not reported */
83 sysset_t verbose; /* sys calls to be verbose about */
84 sysset_t rawout; /* sys calls to show in raw mode */
85 sigset_t signals; /* signals to trace */
86 fltset_t faults; /* faults to trace */
87 fileset_t readfd; /* read() file descriptors to dump */
88 fileset_t writefd; /* write() file descriptors to dump */
90 mutex_t truss_lock; /* protects almost everything */
91 cond_t truss_cv;
92 mutex_t count_lock; /* lock protecting count struct Cp */
94 htbl_t *fcall_tbl; /* ptr to hash tbl counting function calls */
96 int truss_nlwp; /* number of truss lwps */
97 int truss_maxlwp; /* number of entries in truss_lwpid */
98 lwpid_t *truss_lwpid; /* array of truss lwpid's */
100 struct counts *Cp; /* for counting: malloc() or shared memory */
101 struct global_psinfo *gps; /* contains global process information */
103 struct dynlib *Dynlib; /* for tracing functions in shared libraries */
104 struct dynpat *Dynpat;
105 struct dynpat *Lastpat;
106 struct bkpt **bpt_hashtable; /* breakpoint hash table */
107 uint_t nthr_create; /* number of thr_create() calls seen so far */
108 struct callstack *callstack; /* the callstack array */
109 uint_t nstack; /* number of detected stacks */
110 rd_agent_t *Rdb_agent; /* run-time linker debug handle */
111 td_thragent_t *Thr_agent; /* thread debug handle */
112 int not_consist; /* used while rebuilding breakpoint table */
113 int delete_library; /* used while rebuilding breakpoint table */
115 pid_t ancestor; /* top-level parent process id */
116 int descendent; /* TRUE iff descendent of top level */
117 int is_vfork_child; /* TRUE iff process is a vfork()ed child */
119 int ngrab; /* number of pid's that were grabbed */
121 struct ps_prochandle *Proc; /* global reference to process */
122 int data_model; /* PR_MODEL_LP64 or PR_MODEL_ILP32 */
124 long pagesize; /* bytes per page; should be per-process */
126 int exit_called; /* _exit() syscall was seen */
128 lwpid_t primary_lwp; /* representative lwp on process grab */
130 sysset_t syshang; /* sys calls to make process hang */
131 sigset_t sighang; /* signals to make process hang */
132 fltset_t flthang; /* faults to make process hang */
134 sigset_t emptyset; /* no signals, for thr_sigsetmask() */
135 sigset_t fillset; /* all signals, for thr_sigsetmask() */
137 int leave_hung; /* if TRUE, leave the process hung */