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 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 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 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 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