18fd04b83SRoger A. Faulkner /*
28fd04b83SRoger A. Faulkner * CDDL HEADER START
38fd04b83SRoger A. Faulkner *
48fd04b83SRoger A. Faulkner * The contents of this file are subject to the terms of the
58fd04b83SRoger A. Faulkner * Common Development and Distribution License (the "License").
68fd04b83SRoger A. Faulkner * You may not use this file except in compliance with the License.
78fd04b83SRoger A. Faulkner *
88fd04b83SRoger A. Faulkner * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
98fd04b83SRoger A. Faulkner * or http://www.opensolaris.org/os/licensing.
108fd04b83SRoger A. Faulkner * See the License for the specific language governing permissions
118fd04b83SRoger A. Faulkner * and limitations under the License.
128fd04b83SRoger A. Faulkner *
138fd04b83SRoger A. Faulkner * When distributing Covered Code, include this CDDL HEADER in each
148fd04b83SRoger A. Faulkner * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
158fd04b83SRoger A. Faulkner * If applicable, add the following below this CDDL HEADER, with the
168fd04b83SRoger A. Faulkner * fields enclosed by brackets "[]" replaced with your own identifying
178fd04b83SRoger A. Faulkner * information: Portions Copyright [yyyy] [name of copyright owner]
188fd04b83SRoger A. Faulkner *
198fd04b83SRoger A. Faulkner * CDDL HEADER END
208fd04b83SRoger A. Faulkner */
218fd04b83SRoger A. Faulkner
228fd04b83SRoger A. Faulkner /*
238fd04b83SRoger A. Faulkner * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
248fd04b83SRoger A. Faulkner * Use is subject to license terms.
258fd04b83SRoger A. Faulkner */
268fd04b83SRoger A. Faulkner
278fd04b83SRoger A. Faulkner /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
288fd04b83SRoger A. Faulkner /* All Rights Reserved */
298fd04b83SRoger A. Faulkner
308fd04b83SRoger A. Faulkner #define _SYSCALL32
318fd04b83SRoger A. Faulkner
328fd04b83SRoger A. Faulkner #include <stdio.h>
338fd04b83SRoger A. Faulkner #include <stdlib.h>
348fd04b83SRoger A. Faulkner #include <unistd.h>
358fd04b83SRoger A. Faulkner #include <sys/types.h>
368fd04b83SRoger A. Faulkner #include <sys/stat.h>
378fd04b83SRoger A. Faulkner #include <sys/signal.h>
388fd04b83SRoger A. Faulkner #include <sys/fault.h>
398fd04b83SRoger A. Faulkner #include <sys/syscall.h>
408fd04b83SRoger A. Faulkner #include <libproc.h>
418fd04b83SRoger A. Faulkner #include "ramdata.h"
428fd04b83SRoger A. Faulkner #include "proto.h"
438fd04b83SRoger A. Faulkner
448fd04b83SRoger A. Faulkner void show_stat32(private_t *, long);
458fd04b83SRoger A. Faulkner void show_stat64(private_t *, long);
468fd04b83SRoger A. Faulkner
478fd04b83SRoger A. Faulkner void
show_stat(private_t * pri,long offset)488fd04b83SRoger A. Faulkner show_stat(private_t *pri, long offset)
498fd04b83SRoger A. Faulkner {
508fd04b83SRoger A. Faulkner if (data_model == PR_MODEL_LP64)
518fd04b83SRoger A. Faulkner show_stat64(pri, offset);
528fd04b83SRoger A. Faulkner else
538fd04b83SRoger A. Faulkner show_stat32(pri, offset);
548fd04b83SRoger A. Faulkner }
558fd04b83SRoger A. Faulkner
568fd04b83SRoger A. Faulkner void
show_stat32(private_t * pri,long offset)578fd04b83SRoger A. Faulkner show_stat32(private_t *pri, long offset)
588fd04b83SRoger A. Faulkner {
598fd04b83SRoger A. Faulkner struct stat32 statb;
608fd04b83SRoger A. Faulkner timestruc_t ts;
618fd04b83SRoger A. Faulkner
62*27aa4812SToomas Soome if (offset != 0 &&
638fd04b83SRoger A. Faulkner Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
648fd04b83SRoger A. Faulkner (void) printf(
658fd04b83SRoger A. Faulkner "%s d=0x%.8X i=%-5u m=0%.6o l=%-2u u=%-5u g=%-5u",
668fd04b83SRoger A. Faulkner pri->pname,
678fd04b83SRoger A. Faulkner statb.st_dev,
688fd04b83SRoger A. Faulkner statb.st_ino,
698fd04b83SRoger A. Faulkner statb.st_mode,
708fd04b83SRoger A. Faulkner statb.st_nlink,
718fd04b83SRoger A. Faulkner statb.st_uid,
728fd04b83SRoger A. Faulkner statb.st_gid);
738fd04b83SRoger A. Faulkner
748fd04b83SRoger A. Faulkner switch (statb.st_mode & S_IFMT) {
758fd04b83SRoger A. Faulkner case S_IFCHR:
768fd04b83SRoger A. Faulkner case S_IFBLK:
778fd04b83SRoger A. Faulkner (void) printf(" rdev=0x%.8X\n", statb.st_rdev);
788fd04b83SRoger A. Faulkner break;
798fd04b83SRoger A. Faulkner default:
808fd04b83SRoger A. Faulkner (void) printf(" sz=%u\n", statb.st_size);
818fd04b83SRoger A. Faulkner break;
828fd04b83SRoger A. Faulkner }
838fd04b83SRoger A. Faulkner
848fd04b83SRoger A. Faulkner TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_atim);
858fd04b83SRoger A. Faulkner prtimestruc(pri, "at = ", &ts);
868fd04b83SRoger A. Faulkner TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_mtim);
878fd04b83SRoger A. Faulkner prtimestruc(pri, "mt = ", &ts);
888fd04b83SRoger A. Faulkner TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_ctim);
898fd04b83SRoger A. Faulkner prtimestruc(pri, "ct = ", &ts);
908fd04b83SRoger A. Faulkner
918fd04b83SRoger A. Faulkner (void) printf(
928fd04b83SRoger A. Faulkner "%s bsz=%-5d blks=%-5d fs=%.*s\n",
938fd04b83SRoger A. Faulkner pri->pname,
948fd04b83SRoger A. Faulkner statb.st_blksize,
958fd04b83SRoger A. Faulkner statb.st_blocks,
968fd04b83SRoger A. Faulkner _ST_FSTYPSZ,
978fd04b83SRoger A. Faulkner statb.st_fstype);
988fd04b83SRoger A. Faulkner }
998fd04b83SRoger A. Faulkner }
1008fd04b83SRoger A. Faulkner
1018fd04b83SRoger A. Faulkner void
show_stat64_32(private_t * pri,long offset)1028fd04b83SRoger A. Faulkner show_stat64_32(private_t *pri, long offset)
1038fd04b83SRoger A. Faulkner {
1048fd04b83SRoger A. Faulkner struct stat64_32 statb;
1058fd04b83SRoger A. Faulkner timestruc_t ts;
1068fd04b83SRoger A. Faulkner
107*27aa4812SToomas Soome if (offset != 0 &&
1088fd04b83SRoger A. Faulkner Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
1098fd04b83SRoger A. Faulkner (void) printf(
1108fd04b83SRoger A. Faulkner "%s d=0x%.8X i=%-5llu m=0%.6o l=%-2u u=%-5u g=%-5u",
1118fd04b83SRoger A. Faulkner pri->pname,
1128fd04b83SRoger A. Faulkner statb.st_dev,
1138fd04b83SRoger A. Faulkner (u_longlong_t)statb.st_ino,
1148fd04b83SRoger A. Faulkner statb.st_mode,
1158fd04b83SRoger A. Faulkner statb.st_nlink,
1168fd04b83SRoger A. Faulkner statb.st_uid,
1178fd04b83SRoger A. Faulkner statb.st_gid);
1188fd04b83SRoger A. Faulkner
1198fd04b83SRoger A. Faulkner switch (statb.st_mode & S_IFMT) {
1208fd04b83SRoger A. Faulkner case S_IFCHR:
1218fd04b83SRoger A. Faulkner case S_IFBLK:
1228fd04b83SRoger A. Faulkner (void) printf(" rdev=0x%.8X\n", statb.st_rdev);
1238fd04b83SRoger A. Faulkner break;
1248fd04b83SRoger A. Faulkner default:
1258fd04b83SRoger A. Faulkner (void) printf(" sz=%llu\n", (long long)statb.st_size);
1268fd04b83SRoger A. Faulkner break;
1278fd04b83SRoger A. Faulkner }
1288fd04b83SRoger A. Faulkner
1298fd04b83SRoger A. Faulkner TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_atim);
1308fd04b83SRoger A. Faulkner prtimestruc(pri, "at = ", &ts);
1318fd04b83SRoger A. Faulkner TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_mtim);
1328fd04b83SRoger A. Faulkner prtimestruc(pri, "mt = ", &ts);
1338fd04b83SRoger A. Faulkner TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_ctim);
1348fd04b83SRoger A. Faulkner prtimestruc(pri, "ct = ", &ts);
1358fd04b83SRoger A. Faulkner
1368fd04b83SRoger A. Faulkner (void) printf("%s bsz=%-5d blks=%-5lld fs=%.*s\n",
1378fd04b83SRoger A. Faulkner pri->pname,
1388fd04b83SRoger A. Faulkner statb.st_blksize,
1398fd04b83SRoger A. Faulkner (longlong_t)statb.st_blocks,
1408fd04b83SRoger A. Faulkner _ST_FSTYPSZ,
1418fd04b83SRoger A. Faulkner statb.st_fstype);
1428fd04b83SRoger A. Faulkner }
1438fd04b83SRoger A. Faulkner }
1448fd04b83SRoger A. Faulkner
1458fd04b83SRoger A. Faulkner void
show_stat64(private_t * pri,long offset)1468fd04b83SRoger A. Faulkner show_stat64(private_t *pri, long offset)
1478fd04b83SRoger A. Faulkner {
1488fd04b83SRoger A. Faulkner struct stat64 statb;
1498fd04b83SRoger A. Faulkner
150*27aa4812SToomas Soome if (offset != 0 &&
1518fd04b83SRoger A. Faulkner Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
1528fd04b83SRoger A. Faulkner (void) printf(
1538fd04b83SRoger A. Faulkner "%s d=0x%.16lX i=%-5lu m=0%.6o l=%-2u u=%-5u g=%-5u",
1548fd04b83SRoger A. Faulkner pri->pname,
1558fd04b83SRoger A. Faulkner statb.st_dev,
1568fd04b83SRoger A. Faulkner statb.st_ino,
1578fd04b83SRoger A. Faulkner statb.st_mode,
1588fd04b83SRoger A. Faulkner statb.st_nlink,
1598fd04b83SRoger A. Faulkner statb.st_uid,
1608fd04b83SRoger A. Faulkner statb.st_gid);
1618fd04b83SRoger A. Faulkner
1628fd04b83SRoger A. Faulkner switch (statb.st_mode & S_IFMT) {
1638fd04b83SRoger A. Faulkner case S_IFCHR:
1648fd04b83SRoger A. Faulkner case S_IFBLK:
1658fd04b83SRoger A. Faulkner (void) printf(" rdev=0x%.16lX\n", statb.st_rdev);
1668fd04b83SRoger A. Faulkner break;
1678fd04b83SRoger A. Faulkner default:
1688fd04b83SRoger A. Faulkner (void) printf(" sz=%lu\n", statb.st_size);
1698fd04b83SRoger A. Faulkner break;
1708fd04b83SRoger A. Faulkner }
1718fd04b83SRoger A. Faulkner
1728fd04b83SRoger A. Faulkner prtimestruc(pri, "at = ", (timestruc_t *)&statb.st_atim);
1738fd04b83SRoger A. Faulkner prtimestruc(pri, "mt = ", (timestruc_t *)&statb.st_mtim);
1748fd04b83SRoger A. Faulkner prtimestruc(pri, "ct = ", (timestruc_t *)&statb.st_ctim);
1758fd04b83SRoger A. Faulkner
1768fd04b83SRoger A. Faulkner (void) printf(
1778fd04b83SRoger A. Faulkner "%s bsz=%-5d blks=%-5ld fs=%.*s\n",
1788fd04b83SRoger A. Faulkner pri->pname,
1798fd04b83SRoger A. Faulkner statb.st_blksize,
1808fd04b83SRoger A. Faulkner statb.st_blocks,
1818fd04b83SRoger A. Faulkner _ST_FSTYPSZ,
1828fd04b83SRoger A. Faulkner statb.st_fstype);
1838fd04b83SRoger A. Faulkner }
1848fd04b83SRoger A. Faulkner }
185