Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Nov 2007 10:12:59 GMT
From:      Andrew Li <andrew2.li@citi.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/117836: [patch] Extend ktrace/kdump output
Message-ID:  <200711051012.lA5ACx0L047547@www.freebsd.org>
Resent-Message-ID: <200711051020.lA5AK0K7023264@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         117836
>Category:       kern
>Synopsis:       [patch] Extend ktrace/kdump output
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Nov 05 10:20:00 UTC 2007
>Closed-Date:
>Last-Modified:
>Originator:     Andrew Li
>Release:        FreeBSD 8.0-CURRENT
>Organization:
Citigroup
>Environment:
FreeBSD elmo 8.0-CURRENT FreeBSD 8.0-CURRENT #4: Thu Nov  1 18:51:10 EST 2007     root@elmo:/usr/obj_current/var/src_current/sys/GENERIC  i386

and

FreeBSD elmo 7.0-CURRENT FreeBSD 7.0-CURRENT #82: Fri Oct 19 16:34:25
EST 2007   root at elmo:/usr/obj_current/var/src_current/sys/GENERIC   i386
>Description:
Extended ktrace/kdump output to decode struct sockaddr and struct stat. The new ktrace/kdump shows a more readable output for struct sockaddr and {f,l,}stat(2).

For example, the old ktrace/kdump on struct sockaddr:
  2345 telnet CALL connect(0x3,0xbfbfe600,0x1c)
  2345 telnet RET connect 0

The new ktrace/kdump on struct sockaddr:
  2345 telnet CALL connect(0x3,0xbfbfe600,0x1c)
  2345 telnet SOCK {AF_INET, 127.0.0.1:8000}
  2345 telnet RET connect 0

Old ktrace/kdump for stat(2):
  34536 stat CALL stat(0x8048614,0xbfbfe908)
  34536 stat RET stat 0

New ktrace/kdump for stat(2):
  34534 stat CALL stat(0x8048614,0xbfbfe908)
  34534 stat STAT {dev=100, ino=383524, mode=-rw-r--r-- , nlink=1,
uid=1000, gid=1000, rdev=1528768, atime=1192715539, stime=1192471088,
ctime=1192471088, birthtime=1192471088, size=17898, blksize=4096,
blocks=36, flags=0x0}
  34534 stat RET stat 0

The patch passed "make universe" on 7.0-CURRENT, and "make world" on 8.0-CURRENT.
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

*** ./sys/kern/kern_ktrace.c.orig	Thu Aug 30 07:17:11 2007
--- ./sys/kern/kern_ktrace.c	Mon Oct 22 12:18:26 2007
***************
*** 51,56 ****
--- 51,58 ----
  #include <sys/proc.h>
  #include <sys/unistd.h>
  #include <sys/vnode.h>
+ #include <sys/socket.h>
+ #include <sys/stat.h>
  #include <sys/ktrace.h>
  #include <sys/sx.h>
  #include <sys/sysctl.h>
***************
*** 107,113 ****
  	sizeof(struct ktr_genio),		/* KTR_GENIO */
  	sizeof(struct ktr_psig),		/* KTR_PSIG */
  	sizeof(struct ktr_csw),			/* KTR_CSW */
! 	0					/* KTR_USER */
  };
  
  static STAILQ_HEAD(, ktr_request) ktr_free;
--- 109,117 ----
  	sizeof(struct ktr_genio),		/* KTR_GENIO */
  	sizeof(struct ktr_psig),		/* KTR_PSIG */
  	sizeof(struct ktr_csw),			/* KTR_CSW */
! 	0,					/* KTR_USER */
! 	0,					/* KTR_SOCKADDR */
! 	0					/* KTR_STAT */
  };
  
  static STAILQ_HEAD(, ktr_request) ktr_free;
***************
*** 552,557 ****
--- 556,610 ----
  	kc->user = user;
  	ktr_enqueuerequest(curthread, req);
  }
