First cut at printing out ioctl names intelligently. Note that this doesn't
handle linux ioctls (yet?). This uses the mkioctl script from kdump, bless its little heart. Reviewed by: Mike Smith
This commit is contained in:
parent
515aa624c8
commit
40d07bddd6
@ -1,8 +1,9 @@
|
||||
PROG= truss
|
||||
SRCS= main.c setup.c i386-fbsd.c i386-linux.c \
|
||||
syscalls.c linux_syscalls.h syscalls.h
|
||||
syscalls.c linux_syscalls.h syscalls.h ioctl.c
|
||||
CFLAGS+= -I${.CURDIR} -I.
|
||||
CLEANFILES+=i386l-syscalls.master syscalls.master linux_syscalls.h syscalls.h
|
||||
CLEANFILES+=i386l-syscalls.master syscalls.master linux_syscalls.h \
|
||||
syscalls.h ioctl.c
|
||||
|
||||
.SUFFIXES: .master
|
||||
|
||||
@ -20,4 +21,7 @@ syscalls.h: syscalls.master
|
||||
/bin/sh ${.CURDIR}/../../sys/kern/makesyscalls.sh syscalls.master \
|
||||
${.CURDIR}/i386.conf
|
||||
|
||||
ioctl.c: ${.CURDIR}/../../usr.bin/kdump/mkioctls
|
||||
/bin/sh ${.CURDIR}/../../usr.bin/kdump/mkioctls > ioctl.c
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -9,16 +9,17 @@
|
||||
* Ptr -- pointer to some specific structure. Just print as hex for now.
|
||||
* Quad -- a double-word value. e.g., lseek(int, offset_t, int)
|
||||
* Stat -- a pointer to a stat buffer. Currently unused.
|
||||
* Ioctl -- an ioctl command. Woefully limited.
|
||||
*
|
||||
* In addition, the pointer types (String, Ptr) may have OUT masked in --
|
||||
* this means that the data is set on *return* from the system call -- or
|
||||
* IN (meaning that the data is passed *into* the system call).
|
||||
*/
|
||||
/*
|
||||
* $Id$
|
||||
* $Id: syscall.h,v 1.1 1997/12/06 05:23:07 sef Exp $
|
||||
*/
|
||||
|
||||
enum Argtype { None = 1, Hex, Octal, Int, String, Ptr, Stat, Quad };
|
||||
enum Argtype { None = 1, Hex, Octal, Int, String, Ptr, Stat, Ioctl, Quad };
|
||||
|
||||
#define ARG_MASK 0xff
|
||||
#define OUT 0x100
|
||||
|
@ -3,7 +3,7 @@
|
||||
* arguments.
|
||||
*/
|
||||
/*
|
||||
* $Id$
|
||||
* $Id: syscalls.c,v 1.1 1997/12/06 05:23:10 sef Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@ -39,6 +39,8 @@ struct syscall syscalls[] = {
|
||||
{ { Int, 0 }, { Ptr | OUT, 1 }}},
|
||||
{ "write", 1, 3,
|
||||
{ { Int, 0}, { Ptr | IN, 1 }, { Int, 2 }}},
|
||||
{ "ioctl", 1, 3,
|
||||
{ { Int, 0}, { Ioctl, 1 }, { Hex, 2 }}},
|
||||
{ "break", 1, 1, { { Hex, 0 }}},
|
||||
{ "exit", 0, 1, { { Hex, 0 }}},
|
||||
{ 0, 0, 0, { 0, 0 } },
|
||||
@ -168,6 +170,16 @@ print_arg(int fd, struct syscall_args *sc, unsigned long *args) {
|
||||
tmp = malloc(12);
|
||||
sprintf(tmp, "0x%x", args[sc->offset]);
|
||||
break;
|
||||
case Ioctl:
|
||||
{
|
||||
char *temp = ioctlname(args[sc->offset]);
|
||||
if (temp)
|
||||
tmp = strdup(temp);
|
||||
else {
|
||||
tmp = malloc(12);
|
||||
sprintf(tmp, "0x%x", args[sc->offset]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user