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