+ 
+ void
+ ktrsockaddr(sin)
+ 	struct sockaddr *sin;
+ {
+ 	struct ktr_request *req;
+ 	char *buf = NULL;
+ 
+ 	if (sin && sin->sa_len > 0) {
+ 		buf = malloc(sin->sa_len, M_KTRACE, M_WAITOK);
+ 		bcopy(sin, buf, sin->sa_len);
+ 	}
+ 	req = ktr_getrequest(KTR_SOCKADDR);
+ 	if (req == NULL) {
+ 		if (buf != NULL)
+ 			free(buf, M_KTRACE);
+ 		return;
+ 	}
+ 	if (sin && sin->sa_len > 0) {
+ 		req->ktr_buffer = buf;
+ 		req->ktr_header.ktr_len = sin->sa_len;
+ 	}
+ 	ktr_submitrequest(curthread, req);
+ }
+ 
+ void
+ ktrstat(statp)
+ 	struct stat *statp;
+ {
+ 	struct ktr_request *req;
+ 	struct stat *buf = NULL;
+ 
+ 	if (statp) {
+ 		buf = malloc(sizeof(struct stat), M_KTRACE, M_WAITOK);
+ 		*buf = *statp;
+ 	}
+ 	req = ktr_getrequest(KTR_STAT);
+ 	if (req == NULL) {
+ 		if (buf != NULL)
+ 			free(buf, M_KTRACE);
+ 		return;
+ 	}
+ 	if (statp) {
+ 		req->ktr_buffer = buf;
+ 		req->ktr_header.ktr_len = sizeof(struct stat);
+ 	}
+ 
+ 	ktr_submitrequest(curthread, req);
+ }
  #endif /* KTRACE */
  
  /* Interface and common routines */
*** ./sys/kern/vfs_syscalls.c.orig	Mon Sep 10 10:00:16 2007
--- ./sys/kern/vfs_syscalls.c	Mon Oct 22 12:17:00 2007
***************
*** 38,43 ****
--- 38,44 ----
  __FBSDID("$FreeBSD: src/sys/kern/vfs_syscalls.c,v 1.443 2007/09/10 00:00:16 rwatson Exp $");
  
  #include "opt_compat.h"
+ #include "opt_ktrace.h"
  #include "opt_mac.h"
  
  #include <sys/param.h>
***************
*** 67,72 ****
--- 68,76 ----
  #include <sys/jail.h>
  #include <sys/syscallsubr.h>
  #include <sys/sysctl.h>
+ #ifdef KTRACE
+ #include <sys/ktrace.h>
+ #endif
  
  #include <machine/stdarg.h>
  
***************
*** 2118,2123 ****
--- 2122,2131 ----
  	if (error)
  		return (error);
  	*sbp = sb;
+ #ifdef KTRACE
+ 	if (KTRPOINT(td, KTR_STAT))
+ 		ktrstat(&sb);
+ #endif
  	return (0);
  }
  
***************
*** 2169,2174 ****
--- 2177,2186 ----
  	if (error)
  		return (error);
  	*sbp = sb;
+ #ifdef KTRACE
+ 	if (KTRPOINT(td, KTR_STAT))
+ 		ktrstat(&sb);
+ #endif
  	return (0);
  }
  
*** ./sys/kern/kern_descrip.c.orig	Tue Aug  7 00:26:00 2007
--- ./sys/kern/kern_descrip.c	Sat Oct 20 20:17:03 2007
***************
*** 39,44 ****
--- 39,45 ----
  
  #include "opt_compat.h"
  #include "opt_ddb.h"
+ #include "opt_ktrace.h"
  
  #include <sys/param.h>
  #include <sys/systm.h>
***************
*** 69,74 ****
--- 70,78 ----
  #include <sys/sysproto.h>
  #include <sys/unistd.h>
  #include <sys/vnode.h>
+ #ifdef KTRACE
+ #include <sys/ktrace.h>
+ #endif
  
  #include <security/audit/audit.h>
  
***************
*** 1129,1134 ****
--- 1133,1142 ----
  
  	error = fo_stat(fp, sbp, td->td_ucred, td);
  	fdrop(fp, td);
+ #ifdef KTRACE
+ 	if (error == 0 && KTRPOINT(td, KTR_STAT))
+ 		ktrstat(sbp);
+ #endif
  	return (error);
  }
  
*** ./sys/kern/uipc_syscalls.c.orig	Mon Aug 27 15:19:45 2007
--- ./sys/kern/uipc_syscalls.c	Mon Nov  5 18:24:06 2007
***************
*** 227,232 ****
--- 227,236 ----
  	if (error)
  		return (error);
  	so = fp->f_data;
