return 0;
return 1;
}
-
+
static void print_rec(struct dbg_line ***linevp, int used, int fdout)
{
struct dbg_line **linev = *linevp;
struct dbg_line *line = linev[i];
struct ptldebug_header *hdr = line->hdr;
char out[4097];
+ char *buf = out;
int bytes;
+ ssize_t bytes_written;
- bytes = sprintf(out, "%08x:%08x:%u:%u.%06llu:%u:%u:%u:(%s:%u:%s()) %s",
- hdr->ph_subsys, hdr->ph_mask, hdr->ph_cpu_id,
+ bytes = sprintf(out, "%08x:%08x:%u.%u%s:%u.%06llu:%u:%u:%u:(%s:%u:%s()) %s",
+ hdr->ph_subsys, hdr->ph_mask,
+ hdr->ph_cpu_id, hdr->ph_type,
+ hdr->ph_flags & PH_FLAG_FIRST_RECORD ? "F" : "",
hdr->ph_sec, (unsigned long long)hdr->ph_usec,
hdr->ph_stack, hdr->ph_pid, hdr->ph_extern_pid,
line->file, hdr->ph_line_num, line->fn, line->text);
-
- write(fdout, out, bytes);
+ while (bytes > 0) {
+ bytes_written = write(fdout, buf, bytes);
+ if (bytes_written <= 0)
+ break;
+ bytes -= bytes_written;
+ buf += bytes_written;
+ }
free(line->hdr);
free(line);
}
fprintf(stderr, " subsystem = %x\n", hdr->ph_subsys);
fprintf(stderr, " mask = %x\n", hdr->ph_mask);
fprintf(stderr, " cpu_id = %u\n", hdr->ph_cpu_id);
+ fprintf(stderr, " type = %u\n", hdr->ph_type);
fprintf(stderr, " seconds = %u\n", hdr->ph_sec);
fprintf(stderr, " microseconds = %lu\n", (long)hdr->ph_usec);
fprintf(stderr, " stack = %u\n", hdr->ph_stack);
goto readhdr;
if (hdr->ph_len > 4094 || /* is this header bogus? */
- hdr->ph_cpu_id > 65536 ||
+ hdr->ph_type >= CFS_TCD_TYPE_MAX ||
hdr->ph_stack > 65536 ||
hdr->ph_sec < (1 << 30) ||
hdr->ph_usec > 1000000000 ||
printf("Debug log: %lu lines, %lu kept, %lu dropped, %lu bad.\n",
dropped + kept + bad, kept, dropped, bad);
-
+
return 0;
}
strcpy(filename, argv[1]);
else
sprintf(filename, "%s"CFS_TIME_T".%u",
- DEBUG_FILE_PATH_DEFAULT, time(NULL), getpid());
+ LIBCFS_DEBUG_FILE_PATH_DEFAULT, time(NULL), getpid());
if (stat(filename, &st) == 0 && S_ISREG(st.st_mode))
unlink(filename);
-
+
fdin = dbg_open_ctlhandle(DUMP_KERNEL_CTL_NAME);
if (fdin < 0) {
fprintf(stderr, "open(dump_kernel) failed: %s\n",
if (raw)
return 0;
-
+
fdin = open(filename, O_RDONLY);
if (fdin < 0) {
if (errno == ENOENT) /* no dump file created */
return 1;
}
if (argc > 1) {
- fdout = open(argv[1], O_WRONLY|O_CREAT);
+ fdout = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC,
+ S_IRUSR | S_IWUSR);
if (fdout < 0) {
fprintf(stderr, "fopen(%s) failed: %s\n", argv[1],
strerror(errno));