svn commit: r302800 - stable/10/sbin/kldstat

Julian Elischer julian at FreeBSD.org
Thu Jul 14 04:30:44 UTC 2016


Author: julian
Date: Thu Jul 14 04:30:42 2016
New Revision: 302800
URL: https://svnweb.freebsd.org/changeset/base/302800

Log:
  MFH: r297023
  
   Add the ability to print out the module specific information in likely formats.
  Among other things this gives us the ability to find out the syscall number of a dynamically loaded syscall that has a dynamicly allocated vector number.
  
  Sponsored by:	Panzura inc.

Modified:
  stable/10/sbin/kldstat/kldstat.8
  stable/10/sbin/kldstat/kldstat.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sbin/kldstat/kldstat.8
==============================================================================
--- stable/10/sbin/kldstat/kldstat.8	Thu Jul 14 02:25:29 2016	(r302799)
+++ stable/10/sbin/kldstat/kldstat.8	Thu Jul 14 04:30:42 2016	(r302800)
@@ -35,10 +35,12 @@
 .Nm
 .Op Fl q
 .Op Fl v
+.Op Fl d
 .Op Fl i Ar id
 .Op Fl n Ar filename
 .Nm
 .Op Fl q
+.Op Fl d
 .Op Fl m Ar modname
 .Sh DESCRIPTION
 The
@@ -50,6 +52,8 @@ The following options are available:
 .Bl -tag -width indentXX
 .It Fl v
 Be more verbose.
+.It Fl d
+Show the module specific data (as int, unsigned int and unsigned long)
 .It Fl i Ar id
 Display the status of only the file with this ID.
 .It Fl n Ar filename

Modified: stable/10/sbin/kldstat/kldstat.c
==============================================================================
--- stable/10/sbin/kldstat/kldstat.c	Thu Jul 14 02:25:29 2016	(r302799)
+++ stable/10/sbin/kldstat/kldstat.c	Thu Jul 14 04:30:42 2016	(r302800)
@@ -35,19 +35,28 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/module.h>
 #include <sys/linker.h>
+#include <strings.h>
 
 #define	POINTER_WIDTH	((int)(sizeof(void *) * 2 + 2))
 
+static int showdata = 0;
+
 static void
 printmod(int modid)
 {
     struct module_stat stat;
 
+    bzero(&stat, sizeof(stat));
     stat.version = sizeof(struct module_stat);
     if (modstat(modid, &stat) < 0)
 	warn("can't stat module id %d", modid);
     else
-	printf("\t\t%2d %s\n", stat.id, stat.name);
+	if (showdata) {
+	    printf("\t\t%2d %s (%d, %u, 0x%lx)\n", stat.id, stat.name, 
+	        stat.data.intval, stat.data.uintval, stat.data.ulongval);
+	} else {
+		printf("\t\t%2d %s\n", stat.id, stat.name);
+	}
 }
 
 static void
@@ -78,8 +87,8 @@ printfile(int fileid, int verbose)
 static void
 usage(void)
 {
-    fprintf(stderr, "usage: kldstat [-q] [-v] [-i id] [-n filename]\n");
-    fprintf(stderr, "       kldstat [-q] [-m modname]\n");
+    fprintf(stderr, "usage: kldstat [-d] [-q] [-v] [-i id] [-n filename]\n");
+    fprintf(stderr, "       kldstat [-d] [-q] [-m modname]\n");
     exit(1);
 }
 
@@ -94,8 +103,11 @@ main(int argc, char** argv)
     char* modname = NULL;
     char* p;
 
-    while ((c = getopt(argc, argv, "i:m:n:qv")) != -1)
+    while ((c = getopt(argc, argv, "di:m:n:qv")) != -1)
 	switch (c) {
+	case 'd':
+	    showdata = 1;
+	    break;
 	case 'i':
 	    fileid = (int)strtoul(optarg, &p, 10);
 	    if (*p != '\0')
@@ -138,8 +150,14 @@ main(int argc, char** argv)
 	if (modstat(modid, &stat) < 0)
 	    warn("can't stat module id %d", modid);
 	else {
-	    printf("Id  Refs Name\n");
-	    printf("%3d %4d %s\n", stat.id, stat.refs, stat.name);
+		if (showdata) {
+		    printf("Id  Refs Name data..(int, uint, ulong)\n");
+		    printf("%3d %4d %s (%d, %u, 0x%lx)\n", stat.id, stat.refs, stat.name, 
+		        stat.data.intval, stat.data.uintval, stat.data.ulongval);
+		} else {
+		    printf("Id  Refs Name\n");
+		    printf("%3d %4d %s\n", stat.id, stat.refs, stat.name);
+		}
 	}
 
 	return 0;


More information about the svn-src-all mailing list