+ #ifdef KTRACE
+ 	if (KTRPOINT(td, KTR_SOCKADDR))
+ 		ktrsockaddr(sa);
+ #endif
  #ifdef MAC
  	SOCK_LOCK(so);
  	error = mac_check_socket_bind(td->td_ucred, so, sa);
***************
*** 454,459 ****
--- 458,467 ----
  		/* check sa_len before it is destroyed */
  		if (*namelen > sa->sa_len)
  			*namelen = sa->sa_len;
+ #ifdef KTRACE
+ 		if (KTRPOINT(td, KTR_SOCKADDR))
+ 			ktrsockaddr(sa);
+ #endif
  		*name = sa;
  		sa = NULL;
  	}
***************
*** 548,553 ****
--- 556,565 ----
  		error = EALREADY;
  		goto done1;
  	}
+ #ifdef KTRACE
+ 	if (KTRPOINT(td, KTR_SOCKADDR))
+ 		ktrsockaddr(sa);
+ #endif
  #ifdef MAC
  	SOCK_LOCK(so);
  	error = mac_check_socket_connect(td->td_ucred, so, sa);
***************
*** 1070,1075 ****
--- 1082,1091 ----
  	}
  out:
  	fdrop(fp, td);
+ #ifdef KTRACE
+ 	if (fromsa && KTRPOINT(td, KTR_SOCKADDR))
+ 		ktrsockaddr(fromsa);
+ #endif
  	if (fromsa)
  		FREE(fromsa, M_SONAME);
  
***************
*** 1474,1479 ****
--- 1490,1499 ----
  	else
  		len = MIN(*alen, (*sa)->sa_len);
  	*alen = len;
+ #ifdef KTRACE
+ 	if (KTRPOINT(td, KTR_SOCKADDR))
+ 		ktrsockaddr(*sa);
+ #endif
  bad:
  	fdrop(fp, td);
  	if (error && *sa) {
***************
*** 1571,1576 ****
--- 1591,1600 ----
  	else
  		len = MIN(*alen, (*sa)->sa_len);
  	*alen = len;
+ #ifdef KTRACE
+ 	if (KTRPOINT(td, KTR_SOCKADDR))
+ 		ktrsockaddr(*sa);
+ #endif
  bad:
  	if (error && *sa) {
  		free(*sa, M_SONAME);
***************
*** 2347,2352 ****
--- 2371,2380 ----
  	error = getsock(td->td_proc->p_fd, uap->sd, &fp, NULL);
  	if (error)
  		goto sctp_bad;
+ #ifdef KTRACE
+ 	if (KTRPOINT(td, KTR_SOCKADDR))
+ 		ktrsockaddr(to);
+ #endif
  
  	iov[0].iov_base = uap->msg;
  	iov[0].iov_len = uap->mlen;
***************
*** 2450,2455 ****
--- 2478,2487 ----
  	error = copyiniov(uap->iov, uap->iovlen, &iov, EMSGSIZE);
  	if (error)
  		goto sctp_bad1;
+ #ifdef KTRACE
+ 	if (KTRPOINT(td, KTR_SOCKADDR))
+ 		ktrsockaddr(to);
+ #endif
  
  	so = (struct socket *)fp->f_data;
  #ifdef MAC
***************
*** 2633,2638 ****
--- 2665,2674 ----
  			goto out;
  		}
  	}
