Home | History | Annotate | Download | only in truss
      1  0  stevel /*
      2  0  stevel  * CDDL HEADER START
      3  0  stevel  *
      4  0  stevel  * The contents of this file are subject to the terms of the
      5  0  stevel  * Common Development and Distribution License, Version 1.0 only
      6  0  stevel  * (the "License").  You may not use this file except in compliance
      7  0  stevel  * with the License.
      8  0  stevel  *
      9  0  stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  0  stevel  * or http://www.opensolaris.org/os/licensing.
     11  0  stevel  * See the License for the specific language governing permissions
     12  0  stevel  * and limitations under the License.
     13  0  stevel  *
     14  0  stevel  * When distributing Covered Code, include this CDDL HEADER in each
     15  0  stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  0  stevel  * If applicable, add the following below this CDDL HEADER, with the
     17  0  stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     18  0  stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  0  stevel  *
     20  0  stevel  * CDDL HEADER END
     21  0  stevel  */
     22  0  stevel /*
     23  0  stevel  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
     24  0  stevel  * Use is subject to license terms.
     25  0  stevel  */
     26  0  stevel 
     27  0  stevel /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
     28  0  stevel /*	  All Rights Reserved  	*/
     29  0  stevel 
     30  0  stevel 
     31  0  stevel #pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.3	*/
     32  0  stevel 
     33  0  stevel #define	_SYSCALL32
     34  0  stevel 
     35  0  stevel #include <stdio.h>
     36  0  stevel #include <stdlib.h>
     37  0  stevel #include <unistd.h>
     38  0  stevel #include <sys/types.h>
     39  0  stevel #include <sys/stat.h>
     40  0  stevel #include <sys/signal.h>
     41  0  stevel #include <sys/fault.h>
     42  0  stevel #include <sys/syscall.h>
     43  0  stevel #include <libproc.h>
     44  0  stevel #include "ramdata.h"
     45  0  stevel #include "proto.h"
     46  0  stevel 
     47  0  stevel void	show_stat32(private_t *, long);
     48  0  stevel #ifdef _LP64
     49  0  stevel void	show_stat64(private_t *, long);
     50  0  stevel #endif
     51  0  stevel 
     52  0  stevel #if defined(i386) && defined(_STAT_VER)
     53  0  stevel 
     54  0  stevel /*
     55  0  stevel  * Old SVR3 stat structure.
     56  0  stevel  */
     57  0  stevel struct	o_stat {
     58  0  stevel 	o_dev_t	st_dev;
     59  0  stevel 	o_ino_t	st_ino;
     60  0  stevel 	o_mode_t st_mode;
     61  0  stevel 	o_nlink_t st_nlink;
     62  0  stevel 	o_uid_t st_uid;
     63  0  stevel 	o_gid_t st_gid;
     64  0  stevel 	o_dev_t	st_rdev;
     65  0  stevel 	off32_t	st_size;
     66  0  stevel 	time_t st_atim;
     67  0  stevel 	time_t st_mtim;
     68  0  stevel 	time_t st_ctim;
     69  0  stevel };
     70  0  stevel 
     71  0  stevel void
     72  0  stevel show_o_stat(private_t *pri, long offset)
     73  0  stevel {
     74  0  stevel 	struct o_stat statb;
     75  0  stevel 	timestruc_t ts;
     76  0  stevel 
     77  0  stevel 	if (offset != NULL &&
     78  0  stevel 	    Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
     79  0  stevel 		(void) printf(
     80  0  stevel 		    "%s    d=0x%.8X i=%-5u m=0%.6o l=%-2u u=%-5u g=%-5u",
     81  0  stevel 		    pri->pname,
     82  0  stevel 		    statb.st_dev & 0xffff,
     83  0  stevel 		    statb.st_ino,
     84  0  stevel 		    statb.st_mode,
     85  0  stevel 		    statb.st_nlink % 0xffff,
     86  0  stevel 		    statb.st_uid,
     87  0  stevel 		    statb.st_gid);
     88  0  stevel 
     89  0  stevel 		switch (statb.st_mode & S_IFMT) {
     90  0  stevel 		case S_IFCHR:
     91  0  stevel 		case S_IFBLK:
     92  0  stevel 			(void) printf(" rdev=0x%.4X\n", statb.st_rdev & 0xffff);
     93  0  stevel 			break;
     94  0  stevel 		default:
     95  0  stevel 			(void) printf(" sz=%u\n", (uint32_t)statb.st_size);
     96  0  stevel 			break;
     97  0  stevel 		}
     98  0  stevel 
     99  0  stevel 		ts.tv_nsec = 0;
    100  0  stevel 		ts.tv_sec = statb.st_atim;
    101  0  stevel 		prtimestruc(pri, "at = ", &ts);
    102  0  stevel 		ts.tv_sec = statb.st_atim;
    103  0  stevel 		prtimestruc(pri, "mt = ", &ts);
    104  0  stevel 		ts.tv_sec = statb.st_atim;
    105  0  stevel 		prtimestruc(pri, "ct = ", &ts);
    106  0  stevel 	}
    107  0  stevel }
    108  0  stevel 
    109  0  stevel void
    110  0  stevel show_stat(private_t *pri, long offset)
    111  0  stevel {
    112  0  stevel 	show_o_stat(pri, offset);
    113  0  stevel }
    114  0  stevel 
    115  0  stevel void
    116  0  stevel show_xstat(private_t *pri, int version, long offset)
    117  0  stevel {
    118  0  stevel 	switch (version) {
    119  0  stevel 	case _R3_STAT_VER:
    120  0  stevel 		show_o_stat(pri, offset);
    121  0  stevel 		break;
    122  0  stevel 	case _STAT_VER:
    123  0  stevel 		show_stat32(pri, offset);
    124  0  stevel 		break;
    125  0  stevel 	}
    126  0  stevel }
    127  0  stevel 
    128  0  stevel void
    129  0  stevel show_statat(private_t *pri, long offset)
    130  0  stevel {
    131  0  stevel #ifdef _LP64
    132  0  stevel 	if (data_model == PR_MODEL_LP64)
    133  0  stevel 		show_stat64(pri, offset);
    134  0  stevel 	else
    135  0  stevel 		show_stat32(pri, offset);
    136  0  stevel #else
    137  0  stevel 	show_stat32(pri, offset);
    138  0  stevel #endif
    139  0  stevel }
    140  0  stevel 
    141  0  stevel #else
    142  0  stevel 
    143  0  stevel void
    144  0  stevel show_stat(private_t *pri, long offset)
    145  0  stevel {
    146  0  stevel #ifdef _LP64
    147  0  stevel 	if (data_model == PR_MODEL_LP64)
    148  0  stevel 		show_stat64(pri, offset);
    149  0  stevel 	else
    150  0  stevel 		show_stat32(pri, offset);
    151  0  stevel #else
    152  0  stevel 	show_stat32(pri, offset);
    153  0  stevel #endif
    154  0  stevel }
    155  0  stevel 
    156  0  stevel void
    157  0  stevel show_statat(private_t *pri, long offset)
    158  0  stevel {
    159  0  stevel 	show_stat(pri, offset);
    160  0  stevel }
    161  0  stevel 
    162  0  stevel /* ARGSUSED */
    163  0  stevel void
    164  0  stevel show_xstat(private_t *pri, int version, long offset)
    165  0  stevel {
    166  0  stevel 	show_stat(pri, offset);
    167  0  stevel }
    168  0  stevel 
    169  0  stevel #endif
    170  0  stevel 
    171  0  stevel void
    172  0  stevel show_stat32(private_t *pri, long offset)
    173  0  stevel {
    174  0  stevel 	struct stat32 statb;
    175  0  stevel 	timestruc_t ts;
    176  0  stevel 
    177  0  stevel 	if (offset != NULL &&
    178  0  stevel 	    Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
    179  0  stevel 		(void) printf(
    180  0  stevel 		    "%s    d=0x%.8X i=%-5u m=0%.6o l=%-2u u=%-5u g=%-5u",
    181  0  stevel 		    pri->pname,
    182  0  stevel 		    statb.st_dev,
    183  0  stevel 		    statb.st_ino,
    184  0  stevel 		    statb.st_mode,
    185  0  stevel 		    statb.st_nlink,
    186  0  stevel 		    statb.st_uid,
    187  0  stevel 		    statb.st_gid);
    188  0  stevel 
    189  0  stevel 		switch (statb.st_mode & S_IFMT) {
    190  0  stevel 		case S_IFCHR:
    191  0  stevel 		case S_IFBLK:
    192  0  stevel 			(void) printf(" rdev=0x%.8X\n", statb.st_rdev);
    193  0  stevel 			break;
    194  0  stevel 		default:
    195  0  stevel 			(void) printf(" sz=%u\n", statb.st_size);
    196  0  stevel 			break;
    197  0  stevel 		}
    198  0  stevel 
    199  0  stevel 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_atim);
    200  0  stevel 		prtimestruc(pri, "at = ", &ts);
    201  0  stevel 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_mtim);
    202  0  stevel 		prtimestruc(pri, "mt = ", &ts);
    203  0  stevel 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_ctim);
    204  0  stevel 		prtimestruc(pri, "ct = ", &ts);
    205  0  stevel 
    206  0  stevel 		(void) printf(
    207  0  stevel 		    "%s    bsz=%-5d blks=%-5d fs=%.*s\n",
    208  0  stevel 		    pri->pname,
    209  0  stevel 		    statb.st_blksize,
    210  0  stevel 		    statb.st_blocks,
    211  0  stevel 		    _ST_FSTYPSZ,
    212  0  stevel 		    statb.st_fstype);
    213  0  stevel 	}
    214  0  stevel }
    215  0  stevel 
    216  0  stevel void
    217  0  stevel show_stat64_32(private_t *pri, long offset)
    218  0  stevel {
    219  0  stevel 	struct stat64_32 statb;
    220  0  stevel 	timestruc_t ts;
    221  0  stevel 
    222  0  stevel 	if (offset != NULL &&
    223  0  stevel 	    Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
    224  0  stevel 		(void) printf(
    225  0  stevel 		    "%s    d=0x%.8X i=%-5llu m=0%.6o l=%-2u u=%-5u g=%-5u",
    226  0  stevel 		    pri->pname,
    227  0  stevel 		    statb.st_dev,
    228  0  stevel 		    (u_longlong_t)statb.st_ino,
    229  0  stevel 		    statb.st_mode,
    230  0  stevel 		    statb.st_nlink,
    231  0  stevel 		    statb.st_uid,
    232  0  stevel 		    statb.st_gid);
    233  0  stevel 
    234  0  stevel 		switch (statb.st_mode & S_IFMT) {
    235  0  stevel 		case S_IFCHR:
    236  0  stevel 		case S_IFBLK:
    237  0  stevel 			(void) printf(" rdev=0x%.8X\n", statb.st_rdev);
    238  0  stevel 			break;
    239  0  stevel 		default:
    240  0  stevel 			(void) printf(" sz=%llu\n", (long long)statb.st_size);
    241  0  stevel 			break;
    242  0  stevel 		}
    243  0  stevel 
    244  0  stevel 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_atim);
    245  0  stevel 		prtimestruc(pri, "at = ", &ts);
    246  0  stevel 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_mtim);
    247  0  stevel 		prtimestruc(pri, "mt = ", &ts);
    248  0  stevel 		TIMESPEC32_TO_TIMESPEC(&ts, &statb.st_ctim);
    249  0  stevel 		prtimestruc(pri, "ct = ", &ts);
    250  0  stevel 
    251  0  stevel 		(void) printf("%s    bsz=%-5d blks=%-5lld fs=%.*s\n",
    252  0  stevel 		    pri->pname,
    253  0  stevel 		    statb.st_blksize,
    254  0  stevel 		    (longlong_t)statb.st_blocks,
    255  0  stevel 		    _ST_FSTYPSZ,
    256  0  stevel 		    statb.st_fstype);
    257  0  stevel 	}
    258  0  stevel }
    259  0  stevel 
    260  0  stevel #ifdef _LP64
    261  0  stevel void
    262  0  stevel show_stat64(private_t *pri, long offset)
    263  0  stevel {
    264  0  stevel 	struct stat64 statb;
    265  0  stevel 
    266  0  stevel 	if (offset != NULL &&
    267  0  stevel 	    Pread(Proc, &statb, sizeof (statb), offset) == sizeof (statb)) {
    268  0  stevel 		(void) printf(
    269  0  stevel 		    "%s    d=0x%.16lX i=%-5lu m=0%.6o l=%-2u u=%-5u g=%-5u",
    270  0  stevel 		    pri->pname,
    271  0  stevel 		    statb.st_dev,
    272  0  stevel 		    statb.st_ino,
    273  0  stevel 		    statb.st_mode,
    274  0  stevel 		    statb.st_nlink,
    275  0  stevel 		    statb.st_uid,
    276  0  stevel 		    statb.st_gid);
    277  0  stevel 
    278  0  stevel 		switch (statb.st_mode & S_IFMT) {
    279  0  stevel 		case S_IFCHR:
    280  0  stevel 		case S_IFBLK:
    281  0  stevel 			(void) printf(" rdev=0x%.16lX\n", statb.st_rdev);
    282  0  stevel 			break;
    283  0  stevel 		default:
    284  0  stevel 			(void) printf(" sz=%lu\n", statb.st_size);
    285  0  stevel 			break;
    286  0  stevel 		}
    287  0  stevel 
    288  0  stevel 		prtimestruc(pri, "at = ", (timestruc_t *)&statb.st_atim);
    289  0  stevel 		prtimestruc(pri, "mt = ", (timestruc_t *)&statb.st_mtim);
    290  0  stevel 		prtimestruc(pri, "ct = ", (timestruc_t *)&statb.st_ctim);
    291  0  stevel 
    292  0  stevel 		(void) printf(
    293  0  stevel 		    "%s    bsz=%-5d blks=%-5ld fs=%.*s\n",
    294  0  stevel 		    pri->pname,
    295  0  stevel 		    statb.st_blksize,
    296  0  stevel 		    statb.st_blocks,
    297  0  stevel 		    _ST_FSTYPSZ,
    298  0  stevel 		    statb.st_fstype);
    299  0  stevel 	}
    300  0  stevel }
    301  0  stevel #endif	/* _LP64 */
    302