version 1.11, 2001/07/12 05:17:12 |
version 1.12, 2001/08/18 00:48:57 |
|
|
#include <vis.h> |
#include <vis.h> |
|
|
#include "ktrace.h" |
#include "ktrace.h" |
|
#include "extern.h" |
|
|
int timestamp, decimal, fancy = 1, tail, maxdata; |
int timestamp, decimal, fancy = 1, tail, maxdata; |
char *tracefile = DEF_TRACEFILE; |
char *tracefile = DEF_TRACEFILE; |
|
|
"PT_KILL", "PT_ATTACH", "PT_DETACH", |
"PT_KILL", "PT_ATTACH", "PT_DETACH", |
}; |
}; |
|
|
|
static int fread_tail __P((void *, int, int)); |
|
static void dumpheader __P((struct ktr_header *)); |
|
static void ktrcsw __P((struct ktr_csw *)); |
|
static void ktremul __P((char *, int)); |
|
static void ktrgenio __P((struct ktr_genio *, int)); |
|
static void ktrnamei __P((const char *, int)); |
|
static void ktrpsig __P((struct ktr_psig *)); |
|
static void ktrsyscall __P((struct ktr_syscall *)); |
|
static void ktrsysret __P((struct ktr_sysret *)); |
|
static void setemul __P((const char *)); |
|
static void usage __P((void)); |
|
|
int |
int |
main(argc, argv) |
main(argc, argv) |
int argc; |
int argc; |
char *argv[]; |
char *argv[]; |
{ |
{ |
int ch, ktrlen, size; |
int ch, ktrlen, size; |
register void *m; |
void *m; |
int trpoints = ALL_POINTS; |
int trpoints = ALL_POINTS; |
|
|
current = &emulations[0]; /* native */ |
current = &emulations[0]; /* native */ |
|
|
if (tail) |
if (tail) |
(void)fflush(stdout); |
(void)fflush(stdout); |
} |
} |
|
exit(0); |
} |
} |
|
|
int |
static int |
fread_tail(buf, size, num) |
fread_tail(buf, size, num) |
char *buf; |
void *buf; |
int num, size; |
int num, size; |
{ |
{ |
int i; |
int i; |
|
|
return (i); |
return (i); |
} |
} |
|
|
void |
static void |
dumpheader(kth) |
dumpheader(kth) |
struct ktr_header *kth; |
struct ktr_header *kth; |
{ |
{ |
|
|
(void)printf("%s ", type); |
(void)printf("%s ", type); |
} |
} |
|
|
void |
static void |
ioctldecode(cmd) |
ioctldecode(cmd) |
u_long cmd; |
u_long cmd; |
{ |
{ |
|
|
printf(")"); |
printf(")"); |
} |
} |
|
|
void |
static void |
ktrsyscall(ktr) |
ktrsyscall(ktr) |
register struct ktr_syscall *ktr; |
struct ktr_syscall *ktr; |
{ |
{ |
register argsize = ktr->ktr_argsize; |
int argsize = ktr->ktr_argsize; |
register register_t *ap; |
register_t *ap; |
char *ioctlname(); |
|
|
|
if (ktr->ktr_code >= current->nsysnames || ktr->ktr_code < 0) |
if (ktr->ktr_code >= current->nsysnames || ktr->ktr_code < 0) |
(void)printf("[%d]", ktr->ktr_code); |
(void)printf("[%d]", ktr->ktr_code); |
|
|
char c = '('; |
char c = '('; |
if (fancy) { |
if (fancy) { |
if (ktr->ktr_code == SYS_ioctl) { |
if (ktr->ktr_code == SYS_ioctl) { |
char *cp; |
const char *cp; |
if (decimal) |
if (decimal) |
(void)printf("(%ld", (long)*ap); |
(void)printf("(%ld", (long)*ap); |
else |
else |
|
|
(void)putchar('\n'); |
(void)putchar('\n'); |
} |
} |
|
|
|
static void |
ktrsysret(ktr) |
ktrsysret(ktr) |
struct ktr_sysret *ktr; |
struct ktr_sysret *ktr; |
{ |
{ |
register int ret = ktr->ktr_retval; |
int ret = ktr->ktr_retval; |
register int error = ktr->ktr_error; |
int error = ktr->ktr_error; |
register int code = ktr->ktr_code; |
int code = ktr->ktr_code; |
|
|
if (code >= current->nsysnames || code < 0) |
if (code >= current->nsysnames || code < 0) |
(void)printf("[%d] ", code); |
(void)printf("[%d] ", code); |
|
|
(void)putchar('\n'); |
(void)putchar('\n'); |
} |
} |
|
|
|
static void |
ktrnamei(cp, len) |
ktrnamei(cp, len) |
char *cp; |
const char *cp; |
|
int len; |
{ |
{ |
(void)printf("\"%.*s\"\n", len, cp); |
(void)printf("\"%.*s\"\n", len, cp); |
} |
} |
|
|
|
static void |
ktremul(cp, len) |
ktremul(cp, len) |
char *cp; |
char *cp; |
|
int len; |
{ |
{ |
char name[1024]; |
char name[1024]; |
|
|
|
|
setemul(name); |
setemul(name); |
} |
} |
|
|
|
static void |
ktrgenio(ktr, len) |
ktrgenio(ktr, len) |
struct ktr_genio *ktr; |
struct ktr_genio *ktr; |
|
int len; |
{ |
{ |
register int datalen = len - sizeof (struct ktr_genio); |
int datalen = len - sizeof (struct ktr_genio); |
register char *dp = (char *)ktr + sizeof (struct ktr_genio); |
char *dp = (char *)ktr + sizeof (struct ktr_genio); |
register char *cp; |
char *cp; |
register int col = 0; |
int col = 0; |
register width; |
int width; |
char visbuf[5]; |
char visbuf[5]; |
static screenwidth = 0; |
static int screenwidth = 0; |
|
|
if (screenwidth == 0) { |
if (screenwidth == 0) { |
struct winsize ws; |
struct winsize ws; |
|
|
(void)printf("\"\n"); |
(void)printf("\"\n"); |
} |
} |
|
|
void |
static void |
ktrpsig(psig) |
ktrpsig(psig) |
struct ktr_psig *psig; |
struct ktr_psig *psig; |
{ |
{ |
|
|
(u_long)psig->action, psig->mask, psig->code); |
(u_long)psig->action, psig->mask, psig->code); |
} |
} |
|
|
void |
static void |
ktrcsw(cs) |
ktrcsw(cs) |
struct ktr_csw *cs; |
struct ktr_csw *cs; |
{ |
{ |
|
|
cs->user ? "user" : "kernel"); |
cs->user ? "user" : "kernel"); |
} |
} |
|
|
void |
static void |
usage() |
usage() |
{ |
{ |
|
|
|
|
exit(1); |
exit(1); |
} |
} |
|
|
void |
static void |
setemul(name) |
setemul(name) |
char *name; |
const char *name; |
{ |
{ |
int i; |
int i; |
for (i = 0; emulations[i].name != NULL; i++) |
for (i = 0; emulations[i].name != NULL; i++) |