Fix: new syscall names in textdump
[lttngtop.git] / src / lttngtop.c
index a2b552c6242bd4816c6c5d2eca8ec896c2897945..c3596aa23f697a5c487ddf0004b03e578b279f96 100644 (file)
@@ -40,6 +40,7 @@
 #include <sys/mman.h>
 #include <sys/wait.h>
 #include <lttng/lttng.h>
+
 #ifdef LTTNGTOP_MMAP_LIVE
 #include <lttng/lttngtop-helper.h>
 #include <babeltrace/lttngtopmmappacketseek.h>
@@ -265,6 +266,7 @@ enum bt_cb_ret textdump(struct bt_ctf_event *call_data, void *private_data)
        const char *hostname, *procname;
        struct cputime *cpu;
        char *from_syscall = NULL;
+       int syscall_exit = 0;
 
        timestamp = bt_ctf_get_timestamp(call_data);
 
@@ -319,15 +321,22 @@ enum bt_cb_ret textdump(struct bt_ctf_event *call_data, void *private_data)
                }
        }
 
-       if (last_syscall && (strncmp(bt_ctf_event_name(call_data),
-                                "exit_syscall", 12)) != 0) {
+       if (((strncmp(bt_ctf_event_name(call_data),
+                                               "exit_syscall", 12)) == 0) ||
+                       ((strncmp(bt_ctf_event_name(call_data),
+                                "syscall_exit", 12)) == 0)) {
+               syscall_exit = 1;
+       }
+
+       if (last_syscall && !syscall_exit) {
                last_syscall = NULL;
                fprintf(output, " ...interrupted...\n");
        }
 
        cpu_id = get_cpu_id(call_data);
        procname = get_context_comm(call_data);
-       if (strncmp(bt_ctf_event_name(call_data), "sys_", 4) == 0) {
+       if ((strncmp(bt_ctf_event_name(call_data), "sys_", 4) == 0) ||
+                       (strncmp(bt_ctf_event_name(call_data), "syscall_entry", 13) == 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));
@@ -335,7 +344,7 @@ enum bt_cb_ret textdump(struct bt_ctf_event *call_data, void *private_data)
                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) {
+       } else if (syscall_exit) {
                struct tm start_ts;
 
                /* Return code of a syscall if it was the last displayed event. */
@@ -943,15 +952,36 @@ void iter_trace(struct bt_context *bt_ctx)
        bt_ctf_iter_add_callback(iter,
                        g_quark_from_static_string("sys_open"),
                        NULL, 0, handle_sys_open, NULL, NULL, NULL);
+       bt_ctf_iter_add_callback(iter,
+                       g_quark_from_static_string("syscall_entry_open"),
+                       NULL, 0, handle_sys_open, NULL, NULL, NULL);
+
        bt_ctf_iter_add_callback(iter,
                        g_quark_from_static_string("sys_socket"),
                        NULL, 0, handle_sys_socket, NULL, NULL, NULL);
+       bt_ctf_iter_add_callback(iter,
+                       g_quark_from_static_string("syscall_entry_socket"),
+                       NULL, 0, handle_sys_socket, NULL, NULL, NULL);
+
        bt_ctf_iter_add_callback(iter,
                        g_quark_from_static_string("sys_close"),
                        NULL, 0, handle_sys_close, NULL, NULL, NULL);
+       bt_ctf_iter_add_callback(iter,
+                       g_quark_from_static_string("syscall_entry_close"),
+                       NULL, 0, handle_sys_close, NULL, NULL, NULL);
+
        bt_ctf_iter_add_callback(iter,
                        g_quark_from_static_string("exit_syscall"),
                        NULL, 0, handle_exit_syscall, NULL, NULL, NULL);
+       bt_ctf_iter_add_callback(iter,
+                       g_quark_from_static_string("syscall_exit_open"),
+                       NULL, 0, handle_exit_syscall, NULL, NULL, NULL);
+       bt_ctf_iter_add_callback(iter,
+                       g_quark_from_static_string("syscall_exit_socket"),
+                       NULL, 0, handle_exit_syscall, NULL, NULL, NULL);
+       bt_ctf_iter_add_callback(iter,
+                       g_quark_from_static_string("syscall_exit_close"),
+                       NULL, 0, handle_exit_syscall, NULL, NULL, NULL);
        if (opt_textdump) {
                bt_ctf_iter_add_callback(iter, 0, NULL, 0,
                                textdump,
@@ -969,9 +999,22 @@ void iter_trace(struct bt_context *bt_ctx)
                bt_ctf_iter_add_callback(iter,
                                g_quark_from_static_string("sys_write"),
                                NULL, 0, handle_sys_write, NULL, NULL, NULL);
+               bt_ctf_iter_add_callback(iter,
+                               g_quark_from_static_string("syscall_entry_write"),
+                               NULL, 0, handle_sys_write, NULL, NULL, NULL);
+               bt_ctf_iter_add_callback(iter,
+                               g_quark_from_static_string("syscall_exit_write"),
+                               NULL, 0, handle_exit_syscall, NULL, NULL, NULL);
+
                bt_ctf_iter_add_callback(iter,
                                g_quark_from_static_string("sys_read"),
                                NULL, 0, handle_sys_read, NULL, NULL, NULL);
+               bt_ctf_iter_add_callback(iter,
+                               g_quark_from_static_string("syscall_entry_read"),
+                               NULL, 0, handle_sys_read, NULL, NULL, NULL);
+               bt_ctf_iter_add_callback(iter,
+                               g_quark_from_static_string("syscall_exit_read"),
+                               NULL, 0, handle_exit_syscall, NULL, NULL, NULL);
 
                /* for kprobes */
                if (lttngtop.kprobes_table) {
This page took 0.023066 seconds and 4 git commands to generate.