X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fsyscall.c;h=7ae6682bb419c06c6cdd8231c5c92d0dbef475c4;hp=4c491995a1295c648d459d1f5a1b42aabab86123;hb=9897fbc95aea23f996b7543d86363a3dd72a0c53;hpb=db906c125f293467e08c043f27d2797fb748b23e diff --git a/src/bin/lttng-sessiond/syscall.c b/src/bin/lttng-sessiond/syscall.c index 4c491995a..7ae6682bb 100644 --- a/src/bin/lttng-sessiond/syscall.c +++ b/src/bin/lttng-sessiond/syscall.c @@ -333,113 +333,3 @@ error: rcu_read_unlock(); return ret; } - -/* - * Add enabled syscall to the events list using the given kernel channel. - * - * Return the number of entry of the events array that is different from size - * if the array grows. On error, return negative value and events is untouched. - */ -ssize_t syscall_list_channel(struct ltt_kernel_channel *kchan, - struct lttng_event **_events, size_t size) -{ - int err, i; - size_t new_size; - ssize_t ret, count; - char *mask = NULL; - uint32_t len; - struct lttng_event *events = NULL; - /* Hash table used to filter duplicate out. */ - struct lttng_ht *syscalls_ht = NULL; - - assert(kchan); - - /* Get syscall mask from the kernel tracer. */ - err = kernel_syscall_mask(kchan->fd, &mask, &len); - if (err < 0) { - ret = err; - goto error; - } - - ret = init_syscall_ht(&syscalls_ht); - if (ret < 0) { - goto error; - } - - count = new_size = size; - events = *_events; - - for (i = 0; i < len; i++) { - unsigned char val; - struct syscall *ksyscall; - - bitfield_read_be(mask, unsigned char, i, 1, &val); - if (!val) { - /* Syscall is disabled, continue the loop. */ - continue; - } - - /* Skip empty syscall. */ - if (*syscall_table[i].name == '\0') { - continue; - } - - /* Syscall is enabled thus add it to the events list. */ - - if (count >= new_size) { - struct lttng_event *new_events; - - /* Get the maximum here since count can be 0. */ - new_size = max(count << 1, 1); - DBG3("Listing syscall realloc events array from %zu to %zu", count, - new_size); - new_events = realloc(events, new_size * sizeof(*new_events)); - if (!new_events) { - PERROR("realloc kernel events list"); - ret = -ENOMEM; - goto error; - } - memset(new_events + count, 0, - (new_size - count) * sizeof(*new_events)); - events = new_events; - } - - rcu_read_lock(); - ksyscall = lookup_syscall(syscalls_ht, syscall_table[i].name); - if (ksyscall) { - update_event_syscall_bitness(events, i, ksyscall->index); - rcu_read_unlock(); - continue; - } - ksyscall = NULL; - rcu_read_unlock(); - - ret = add_syscall_to_ht(syscalls_ht, i, count); - if (ret < 0) { - goto error; - } - - update_event_syscall_bitness(events, i, count); - strncpy(events[count].name, syscall_table[i].name, - sizeof(events[count].name)); - events[count].enabled = 1; - events[count].type = LTTNG_EVENT_SYSCALL; - count++; - } - - rcu_read_lock(); - destroy_syscall_ht(syscalls_ht); - rcu_read_unlock(); - - *_events = events; - - return count; - -error: - rcu_read_lock(); - destroy_syscall_ht(syscalls_ht); - rcu_read_unlock(); - - free(events); - return ret; -}