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
show_stat(private_t * pri,long offset)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
show_stat32(private_t * pri,long offset)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
show_stat64_32(private_t * pri,long offset)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
show_stat64(private_t * pri,long offset)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