version 1.36, 2006/05/11 12:26:42 |
version 1.37, 2006/05/17 02:12:17 |
|
|
"PT_KILL", "PT_ATTACH", "PT_DETACH", "PT_IO", |
"PT_KILL", "PT_ATTACH", "PT_DETACH", "PT_IO", |
}; |
}; |
|
|
static int fread_tail(void *, int, int); |
static int fread_tail(void *, size_t, size_t); |
static void dumpheader(struct ktr_header *); |
static void dumpheader(struct ktr_header *); |
static void ktrcsw(struct ktr_csw *); |
static void ktrcsw(struct ktr_csw *); |
static void ktremul(char *, int); |
static void ktremul(char *, size_t); |
static void ktrgenio(struct ktr_genio *, int); |
static void ktrgenio(struct ktr_genio *, size_t); |
static void ktrnamei(const char *, int); |
static void ktrnamei(const char *, size_t); |
static void ktrpsig(struct ktr_psig *); |
static void ktrpsig(struct ktr_psig *); |
static void ktrsyscall(struct ktr_syscall *); |
static void ktrsyscall(struct ktr_syscall *); |
static void ktrsysret(struct ktr_sysret *); |
static void ktrsysret(struct ktr_sysret *); |
|
|
int |
int |
main(int argc, char *argv[]) |
main(int argc, char *argv[]) |
{ |
{ |
int ch, ktrlen, size, silent; |
int ch, silent; |
|
size_t ktrlen, size; |
int trpoints = ALL_POINTS; |
int trpoints = ALL_POINTS; |
void *m; |
void *m; |
|
|
|
|
if (argc > optind) |
if (argc > optind) |
usage(); |
usage(); |
|
|
m = (void *)malloc(size = 1025); |
m = malloc(size = 1025); |
if (m == NULL) |
if (m == NULL) |
errx(1, "%s", strerror(ENOMEM)); |
err(1, NULL); |
if (!freopen(tracefile, "r", stdin)) |
if (!freopen(tracefile, "r", stdin)) |
err(1, "%s", tracefile); |
err(1, "%s", tracefile); |
while (fread_tail(&ktr_header, sizeof(struct ktr_header), 1)) { |
while (fread_tail(&ktr_header, sizeof(struct ktr_header), 1)) { |
|
|
silent = 1; |
silent = 1; |
if (silent == 0 && trpoints & (1<<ktr_header.ktr_type)) |
if (silent == 0 && trpoints & (1<<ktr_header.ktr_type)) |
dumpheader(&ktr_header); |
dumpheader(&ktr_header); |
if ((ktrlen = ktr_header.ktr_len) < 0) |
ktrlen = ktr_header.ktr_len; |
errx(1, "bogus length 0x%x", ktrlen); |
|
if (ktrlen > size) { |
if (ktrlen > size) { |
void *newm; |
void *newm; |
|
|
newm = realloc(m, ktrlen+1); |
newm = realloc(m, ktrlen+1); |
if (newm == NULL) |
if (newm == NULL) |
errx(1, "%s", strerror(ENOMEM)); |
err(1, NULL); |
m = newm; |
m = newm; |
size = ktrlen; |
size = ktrlen; |
} |
} |
|
|
} |
} |
|
|
static int |
static int |
fread_tail(void *buf, int size, int num) |
fread_tail(void *buf, size_t size, size_t num) |
{ |
{ |
int i; |
int i; |
|
|
|
|
} |
} |
|
|
static void |
static void |
ktrnamei(const char *cp, int len) |
ktrnamei(const char *cp, size_t len) |
{ |
{ |
(void)printf("\"%.*s\"\n", len, cp); |
(void)printf("\"%.*s\"\n", (int)len, cp); |
} |
} |
|
|
static void |
static void |
ktremul(char *cp, int len) |
ktremul(char *cp, size_t len) |
{ |
{ |
char name[1024]; |
char name[1024]; |
|
|
|
|
} |
} |
|
|
static void |
static void |
ktrgenio(struct ktr_genio *ktr, int len) |
ktrgenio(struct ktr_genio *ktr, size_t len) |
{ |
{ |
unsigned char *dp = (unsigned char *)ktr + sizeof (struct ktr_genio); |
unsigned char *dp = (unsigned char *)ktr + sizeof(struct ktr_genio); |
int i, j, datalen = len - sizeof (struct ktr_genio); |
int i, j; |
|
size_t datalen = len - sizeof(struct ktr_genio); |
static int screenwidth = 0; |
static int screenwidth = 0; |
int col = 0, width, bpl; |
int col = 0, width, bpl; |
unsigned char visbuf[5], *cp, c; |
unsigned char visbuf[5], *cp, c; |
|
|
else |
else |
screenwidth = 80; |
screenwidth = 80; |
} |
} |
printf("fd %d %s %d bytes\n", ktr->ktr_fd, |
printf("fd %d %s %zu bytes\n", ktr->ktr_fd, |
ktr->ktr_rw == UIO_READ ? "read" : "wrote", datalen); |
ktr->ktr_rw == UIO_READ ? "read" : "wrote", datalen); |
if (maxdata && datalen > maxdata) |
if (maxdata && datalen > maxdata) |
datalen = maxdata; |
datalen = maxdata; |