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