svn commit: r297023 - head/sbin/kldstat

Julian Elischer julian at FreeBSD.org
Fri Mar 18 14:49:13 UTC 2016


Author: julian
Date: Fri Mar 18 14:49:11 2016
New Revision: 297023
URL: https://svnweb.freebsd.org/changeset/base/297023

Log:
   Add the ability to print out ht emodule specific information in likely formats.
  Among other things this gives us the ability to find outthe syscall number of a dynamically loaded syscall that has a dynamicly allocated vector number.
  
  MFC after:	1 week
  Sponsored by:	Panzura inc.

Modified:
  head/sbin/kldstat/kldstat.8
  head/sbin/kldstat/kldstat.c

Modified: head/sbin/kldstat/kldstat.8
==============================================================================
--- head/sbin/kldstat/kldstat.8	Fri Mar 18 13:32:37 2016	(r297022)
+++ head/sbin/kldstat/kldstat.8	Fri Mar 18 14:49:11 2016	(r297023)
@@ -36,10 +36,12 @@
 .Op Fl h
 .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
@@ -54,6 +56,8 @@ Display the size field in a human-readab
 instead of hex values.
 .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: head/sbin/kldstat/kldstat.c
==============================================================================
--- head/sbin/kldstat/kldstat.c	Fri Mar 18 13:32:37 2016	(r297022)
+++ head/sbin/kldstat/kldstat.c	Fri Mar 18 14:49:11 2016	(r297023)
@@ -36,19 +36,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
@@ -88,8 +97,8 @@ printfile(int fileid, int verbose, int h
 static void
 usage(void)
 {
-    fprintf(stderr, "usage: kldstat [-h] [-q] [-v] [-i id] [-n filename]\n");
-    fprintf(stderr, "       kldstat [-q] [-m modname]\n");
+    fprintf(stderr, "usage: kldstata[-d] [-h] [-q] [-v] [-i id] [-n filename]\n");
+    fprintf(stderr, "       kldstat [-d] [-q] [-m modname]\n");
     exit(1);
 }
 
@@ -105,8 +114,11 @@ main(int argc, char** argv)
     char* modname = NULL;
     char* p;
 
-    while ((c = getopt(argc, argv, "hi:m:n:qv")) != -1)
+    while ((c = getopt(argc, argv, "dhi:m:n:qv")) != -1)
 	switch (c) {
+	case 'd':
+	    showdata = 1;
+	    break;
 	case 'h':
 	    humanized = 1;
 	    break;
@@ -152,8 +164,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-head mailing list