Re: svn commit: r362947 - head/usr.bin/truss

2020-07-05 Thread Paweł Biernacki
Before: 

__sysctl("sysctl.name2oid",2,0x7f763a80,0x7f763280,0x7f763680,8) = 
0 (0x0)
__sysctl("sysctl.oidfmt.6.2",4,0x7f763ae0,0x7f762e78,0x0,0) = 0 (0x0)
__sysctl("sysctl.name.6.2",4,0x7f762180,0x7f761d00,0x0,0) = 0 (0x0)
__sysctl("sysctl.oidfmt.6.2",4,0x7f762980,0x7f761d08,0x0,0) = 0 (0x0)
__sysctl("sysctl.oiddescr.6.2",4,0x7f762580,0x7f761d00,0x0,0) = 0 (0x0)

After:

__sysctl("sysctl.name2oid 
hw.model",2,0x7f161e60,0x7f161660,0x7f161a60,8) = 0 (0x0)
__sysctl("sysctl.oidfmt hw.model",4,0x7f161ec0,0x7f161258,0x0,0) = 0 
(0x0)
__sysctl("sysctl.name { 6.2 }",4,0x7f160560,0x7f1600e0,0x0,0) = 0 (0x0)
__sysctl("sysctl.oidfmt hw.model",4,0x7f160d60,0x7f1600e8,0x0,0) = 0 
(0x0)
__sysctl("sysctl.oiddescr hw.model",4,0x7f160960,0x7f1600e0,0x0,0) = 0 
(0x0)

Reminded by:mjg


> On 5 Jul 2020, at 21:53, Pawel Biernacki  wrote:
> 
> Author: kaktus
> Date: Sun Jul  5 19:53:54 2020
> New Revision: 362947
> URL: https://svnweb.freebsd.org/changeset/base/362947
> 
> Log:
>  truss: print more information about traced sysctls
> 
>  MFC after:   2 weeks
>  Sponsored by:Mysterious Code Ltd.
> 
> Modified:
>  head/usr.bin/truss/syscalls.c
> 
> Modified: head/usr.bin/truss/syscalls.c
> ==
> --- head/usr.bin/truss/syscalls.c Sun Jul  5 19:38:36 2020
> (r362946)
> +++ head/usr.bin/truss/syscalls.c Sun Jul  5 19:53:54 2020
> (r362947)
> @@ -1577,14 +1577,37 @@ print_cmsgs(FILE *fp, pid_t pid, bool receive, struct 
> }
> 
> static void
> -print_sysctl_oid(FILE *fp, int *oid, int len)
> +print_sysctl_oid(FILE *fp, int *oid, size_t len)
> {
> - int i;
> + size_t i;
> + bool first;
> 
> - for (i = 0; i < len; i++)
> - fprintf(fp, ".%d", oid[i]);
> + first = true;
> + fprintf(fp, "{ ");
> + for (i = 0; i < len; i++) {
> + fprintf(fp, "%s%d", first ? "" : ".", oid[i]);
> + first = false;
> + }
> + fprintf(fp, " }");
> }
> 
> +static void
> +print_sysctl(FILE *fp, int *oid, size_t len)
> +{
> + char name[BUFSIZ];
> + int qoid[CTL_MAXNAME + 2];
> + size_t i;
> +
> + qoid[0] = CTL_SYSCTL;
> + qoid[1] = CTL_SYSCTL_NAME;
> + memcpy(qoid + 2, oid, len * sizeof(int));
> + i = sizeof(name);
> + if (sysctl(qoid, len + 2, name, , 0, 0) == -1)
> + print_sysctl_oid(fp, oid, len);
> + else
> + fprintf(fp, "%s", name);
> +}
> +
> /*
>  * Converts a syscall argument into a string.  Said string is
>  * allocated via malloc(), so needs to be free()'d.  sc is
> @@ -2298,9 +2321,8 @@ print_arg(struct syscall_args *sc, unsigned long *args
>   break;
>   case Sysctl: {
>   char name[BUFSIZ];
> - int oid[CTL_MAXNAME + 2], qoid[CTL_MAXNAME + 2];
> - size_t i;
> - int len;
> + int oid[CTL_MAXNAME + 2];
> + size_t len;
> 
>   memset(name, 0, sizeof(name));
>   len = args[sc->offset + 1];
> @@ -2314,39 +2336,35 @@ print_arg(struct syscall_args *sc, unsigned long *args
>   fprintf(fp, "debug");
>   break;
>   case CTL_SYSCTL_NAME:
> - fprintf(fp, "name");
> + fprintf(fp, "name ");
>   print_sysctl_oid(fp, oid + 2, len - 2);
>   break;
>   case CTL_SYSCTL_NEXT:
>   fprintf(fp, "next");
>   break;
>   case CTL_SYSCTL_NAME2OID:
> - fprintf(fp, "name2oid");
> + fprintf(fp, "name2oid %s",
> + get_string(pid,
> + args[sc->offset + 4],
> + args[sc->offset + 5]));
>   break;
>   case CTL_SYSCTL_OIDFMT:
> - fprintf(fp, "oidfmt");
> - print_sysctl_oid(fp, oid + 2, len - 2);
> + fprintf(fp, "oidfmt ");
> + print_sysctl(fp, oid + 2, len - 2);
>   break;
>   case CTL_SYSCTL_OIDDESCR:
> - fprintf(fp, "oiddescr");
> - print_sysctl_oid(fp, oid + 2, len - 2);
> + fprintf(fp, "oiddescr ");
> + print_sysctl(fp, oid + 2, len - 2);
>   

svn commit: r362947 - head/usr.bin/truss

2020-07-05 Thread Pawel Biernacki
Author: kaktus
Date: Sun Jul  5 19:53:54 2020
New Revision: 362947
URL: https://svnweb.freebsd.org/changeset/base/362947

Log:
  truss: print more information about traced sysctls
  
  MFC after:2 weeks
  Sponsored by: Mysterious Code Ltd.

Modified:
  head/usr.bin/truss/syscalls.c

Modified: head/usr.bin/truss/syscalls.c
==
--- head/usr.bin/truss/syscalls.c   Sun Jul  5 19:38:36 2020
(r362946)
+++ head/usr.bin/truss/syscalls.c   Sun Jul  5 19:53:54 2020
(r362947)
@@ -1577,14 +1577,37 @@ print_cmsgs(FILE *fp, pid_t pid, bool receive, struct 
 }
 
 static void
-print_sysctl_oid(FILE *fp, int *oid, int len)
+print_sysctl_oid(FILE *fp, int *oid, size_t len)
 {
-   int i;
+   size_t i;
+   bool first;
 
-   for (i = 0; i < len; i++)
-   fprintf(fp, ".%d", oid[i]);
+   first = true;
+   fprintf(fp, "{ ");
+   for (i = 0; i < len; i++) {
+   fprintf(fp, "%s%d", first ? "" : ".", oid[i]);
+   first = false;
+   }
+   fprintf(fp, " }");
 }
 
+static void
+print_sysctl(FILE *fp, int *oid, size_t len)
+{
+   char name[BUFSIZ];
+   int qoid[CTL_MAXNAME + 2];
+   size_t i;
+
+   qoid[0] = CTL_SYSCTL;
+   qoid[1] = CTL_SYSCTL_NAME;
+   memcpy(qoid + 2, oid, len * sizeof(int));
+   i = sizeof(name);
+   if (sysctl(qoid, len + 2, name, , 0, 0) == -1)
+   print_sysctl_oid(fp, oid, len);
+   else
+   fprintf(fp, "%s", name);
+}
+
 /*
  * Converts a syscall argument into a string.  Said string is
  * allocated via malloc(), so needs to be free()'d.  sc is
@@ -2298,9 +2321,8 @@ print_arg(struct syscall_args *sc, unsigned long *args
break;
case Sysctl: {
char name[BUFSIZ];
-   int oid[CTL_MAXNAME + 2], qoid[CTL_MAXNAME + 2];
-   size_t i;
-   int len;
+   int oid[CTL_MAXNAME + 2];
+   size_t len;
 
memset(name, 0, sizeof(name));
len = args[sc->offset + 1];
@@ -2314,39 +2336,35 @@ print_arg(struct syscall_args *sc, unsigned long *args
fprintf(fp, "debug");
break;
case CTL_SYSCTL_NAME:
-   fprintf(fp, "name");
+   fprintf(fp, "name ");
print_sysctl_oid(fp, oid + 2, len - 2);
break;
case CTL_SYSCTL_NEXT:
fprintf(fp, "next");
break;
case CTL_SYSCTL_NAME2OID:
-   fprintf(fp, "name2oid");
+   fprintf(fp, "name2oid %s",
+   get_string(pid,
+   args[sc->offset + 4],
+   args[sc->offset + 5]));
break;
case CTL_SYSCTL_OIDFMT:
-   fprintf(fp, "oidfmt");
-   print_sysctl_oid(fp, oid + 2, len - 2);
+   fprintf(fp, "oidfmt ");
+   print_sysctl(fp, oid + 2, len - 2);
break;
case CTL_SYSCTL_OIDDESCR:
-   fprintf(fp, "oiddescr");
-   print_sysctl_oid(fp, oid + 2, len - 2);
+   fprintf(fp, "oiddescr ");
+   print_sysctl(fp, oid + 2, len - 2);
break;
case CTL_SYSCTL_OIDLABEL:
-   fprintf(fp, "oidlabel");
-   print_sysctl_oid(fp, oid + 2, len - 2);
+   fprintf(fp, "oidlabel ");
+   print_sysctl(fp, oid + 2, len - 2);
break;
default:
-   print_sysctl_oid(fp, oid + 1, len - 1);
+   print_sysctl(fp, oid + 1, len - 1);
}
} else {
-   qoid[0] = CTL_SYSCTL;
-   qoid[1] = CTL_SYSCTL_NAME;
-   memcpy(qoid + 2, oid, len * sizeof(int));
-   i = sizeof(name);
-   if (sysctl(qoid, len + 2, name, , 0, 0) == -1)
-