+ #ifdef KTRACE
+ 	if (KTRPOINT(td, KTR_SOCKADDR))
+ 		ktrsockaddr(fromsa);
+ #endif
  	if (uap->msg_flags) {
  		error = copyout(&msg_flags, uap->msg_flags, sizeof (int));
  		if (error) {
*** ./sys/sys/ktrace.h.orig	Tue Dec 27 09:09:09 2005
--- ./sys/sys/ktrace.h	Sat Oct 20 20:15:41 2007
***************
*** 151,156 ****
--- 151,168 ----
  #define KTR_USER	7
  
  /*
+  * KTR_SOCKADDR - socket address calls
+  */
+ #define KTR_SOCKADDR	8
+ struct sockaddr;
+ 
+ /*
+  * KTR_STAT - file stat calls
+  */
+ #define KTR_STAT	9
+ struct stat;
+ 
+ /*
   * KTR_DROP - If this bit is set in ktr_type, then at least one event
   * between the previous record and this record was dropped.
   */
***************
*** 167,172 ****
--- 179,186 ----
  #define	KTRFAC_PSIG	(1<<KTR_PSIG)
  #define KTRFAC_CSW	(1<<KTR_CSW)
  #define KTRFAC_USER	(1<<KTR_USER)
+ #define KTRFAC_SOCKADDR	(1<<KTR_SOCKADDR)
+ #define KTRFAC_STAT	(1<<KTR_STAT)
  /*
   * trace flags (also in p_traceflags)
   */
***************
*** 185,190 ****
--- 199,206 ----
  void	ktrsysret(int, int, register_t);
  void	ktrprocexit(struct thread *);
  void	ktruserret(struct thread *);
+ void	ktrsockaddr(struct sockaddr *);
+ void	ktrstat(struct stat *);
  
  #else
  
*** ./usr.bin/kdump/kdump.c.orig	Tue Jul 10 10:01:30 2007
--- ./usr.bin/kdump/kdump.c	Mon Nov  5 21:04:38 2007
***************
*** 58,69 ****
--- 58,83 ----
  #include <sys/ktrace.h>
  #include <sys/ioctl.h>
  #include <sys/socket.h>
+ #include <sys/stat.h>
+ #include <sys/un.h>
+ #ifdef IPX
+ #include <sys/types.h>
+ #include <netipx/ipx.h>
+ #endif
+ #ifdef NETATALK
+ #include <netatalk/at.h>
+ #endif
+ #include <netinet/in.h>
  #include <dlfcn.h>
  #include <err.h>
+ #include <grp.h>
+ #include <inttypes.h>
  #include <locale.h>
+ #include <pwd.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
+ #include <time.h>
  #include <unistd.h>
  #include <vis.h>
  #include "ktrace.h"
***************
*** 80,92 ****
  void ktrpsig(struct ktr_psig *);
  void ktrcsw(struct ktr_csw *);
  void ktruser(int, unsigned char *);
  void usage(void);
  const char *ioctlname(u_long);
  
! int timestamp, decimal, fancy = 1, suppressdata, tail, threads, maxdata;
  const char *tracefile = DEF_TRACEFILE;
  struct ktr_header ktr_header;
  
  #define eqs(s1, s2)	(strcmp((s1), (s2)) == 0)
  
  int
--- 94,110 ----
  void ktrpsig(struct ktr_psig *);
  void ktrcsw(struct ktr_csw *);
  void ktruser(int, unsigned char *);
+ void ktrsockaddr(struct sockaddr *);
+ void ktrstat(struct stat *);
  void usage(void);
  const char *ioctlname(u_long);
  
! int timestamp, decimal, fancy = 1, suppressdata, tail, threads, maxdata,
!     resolv = 0;
  const char *tracefile = DEF_TRACEFILE;
  struct ktr_header ktr_header;
  
+ #define TIME_FORMAT	"%b %e %T %Y"
  #define eqs(s1, s2)	(strcmp((s1), (s2)) == 0)
  
  int
***************
*** 100,106 ****
  
  	(void) setlocale(LC_CTYPE, "");
  
! 	while ((ch = getopt(argc,argv,"f:dElm:np:HRsTt:")) != -1)
  		switch((char)ch) {
  		case 'f':
  			tracefile = optarg;
--- 118,124 ----
  
  	(void) setlocale(LC_CTYPE, "");
  
! 	while ((ch = getopt(argc,argv,"f:dElm:np:HRrsTt:")) != -1)
  		switch((char)ch) {
  		case 'f':
  			tracefile = optarg;
***************
*** 120,125 ****
--- 138,146 ----
  		case 'p':
  			pid = atoi(optarg);
  			break;
+ 		case 'r':
+ 			resolv = 1;
+ 			break;
  		case 's':
  			suppressdata = 1;
  			break;
***************
*** 209,214 ****
--- 230,241 ----
  		case KTR_USER:
  			ktruser(ktrlen, m);
  			break;
+ 		case KTR_SOCKADDR:
+ 			ktrsockaddr((struct sockaddr *)m);
+ 			break;
+ 		case KTR_STAT:
+ 			ktrstat((struct stat *)m);
+ 			break;
  		default:
  			printf("\n");
  			break;
***************
*** 260,265 ****
--- 287,298 ----
  	case KTR_USER:
  		type = "USER";
  		break;
+ 	case KTR_SOCKADDR:
+ 		type = "SOCK";
+ 		break;
+ 	case KTR_STAT:
+ 		type = "STAT";
+ 		break;
  	default:
  		(void)sprintf(unknown, "UNKNOWN(%d)", kth->ktr_type);
  		type = unknown;
***************
*** 1115,1120 ****
--- 1148,1294 ----
  }
  
  void
+ ktrsockaddr(struct sockaddr *kts)
+ {
+ /*
+  TODO: Support additional address families
+ 	#include <netatm/atm.h>
+ 	struct sockaddr_atm	*atm;
+ 	#include <netnatm/natm.h>
+ 	struct sockaddr_natm	*natm;
+ 	#include <netsmb/netbios.h>
+ 	struct sockaddr_nb	*nb;
+ */
+ 	char addr[64];
+ 
+ 	printf("{ ");
+ 	sockaprotoname(kts->sa_family);
+ 	switch(kts->sa_family) {
+ 	case AF_INET: {
+ 		struct sockaddr_in	*in;
+ 
+ 		in = (struct sockaddr_in *)kts;
+ 		printf(", %s:%u }\n", inet_ntoa(in->sin_addr),
+ 			ntohs(in->sin_port));
+ 		break;
+ 	}
+ #ifdef NETATALK
+ 	case AF_APPLETALK: {
+ 		struct sockaddr_at	*at;
+ 		struct netrange		*nr;
+ 
+ 		at = (struct sockaddr_at *)kts;
+ 		nr = &at->sat_range.r_netrange;
+ 		printf(", %d.%d, %d-%d, %d }\n", ntohs(at->sat_addr.s_net),
+ 			at->sat_addr.s_node, ntohs(nr->nr_firstnet),
+ 			ntohs(nr->nr_lastnet), nr->nr_phase);
+ 		break;
+ 	}
+ #endif
+ 	case AF_INET6: {
+ 		struct sockaddr_in6	*in6;
+ 
+ 		in6 = (struct sockaddr_in6 *)kts;
+ 		inet_ntop(AF_INET6, &in6->sin6_addr, addr, sizeof(addr));
+ 		printf(", [%s]:%u }\n", addr, htons(in6->sin6_port));
+ 		break;
+ 	}
+ #ifdef IPX
+ 	case AF_IPX: {
+ 		struct sockaddr_ipx	*ipx;
+ 
+ 		ipx = (struct sockaddr_ipx *)kts;
+ 		printf(", %s }\n", ipx_ntoa(ipx->sipx_addr));
+ 		break;
+ 	}
+ #endif
+ 	case AF_UNIX: {
+ 		struct sockaddr_un	*un;
+ 
+ 		un = (struct sockaddr_un *)kts;
+ 		printf(", %.*s }\n", un->sun_len, un->sun_path);
+ 		break;
+ 	}
+ 	default:
+ 		printf(", UNKNOWN FAMILY }\n");
+ 	}
+ }
+ 
+ void
+ ktrstat(struct stat *statp)
+ {
+ 	char mode[12], timestr[PATH_MAX + 4];
+ 	struct passwd *pwd;
+ 	struct group  *grp;
+ 	struct tm *tm;
+ 
+ 	strmode(statp->st_mode, mode);
+ 	printf("{dev=%ju, ino=%ju, mode=%s, nlink=%ju, ",
+ 		(uintmax_t)statp->st_dev, (uintmax_t)statp->st_ino, mode,
+ 		(uintmax_t)statp->st_nlink);
+ 	if (resolv == 0 || (pwd = getpwuid(statp->st_uid)) == NULL)
+ 		printf("uid=%ju, ", (uintmax_t)statp->st_uid);
+ 	else
+ 		printf("uid=\"%s\", ", pwd->pw_name);
+ 	if (resolv == 0 || (grp = getgrgid(statp->st_gid)) == NULL)
+ 		printf("gid=%ju, ", (uintmax_t)statp->st_gid);
+ 	else
+ 		printf("gid=\"%s\", ", grp->gr_name);
+ 	printf("rdev=%ju, ", (uintmax_t)statp->st_rdev);
+ 	printf("atime=");
+ 	if (resolv == 0)
+ 		printf("%ld", statp->st_atimespec.tv_sec);
+ 	else {
+ 		tm = localtime(&statp->st_atimespec.tv_sec);
+ 		(void)strftime(timestr, sizeof(timestr), TIME_FORMAT, tm);
+ 		printf("\"%s\"", timestr);
+ 	}
+ 	if (statp->st_atimespec.tv_nsec != 0)
+ 		printf(".%09ld, ", statp->st_atimespec.tv_nsec);
+ 	else
+ 		printf(", ");
+ 	printf("stime=");
+ 	if (resolv == 0)
+ 		printf("%ld", statp->st_mtimespec.tv_sec);
+ 	else {
+ 		tm = localtime(&statp->st_mtimespec.tv_sec);
+ 		(void)strftime(timestr, sizeof(timestr), TIME_FORMAT, tm);
+ 		printf("\"%s\"", timestr);
+ 	}
+ 	if (statp->st_mtimespec.tv_nsec != 0)
+ 		printf(".%09ld, ", statp->st_mtimespec.tv_nsec);
+ 	else
+ 		printf(", ");
+ 	printf("ctime=");
+ 	if (resolv == 0)
+ 		printf("%ld", statp->st_ctimespec.tv_sec);
+ 	else {
+ 		tm = localtime(&statp->st_ctimespec.tv_sec);
+ 		(void)strftime(timestr, sizeof(timestr), TIME_FORMAT, tm);
+ 		printf("\"%s\"", timestr);
+ 	}
+ 	if (statp->st_ctimespec.tv_nsec != 0)
+ 		printf(".%09ld, ", statp->st_ctimespec.tv_nsec);
+ 	else
+ 		printf(", ");
+ 	printf("birthtime=");
+ 	if (resolv == 0)
+ 		printf("%ld", statp->st_birthtimespec.tv_sec);
+ 	else {
+ 		tm = localtime(&statp->st_birthtimespec.tv_sec);
+ 		(void)strftime(timestr, sizeof(timestr), TIME_FORMAT, tm);
+ 		printf("\"%s\"", timestr);
+ 	}
+ 	if (statp->st_birthtimespec.tv_nsec != 0)
+ 		printf(".%09ld, ", statp->st_birthtimespec.tv_nsec);
+ 	else
+ 		printf(", ");
+ 	printf("size=%jd, blksize=%ju, blocks=%jd, flags=0x%x}\n",
+ 		(uintmax_t)statp->st_size, (uintmax_t)statp->st_blksize,
+ 		(intmax_t)statp->st_blocks, statp->st_flags);
+ }
+ 
+ void
  usage(void)
  {
  	(void)fprintf(stderr,
*** ./usr.bin/kdump/mksubr.orig	Tue Apr 10 05:16:24 2007
--- ./usr.bin/kdump/mksubr	Sat Oct 20 20:15:07 2007
***************
*** 337,342 ****
--- 337,343 ----
  auto_switch_type "minheritname" "INHERIT_[A-Z]+[[:space:]]+[0-9]+" "sys/mman.h"
  auto_switch_type "quotactlname" "Q_[A-Z]+[[:space:]]+0x[0-9]+" "ufs/ufs/quota.h"
  auto_if_type "sockdomainname" "PF_[[:alnum:]]+[[:space:]]+" "sys/socket.h"
+ auto_if_type "sockaprotoname" "AF_[[:alnum:]]+[[:space:]]+" "sys/socket.h"
  auto_if_type "sockipprotoname" "IPPROTO_[[:alnum:]]+[[:space:]]+" "netinet/in.h"
  auto_switch_type "sockoptname" "SO_[A-Z]+[[:space:]]+0x[0-9]+" "sys/socket.h"
  auto_switch_type "socktypename" "SOCK_[A-Z]+[[:space:]]+[1-9]+[0-9]*" "sys/socket.h"
*** ./usr.bin/kdump/kdump.1.orig	Fri Nov 18 21:36:28 2005
--- ./usr.bin/kdump/kdump.1	Mon Oct 22 22:10:02 2007
***************
*** 96,106 ****
  same trace file.
  .It Fl R
  Display relative timestamps (time since previous entry).
  .It Fl s
  Suppress display of I/O data.
  .It Fl T
  Display absolute timestamps for each entry (seconds since epoch).
! .It Fl t Ar cnisuw
  See the
  .Fl t
  option of
--- 96,109 ----
  same trace file.
  .It Fl R
  Display relative timestamps (time since previous entry).
+ .It Fl r
+ Translate uid, gid and timespecs for STAT records into username,
+ groupname and local time, rather than reporting them as numbers.
  .It Fl s
  Suppress display of I/O data.
  .It Fl T
  Display absolute timestamps for each entry (seconds since epoch).
! .It Fl t Ar cnikstuw
  See the
  .Fl t
  option of
***************
*** 165,171 ****
--- 168,176 ----
  .It Li RET Ta return from syscall Ta syscall name and return value
  .It Li NAMI Ta file name lookup Ta path to file
  .It Li GENIO Ta general I/O Ta fd, read/write, number of bytes
+ .It Li SOCK Ta sockaddr syscall Ta struct sockaddr values
  .It Li SIG Ta signal Ta signal name, handler, mask, code
+ .It Li STAT Ta stat syscall Ta struct stat values
  .It Li CSW Ta context switch Ta stop/resume user/kernel
  .It Li USER Ta data from user process Ta the data
  .El
*** ./usr.bin/ktrace/ktrace.h.orig	Sun Apr 28 23:00:16 2002
--- ./usr.bin/ktrace/ktrace.h	Sat Oct 20 20:13:59 2007
***************
*** 35,41 ****
   */
  
  #define DEF_POINTS (KTRFAC_SYSCALL | KTRFAC_SYSRET | KTRFAC_NAMEI | \
! 		  KTRFAC_GENIO | KTRFAC_PSIG | KTRFAC_USER)
  
  #define ALL_POINTS (DEF_POINTS | KTRFAC_CSW)
  
--- 35,42 ----
   */
  
  #define DEF_POINTS (KTRFAC_SYSCALL | KTRFAC_SYSRET | KTRFAC_NAMEI | \
! 		  KTRFAC_GENIO | KTRFAC_PSIG | KTRFAC_USER | \
! 		  KTRFAC_SOCKADDR | KTRFAC_STAT)
  
  #define ALL_POINTS (DEF_POINTS | KTRFAC_CSW)
  
*** ./usr.bin/ktrace/ktrace.1.orig	Tue Nov  7 02:17:50 2006
--- ./usr.bin/ktrace/ktrace.1	Mon Oct 22 22:11:04 2007
***************
*** 117,131 ****
  .It Cm i
  trace
  .Tn I/O
  .It Cm s
  trace signal processing
  .It Cm u
  userland traces
  .It Cm w
  context switches
  .It Cm +
  trace the default set of trace points -
! .Cm c , n , i , s , u
  .El
  .It Ar command
  Execute
--- 117,135 ----
  .It Cm i
  trace
  .Tn I/O
+ .It Cm k
+ trace sockaddr content
  .It Cm s
  trace signal processing
+ .It Cm t
+ trace stat struct for stat(2)
  .It Cm u
  userland traces
  .It Cm w
  context switches
  .It Cm +
  trace the default set of trace points -
! .Cm c , n , i , k , s , t , u
  .El
  .It Ar command
  Execute
*** ./usr.bin/ktrace/subr.c.orig	Sat Nov 27 17:51:38 2004
--- ./usr.bin/ktrace/subr.c	Sat Oct 20 20:13:59 2007
***************
*** 71,79 ****
--- 71,85 ----
  		case 'i':
  			facs |= KTRFAC_GENIO;
  			break;
+ 		case 'k':
+ 			facs |= KTRFAC_SOCKADDR;
+ 			break;
  		case 's':
  			facs |= KTRFAC_PSIG;
  			break;
+ 		case 't':
+ 			facs |= KTRFAC_STAT;
+ 			break;
  		case 'u':
  			facs |= KTRFAC_USER;
  			break;


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200711051012.lA5ACx0L047547>