Add `-S' to display syscall numbers in the output as well.

This is useful for debugging compat modules.

Sponsored by:	EMC / Isilon Storage Division
Obtained from:	Isilon OneFS (based on work by Jeff Hughes)
MFC after:	2 weeks
This commit is contained in:
Bryan Drewery 2014-03-28 16:11:20 +00:00
parent 965cc255c9
commit b9034ce23f
2 changed files with 30 additions and 11 deletions

View File

@ -28,7 +28,7 @@
.\" @(#)kdump.1 8.1 (Berkeley) 6/6/93 .\" @(#)kdump.1 8.1 (Berkeley) 6/6/93
.\" $FreeBSD$ .\" $FreeBSD$
.\" .\"
.Dd June 4, 2012 .Dd March 28, 2014
.Dt KDUMP 1 .Dt KDUMP 1
.Os .Os
.Sh NAME .Sh NAME
@ -36,7 +36,7 @@
.Nd display kernel trace data .Nd display kernel trace data
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Fl dEnlHRsTA .Op Fl dEnlHRSsTA
.Op Fl f Ar trfile .Op Fl f Ar trfile
.Op Fl m Ar maxdata .Op Fl m Ar maxdata
.Op Fl p Ar pid .Op Fl p Ar pid
@ -95,6 +95,8 @@ Display relative timestamps (time since previous entry).
.It Fl r .It Fl r
When decoding STRU records, display structure members such as UIDs, When decoding STRU records, display structure members such as UIDs,
GIDs, dates etc. symbolically instead of numerically. GIDs, dates etc. symbolically instead of numerically.
.It Fl S
Display system call numbers.
.It Fl s .It Fl s
Suppress display of I/O data. Suppress display of I/O data.
.It Fl T .It Fl T

View File

@ -123,7 +123,7 @@ void ioctlname(unsigned long, int);
#define TIMESTAMP_RELATIVE 0x4 #define TIMESTAMP_RELATIVE 0x4
int timestamp, decimal, fancy = 1, suppressdata, tail, threads, maxdata, int timestamp, decimal, fancy = 1, suppressdata, tail, threads, maxdata,
resolv = 0, abiflag = 0; resolv = 0, abiflag = 0, syscallno = 0;
const char *tracefile = DEF_TRACEFILE; const char *tracefile = DEF_TRACEFILE;
struct ktr_header ktr_header; struct ktr_header ktr_header;
@ -261,7 +261,7 @@ main(int argc, char *argv[])
timestamp = TIMESTAMP_NONE; timestamp = TIMESTAMP_NONE;
while ((ch = getopt(argc,argv,"f:dElm:np:AHRrsTt:")) != -1) while ((ch = getopt(argc,argv,"f:dElm:np:AHRrSsTt:")) != -1)
switch (ch) { switch (ch) {
case 'A': case 'A':
abiflag = 1; abiflag = 1;
@ -287,6 +287,9 @@ main(int argc, char *argv[])
case 'r': case 'r':
resolv = 1; resolv = 1;
break; break;
case 'S':
syscallno = 1;
break;
case 's': case 's':
suppressdata = 1; suppressdata = 1;
break; break;
@ -678,8 +681,11 @@ ktrsyscall(struct ktr_syscall *ktr, u_int flags)
if ((flags != 0 && ((flags & SV_ABI_MASK) != SV_ABI_FREEBSD)) || if ((flags != 0 && ((flags & SV_ABI_MASK) != SV_ABI_FREEBSD)) ||
(ktr->ktr_code >= nsyscalls || ktr->ktr_code < 0)) (ktr->ktr_code >= nsyscalls || ktr->ktr_code < 0))
printf("[%d]", ktr->ktr_code); printf("[%d]", ktr->ktr_code);
else else {
printf("%s", syscallnames[ktr->ktr_code]); printf("%s", syscallnames[ktr->ktr_code]);
if (syscallno)
printf("[%d]", ktr->ktr_code);
}
ip = &ktr->ktr_args[0]; ip = &ktr->ktr_args[0];
if (narg) { if (narg) {
char c = '('; char c = '(';
@ -1271,8 +1277,12 @@ ktrsysret(struct ktr_sysret *ktr, u_int flags)
if ((flags != 0 && ((flags & SV_ABI_MASK) != SV_ABI_FREEBSD)) || if ((flags != 0 && ((flags & SV_ABI_MASK) != SV_ABI_FREEBSD)) ||
(code >= nsyscalls || code < 0)) (code >= nsyscalls || code < 0))
printf("[%d] ", code); printf("[%d] ", code);
else else {
printf("%s ", syscallnames[code]); printf("%s", syscallnames[code]);
if (syscallno)
printf("[%d]", code);
printf(" ");
}
if (error == 0) { if (error == 0) {
if (fancy) { if (fancy) {
@ -1910,8 +1920,11 @@ linux_ktrsyscall(struct ktr_syscall *ktr)
if (ktr->ktr_code >= nlinux_syscalls || ktr->ktr_code < 0) if (ktr->ktr_code >= nlinux_syscalls || ktr->ktr_code < 0)
printf("[%d]", ktr->ktr_code); printf("[%d]", ktr->ktr_code);
else else {
printf("%s", linux_syscallnames[ktr->ktr_code]); printf("%s", linux_syscallnames[ktr->ktr_code]);
if (syscallno)
printf("[%d]", ktr->ktr_code);
}
ip = &ktr->ktr_args[0]; ip = &ktr->ktr_args[0];
if (narg) { if (narg) {
char c = '('; char c = '(';
@ -1931,8 +1944,12 @@ linux_ktrsysret(struct ktr_sysret *ktr)
if (code >= nlinux_syscalls || code < 0) if (code >= nlinux_syscalls || code < 0)
printf("[%d] ", code); printf("[%d] ", code);
else else {
printf("%s ", linux_syscallnames[code]); printf("%s", linux_syscallnames[code]);
if (syscallno)
printf("[%d]", code);
printf(" ");
}
if (error == 0) { if (error == 0) {
if (fancy) { if (fancy) {
@ -1965,7 +1982,7 @@ linux_ktrsysret(struct ktr_sysret *ktr)
void void
usage(void) usage(void)
{ {
fprintf(stderr, "usage: kdump [-dEnlHRrsTA] [-f trfile] " fprintf(stderr, "usage: kdump [-dEnlHRrSsTA] [-f trfile] "
"[-m maxdata] [-p pid] [-t trstr]\n"); "[-m maxdata] [-p pid] [-t trstr]\n");
exit(1); exit(1);
} }