X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fsyscall.c;h=7ae6682bb419c06c6cdd8231c5c92d0dbef475c4;hb=def8897149ac794709649d97d72f9b8bc7d71bd8;hp=c38f8910940f0b8bb990034ed4fa0fcef0360fef;hpb=24eb8569dc841f318d7964ca9a0ad0a4f9508a8e;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/syscall.c b/src/bin/lttng-sessiond/syscall.c index c38f89109..7ae6682bb 100644 --- a/src/bin/lttng-sessiond/syscall.c +++ b/src/bin/lttng-sessiond/syscall.c @@ -15,7 +15,6 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE #define _LGPL_SOURCE #include #include @@ -73,7 +72,7 @@ int syscall_init_table(void) } while (fscanf(fp, - "syscall { index = %lu; \ + "syscall { index = %zu; \ name = %" XSTR(SYSCALL_NAME_LEN) "[^;]; \ bitness = %u; };\n", &index, name, &bitness) == 3) { @@ -334,108 +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); - 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_KERNEL_SYSCALL; - count++; - } - - *_events = events; - - return count; - -error: - rcu_read_lock(); - destroy_syscall_ht(syscalls_ht); - rcu_read_unlock(); - - free(events); - return ret; -}