xref: /titanic_51/usr/src/cmd/truss/stat.c (revision 8fd04b8338ed5093ec2d1e668fa620b7de44c177)
1*8fd04b83SRoger A. Faulkner /*
2*8fd04b83SRoger A. Faulkner  * CDDL HEADER START
3*8fd04b83SRoger A. Faulkner  *
4*8fd04b83SRoger A. Faulkner  * The contents of this file are subject to the terms of the
5*8fd04b83SRoger A. Faulkner  * Common Development and Distribution License (the "License").
6*8fd04b83SRoger A. Faulkner  * You may not use this file except in compliance with the License.
7*8fd04b83SRoger A. Faulkner  *
8*8fd04b83SRoger A. Faulkner  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*8fd04b83SRoger A. Faulkner  * or http://www.opensolaris.org/os/licensing.
10*8fd04b83SRoger A. Faulkner  * See the License for the specific language governing permissions
11*8fd04b83SRoger A. Faulkner  * and limitations under the License.
12*8fd04b83SRoger A. Faulkner  *
13*8fd04b83SRoger A. Faulkner  * When distributing Covered Code, include this CDDL HEADER in each
14*8fd04b83SRoger A. Faulkner  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*8fd04b83SRoger A. Faulkner  * If applicable, add the following below this CDDL HEADER, with the
16*8fd04b83SRoger A. Faulkner  * fields enclosed by brackets "[]" replaced with your own identifying
17*8fd04b83SRoger A. Faulkner  * information: Portions Copyright [yyyy] [name of copyright owner]
18*8fd04b83SRoger A. Faulkner  *
19*8fd04b83SRoger A. Faulkner  * CDDL HEADER END
20*8fd04b83SRoger A. Faulkner  */
21*8fd04b83SRoger A. Faulkner 
22*8fd04b83SRoger A. Faulkner /*
23*8fd04b83SRoger A. Faulkner  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
24*8fd04b83SRoger A. Faulkner  * Use is subject to license terms.
25*8fd04b83SRoger A. Faulkner  */
26*8fd04b83SRoger A. Faulkner 
27*8fd04b83SRoger A. Faulkner /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28*8fd04b83SRoger A. Faulkner /*	  All Rights Reserved  	*/
29*8fd04b83SRoger A. Faulkner 
30*8fd04b83SRoger A. Faulkner #define	_SYSCALL32
31*8fd04b83SRoger A. Faulkner 
32*8fd04b83SRoger A. Faulkner #include <stdio.h>
33*8fd04b83SRoger A. Faulkner #include <stdlib.h>
34*8fd04b83SRoger A. Faulkner #include <unistd.h>
35*8fd04b83SRoger A. Faulkner #include <sys/types.h>
36*8fd04b83SRoger A. Faulkner #include <sys/stat.h>
37*8fd04b83SRoger A. Faulkner #include <sys/signal.h>
38*8fd04b83SRoger A. Faulkner #include <sys/fault.h>
39*8fd04b83SRoger A. Faulkner #include <sys/syscall.h>
40*8fd04b83SRoger A. Faulkner #include <libproc.h>
41*8fd04b83SRoger A. Faulkner #include "ramdata.h"
42*8fd04b83SRoger A. Faulkner #include "proto.h"
43*8fd04b83SRoger A. Faulkner 
44*8fd04b83SRoger A. Faulkner void	show_stat32(private_t *, long);
45*8fd04b83SRoger A. Faulkner #ifdef _LP64
46*8fd04b83SRoger A. Faulkner void	show_stat64(private_t *, long);
47*8fd04b83SRoger A. Faulkner #endif
48*8fd04b83SRoger A. Faulkner 
49*8fd04b83SRoger A. Faulkner void
50*8fd04b83SRoger A. Faulkner show_stat(private_t *pri, long offset)
51*8fd04b83SRoger A. Faulkner {
52*8fd04b83SRoger A. Faulkner #ifdef _LP64
53*8fd04b83SRoger A. Faulkner 	if (data_model == PR_MODEL_LP64)
54*8fd04b83SRoger A. Faulkner 		show_stat64(pri, offset);
55*8fd04b83SRoger A. Faulkner 	else
56*8fd04b83SRoger A. Faulkner 		show_stat32(pri, offset);
57*8fd04b83SRoger A. Faulkner #else
58*8fd04b83SRoger A. Faulkner 	show_stat32(pri, offset);
59*8fd04b83SRoger A. Faulkner #endif
60*8fd04b83SRoger A. Faulkner }
61*8fd04b83SRoger A. Faulkner 
62*8fd04b83SRoger A. Faulkner void
63*8fd04b83SRoger A. Faulkner show_stat32(private_t *pri, long offset)
64*8fd04b83SRoger A. Faulkner {
65*8fd04b83SRoger A. Faulkner 	struct stat32 statb;
66*8fd04b83SRoger A. Faulkner 	timestruc_t ts;
67*8fd04b83SRoger A. Faulkner 
68*8fd04b83SRoger A. Faulkner 	if (offset != NULL &&
69*8fd04b83SRoger A. Faulkner 	    Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
70*8fd04b83SRoger A. Faulkner 		(void) printf(
71*8fd04b83SRoger A. Faulkner 		    "%s    d=0x%.8X i=%-5u m=0%.6o l=%-2u u=%-5u g=%-5u",
72*8fd04b83SRoger A. Faulkner 		    pri->pname,
73*8fd04b83SRoger A. Faulkner 		    statb.st_dev,
74*8fd04b83SRoger A. Faulkner 		    statb.st_ino,
75*8fd04b83SRoger A. Faulkner 		    statb.st_mode,
76*8fd04b83SRoger A. Faulkner 		    statb.st_nlink,
77*8fd04b83SRoger A. Faulkner 		    statb.st_uid,
78*8fd04b83SRoger A. Faulkner 		    statb.st_gid);
79*8fd04b83SRoger A. Faulkner 
80*8fd04b83SRoger A. Faulkner 		switch (statb.st_mode & S_IFMT) {
81*8fd04b83SRoger A. Faulkner 		case S_IFCHR:
82*8fd04b83SRoger A. Faulkner 		case S_IFBLK:
83*8fd04b83SRoger A. Faulkner 			(void) printf(" rdev=0x%.8X\n", statb.st_rdev);
84*8fd04b83SRoger A. Faulkner 			break;
85*8fd04b83SRoger A. Faulkner 		default:
86*8fd04b83SRoger A. Faulkner 			(void) printf(" sz=%u\n", statb.st_size);
87*8fd04b83SRoger A. Faulkner 			break;
88*8fd04b83SRoger A. Faulkner 		}
89*8fd04b83SRoger A. Faulkner 
90*8fd04b83SRoger A. Faulkner 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_atim);
91*8fd04b83SRoger A. Faulkner 		prtimestruc(pri, "at = ", &ts);
92*8fd04b83SRoger A. Faulkner 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_mtim);
93*8fd04b83SRoger A. Faulkner 		prtimestruc(pri, "mt = ", &ts);
94*8fd04b83SRoger A. Faulkner 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_ctim);
95*8fd04b83SRoger A. Faulkner 		prtimestruc(pri, "ct = ", &ts);
96*8fd04b83SRoger A. Faulkner 
97*8fd04b83SRoger A. Faulkner 		(void) printf(
98*8fd04b83SRoger A. Faulkner 		    "%s    bsz=%-5d blks=%-5d fs=%.*s\n",
99*8fd04b83SRoger A. Faulkner 		    pri->pname,
100*8fd04b83SRoger A. Faulkner 		    statb.st_blksize,
101*8fd04b83SRoger A. Faulkner 		    statb.st_blocks,
102*8fd04b83SRoger A. Faulkner 		    _ST_FSTYPSZ,
103*8fd04b83SRoger A. Faulkner 		    statb.st_fstype);
104*8fd04b83SRoger A. Faulkner 	}
105*8fd04b83SRoger A. Faulkner }
106*8fd04b83SRoger A. Faulkner 
107*8fd04b83SRoger A. Faulkner void
108*8fd04b83SRoger A. Faulkner show_stat64_32(private_t *pri, long offset)
109*8fd04b83SRoger A. Faulkner {
110*8fd04b83SRoger A. Faulkner 	struct stat64_32 statb;
111*8fd04b83SRoger A. Faulkner 	timestruc_t ts;
112*8fd04b83SRoger A. Faulkner 
113*8fd04b83SRoger A. Faulkner 	if (offset != NULL &&
114*8fd04b83SRoger A. Faulkner 	    Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
115*8fd04b83SRoger A. Faulkner 		(void) printf(
116*8fd04b83SRoger A. Faulkner 		    "%s    d=0x%.8X i=%-5llu m=0%.6o l=%-2u u=%-5u g=%-5u",
117*8fd04b83SRoger A. Faulkner 		    pri->pname,
118*8fd04b83SRoger A. Faulkner 		    statb.st_dev,
119*8fd04b83SRoger A. Faulkner 		    (u_longlong_t)statb.st_ino,
120*8fd04b83SRoger A. Faulkner 		    statb.st_mode,
121*8fd04b83SRoger A. Faulkner 		    statb.st_nlink,
122*8fd04b83SRoger A. Faulkner 		    statb.st_uid,
123*8fd04b83SRoger A. Faulkner 		    statb.st_gid);
124*8fd04b83SRoger A. Faulkner 
125*8fd04b83SRoger A. Faulkner 		switch (statb.st_mode & S_IFMT) {
126*8fd04b83SRoger A. Faulkner 		case S_IFCHR:
127*8fd04b83SRoger A. Faulkner 		case S_IFBLK:
128*8fd04b83SRoger A. Faulkner 			(void) printf(" rdev=0x%.8X\n", statb.st_rdev);
129*8fd04b83SRoger A. Faulkner 			break;
130*8fd04b83SRoger A. Faulkner 		default:
131*8fd04b83SRoger A. Faulkner 			(void) printf(" sz=%llu\n", (long long)statb.st_size);
132*8fd04b83SRoger A. Faulkner 			break;
133*8fd04b83SRoger A. Faulkner 		}
134*8fd04b83SRoger A. Faulkner 
135*8fd04b83SRoger A. Faulkner 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_atim);
136*8fd04b83SRoger A. Faulkner 		prtimestruc(pri, "at = ", &ts);
137*8fd04b83SRoger A. Faulkner 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_mtim);
138*8fd04b83SRoger A. Faulkner 		prtimestruc(pri, "mt = ", &ts);
139*8fd04b83SRoger A. Faulkner 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_ctim);
140*8fd04b83SRoger A. Faulkner 		prtimestruc(pri, "ct = ", &ts);
141*8fd04b83SRoger A. Faulkner 
142*8fd04b83SRoger A. Faulkner 		(void) printf("%s    bsz=%-5d blks=%-5lld fs=%.*s\n",
143*8fd04b83SRoger A. Faulkner 		    pri->pname,
144*8fd04b83SRoger A. Faulkner 		    statb.st_blksize,
145*8fd04b83SRoger A. Faulkner 		    (longlong_t)statb.st_blocks,
146*8fd04b83SRoger A. Faulkner 		    _ST_FSTYPSZ,
147*8fd04b83SRoger A. Faulkner 		    statb.st_fstype);
148*8fd04b83SRoger A. Faulkner 	}
149*8fd04b83SRoger A. Faulkner }
150*8fd04b83SRoger A. Faulkner 
151*8fd04b83SRoger A. Faulkner #ifdef _LP64
152*8fd04b83SRoger A. Faulkner void
153*8fd04b83SRoger A. Faulkner show_stat64(private_t *pri, long offset)
154*8fd04b83SRoger A. Faulkner {
155*8fd04b83SRoger A. Faulkner 	struct stat64 statb;
156*8fd04b83SRoger A. Faulkner 
157*8fd04b83SRoger A. Faulkner 	if (offset != NULL &&
158*8fd04b83SRoger A. Faulkner 	    Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
159*8fd04b83SRoger A. Faulkner 		(void) printf(
160*8fd04b83SRoger A. Faulkner 		    "%s    d=0x%.16lX i=%-5lu m=0%.6o l=%-2u u=%-5u g=%-5u",
161*8fd04b83SRoger A. Faulkner 		    pri->pname,
162*8fd04b83SRoger A. Faulkner 		    statb.st_dev,
163*8fd04b83SRoger A. Faulkner 		    statb.st_ino,
164*8fd04b83SRoger A. Faulkner 		    statb.st_mode,
165*8fd04b83SRoger A. Faulkner 		    statb.st_nlink,
166*8fd04b83SRoger A. Faulkner 		    statb.st_uid,
167*8fd04b83SRoger A. Faulkner 		    statb.st_gid);
168*8fd04b83SRoger A. Faulkner 
169*8fd04b83SRoger A. Faulkner 		switch (statb.st_mode & S_IFMT) {
170*8fd04b83SRoger A. Faulkner 		case S_IFCHR:
171*8fd04b83SRoger A. Faulkner 		case S_IFBLK:
172*8fd04b83SRoger A. Faulkner 			(void) printf(" rdev=0x%.16lX\n", statb.st_rdev);
173*8fd04b83SRoger A. Faulkner 			break;
174*8fd04b83SRoger A. Faulkner 		default:
175*8fd04b83SRoger A. Faulkner 			(void) printf(" sz=%lu\n", statb.st_size);
176*8fd04b83SRoger A. Faulkner 			break;
177*8fd04b83SRoger A. Faulkner 		}
178*8fd04b83SRoger A. Faulkner 
179*8fd04b83SRoger A. Faulkner 		prtimestruc(pri, "at = ", (timestruc_t *)&statb.st_atim);
180*8fd04b83SRoger A. Faulkner 		prtimestruc(pri, "mt = ", (timestruc_t *)&statb.st_mtim);
181*8fd04b83SRoger A. Faulkner 		prtimestruc(pri, "ct = ", (timestruc_t *)&statb.st_ctim);
182*8fd04b83SRoger A. Faulkner 
183*8fd04b83SRoger A. Faulkner 		(void) printf(
184*8fd04b83SRoger A. Faulkner 		    "%s    bsz=%-5d blks=%-5ld fs=%.*s\n",
185*8fd04b83SRoger A. Faulkner 		    pri->pname,
186*8fd04b83SRoger A. Faulkner 		    statb.st_blksize,
187*8fd04b83SRoger A. Faulkner 		    statb.st_blocks,
188*8fd04b83SRoger A. Faulkner 		    _ST_FSTYPSZ,
189*8fd04b83SRoger A. Faulkner 		    statb.st_fstype);
190*8fd04b83SRoger A. Faulkner 	}
191*8fd04b83SRoger A. Faulkner }
192*8fd04b83SRoger A. Faulkner #endif	/* _LP64 */
193