-
- if ((strcmp(bt_ctf_event_name(call_data), "exit_syscall") == 0) &&
- !last_textdump_print_newline) {
- scope = bt_ctf_get_top_level_scope(call_data,
- BT_EVENT_FIELDS);
- syscall_ret = bt_ctf_get_int64(bt_ctf_get_field(call_data,
- scope, "_ret"));
- printf("= %ld\n", syscall_ret);
- last_textdump_print_newline = 1;
- } else {
- /* we might have lost the exit_syscall event, so need to
- * print the newline in this case */
- if (last_textdump_print_newline == 0)
- printf("\n");
- if (hostname) {
- printf("%02d:%02d:%02d.%09" PRIu64 " (%s) (cpu %d) [%s (%d)] %s (",
- start.tm_hour, start.tm_min, start.tm_sec,
- ts_nsec_start, hostname, cpu_id, procname, pid,
- bt_ctf_event_name(call_data));
- } else {
- printf("%02d:%02d:%02d.%09" PRIu64 " (cpu %d) [%s (%d)] %s (",
- start.tm_hour, start.tm_min, start.tm_sec,
- ts_nsec_start, cpu_id, procname, pid,
- bt_ctf_event_name(call_data));
+ if (strncmp(bt_ctf_event_name(call_data), "sys_", 4) == 0) {
+ cpu = get_cpu(cpu_id);
+ cpu->current_syscall = g_new0(struct syscall, 1);
+ cpu->current_syscall->name = strdup(bt_ctf_event_name(call_data));
+ cpu->current_syscall->ts_start = timestamp;
+ cpu->current_syscall->cpu_id = cpu_id;
+ last_syscall = cpu->current_syscall;
+ current_syscall = 1;
+ } else if ((strncmp(bt_ctf_event_name(call_data), "exit_syscall", 12)) == 0) {
+ struct tm start_ts;
+
+ /* Return code of a syscall if it was the last displayed event. */
+ if (last_syscall && last_syscall->ts_start == prev_ts) {
+ if (last_syscall->cpu_id == cpu_id) {
+ int64_t syscall_ret;
+
+ delta = timestamp - last_syscall->ts_start;
+ scope = bt_ctf_get_top_level_scope(call_data,
+ BT_EVENT_FIELDS);
+ syscall_ret = bt_ctf_get_int64(bt_ctf_get_field(call_data,
+ scope, "_ret"));
+
+ printf(" = %" PRId64 " (+%" PRIu64 ".%09" PRIu64 ")\n",
+ syscall_ret, delta / NSEC_PER_SEC,
+ delta % NSEC_PER_SEC);
+ last_syscall = NULL;
+ goto end;
+ } else {
+ last_syscall = NULL;
+ printf(" ...interrupted...\n");
+ }