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
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=263879
2 changed files with 30 additions and 11 deletions

View File

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

View File

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