svn commit: r362947 - head/usr.bin/truss
Pawel Biernacki
kaktus at FreeBSD.org
Sun Jul 5 19:53:55 UTC 2020
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, &i, 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, &i, 0, 0) == -1)
- print_sysctl_oid(fp, qoid + 2, len);
- else
- fprintf(fp, "%s", name);
+ print_sysctl(fp, oid, len);
}
fprintf(fp, "\"");
}
More information about the svn-src-all
mailing list