Add syscall listing support
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index bbc122152204bf4308a15f9afbe6a58dd4b587b3..1fd799f0d819e375fdc05e672dfec14cccc275e6 100644 (file)
@@ -35,6 +35,7 @@
 #include "kernel-consumer.h"
 #include "lttng-sessiond.h"
 #include "utils.h"
+#include "syscall.h"
 
 #include "cmd.h"
 
@@ -360,7 +361,8 @@ static int list_lttng_kernel_events(char *channel_name,
        DBG("Listing events for channel %s", kchan->channel->name);
 
        if (nb_event == 0) {
-               goto end;
+               *events = NULL;
+               goto syscall;
        }
 
        *events = zmalloc(nb_event * sizeof(struct lttng_event));
@@ -407,7 +409,19 @@ static int list_lttng_kernel_events(char *channel_name,
                i++;
        }
 
-end:
+syscall:
+       if (syscall_table) {
+               ssize_t new_size;
+
+               new_size = syscall_list_channel(kchan, events, nb_event);
+               if (new_size < 0) {
+                       free(events);
+                       ret = -new_size;
+                       goto error;
+               }
+               nb_event = new_size;
+       }
+
        return nb_event;
 
 error:
@@ -1070,6 +1084,9 @@ int cmd_disable_event(struct ltt_session *session, int domain,
                        break;
                case LTTNG_EVENT_SYSCALL:
                        ret = event_kernel_disable_syscall(kchan, event_name);
+                       if (ret != LTTNG_OK) {
+                               goto error;
+                       }
                        break;
                default:
                        ret = LTTNG_ERR_UNK;
@@ -1178,9 +1195,6 @@ int disable_kevent_all(struct ltt_session *session, int domain,
                struct lttng_event *event)
 {
        int ret;
-       char *event_name;
-
-       event_name = event->name;
 
        rcu_read_lock();
 
@@ -1216,7 +1230,10 @@ int disable_kevent_all(struct ltt_session *session, int domain,
                        }
                        break;
                case LTTNG_EVENT_SYSCALL:
-                       ret = event_kernel_disable_syscall(kchan, event_name);
+                       ret = event_kernel_disable_syscall(kchan, "");
+                       if (ret != LTTNG_OK) {
+                               goto error;
+                       }
                        break;
                default:
                        ret = LTTNG_ERR_UNK;
@@ -1457,6 +1474,9 @@ int cmd_enable_event(struct ltt_session *session, struct lttng_domain *domain,
                        break;
                case LTTNG_EVENT_SYSCALL:
                        ret = event_kernel_enable_syscall(kchan, event->name);
+                       if (ret != LTTNG_OK) {
+                               goto error;
+                       }
                        break;
                default:
                        ret = LTTNG_ERR_UNK;
@@ -1663,6 +1683,9 @@ int enable_kevent_all(struct ltt_session *session,
                switch (event->type) {
                case LTTNG_EVENT_SYSCALL:
                        ret = event_kernel_enable_syscall(kchan, "");
+                       if (ret != LTTNG_OK) {
+                               goto error;
+                       }
                        break;
                case LTTNG_EVENT_TRACEPOINT:
                        /*
@@ -1778,6 +1801,11 @@ error:
        return -ret;
 }
 
+ssize_t cmd_list_syscalls(struct lttng_event **events)
+{
+       return syscall_table_list(events);
+}
+
 /*
  * Command LTTNG_START_TRACE processed by the client thread.
  */
This page took 0.025085 seconds and 4 git commands to generate.