X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-syscalls.c;h=de4dbacefc5c23e7331081696585e4a278b82a7c;hb=873a97436b75e272560fc164813971c8b5461eaa;hp=3208cd4d600696af741eafd6483bd3411f3a5cfa;hpb=83006ee0d75381816540c339e5dda7aba72fafa3;p=lttng-modules.git diff --git a/src/lttng-syscalls.c b/src/lttng-syscalls.c index 3208cd4d..de4dbace 100644 --- a/src/lttng-syscalls.c +++ b/src/lttng-syscalls.c @@ -537,7 +537,6 @@ int lttng_create_syscall_event_if_missing(const struct trace_syscall_entry *tabl enum sc_type type) { struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(&syscall_event_enabler->parent); - struct lttng_kernel_syscall_table *syscall_table = get_syscall_table_from_enabler(&syscall_event_enabler->parent); struct lttng_kernel_channel_buffer *chan = syscall_event_enabler->chan; unsigned int i; @@ -555,16 +554,15 @@ int lttng_create_syscall_event_if_missing(const struct trace_syscall_entry *tabl /* Unknown syscall */ continue; } - if (lttng_desc_match_enabler(desc, - lttng_event_recorder_enabler_as_enabler(syscall_event_enabler)) <= 0) + if (!lttng_desc_match_enabler(desc, + lttng_event_recorder_enabler_as_enabler(syscall_event_enabler))) continue; /* * Check if already created. */ head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name); lttng_hlist_for_each_entry(event_priv, head, hlist_node) { - if (event_priv->desc == desc - && get_syscall_table_from_event(event_priv->pub) == syscall_table) + if (lttng_event_enabler_desc_match_event(&syscall_event_enabler->parent, desc, event_priv->pub)) found = true; } if (found) @@ -753,7 +751,7 @@ int lttng_syscalls_populate_events(struct lttng_event_enabler_common *syscall_ev /* * Should be called with sessions lock held. */ -int lttng_syscalls_register_event(struct lttng_event_enabler_common *syscall_event_enabler) +int lttng_event_enabler_create_syscall_events_if_missing(struct lttng_event_enabler_common *syscall_event_enabler) { struct lttng_kernel_syscall_table *syscall_table = get_syscall_table_from_enabler(syscall_event_enabler); int ret; @@ -798,8 +796,6 @@ int lttng_syscalls_register_event(struct lttng_event_enabler_common *syscall_eve if (ret) return ret; - wrapper_vmalloc_sync_mappings(); - if (!syscall_table->sys_enter_registered) { ret = lttng_wrapper_tracepoint_probe_register("sys_enter", (void *) syscall_entry_event_probe, syscall_table); @@ -882,8 +878,7 @@ int create_unknown_event_notifier( */ head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name); lttng_hlist_for_each_entry(event_priv, head, hlist_node) { - if (event_priv->desc == desc && - event_priv->user_token == base_enabler->user_token) + if (lttng_event_enabler_desc_match_event(base_enabler, desc, event_priv->pub)) found = true; } if (found) @@ -956,8 +951,7 @@ static int create_matching_event_notifiers( */ head = utils_borrow_hash_table_bucket(events_ht->table, LTTNG_EVENT_HT_SIZE, desc->event_name); lttng_hlist_for_each_entry(event_priv, head, hlist_node) { - if (event_priv->desc == desc - && event_priv->user_token == syscall_event_notifier_enabler->parent.user_token) + if (lttng_event_enabler_desc_match_event(&syscall_event_notifier_enabler->parent, desc, event_priv->pub)) found = 1; } if (found) @@ -1401,6 +1395,29 @@ int lttng_syscall_filter_disable_event(struct lttng_kernel_event_common *event) return 0; } +void lttng_syscall_table_set_wildcard_all(struct lttng_event_enabler_common *event_enabler) +{ + struct lttng_kernel_syscall_table *syscall_table = get_syscall_table_from_enabler(event_enabler); + enum lttng_kernel_abi_syscall_entryexit entryexit; + int enabled = event_enabler->enabled; + + if (event_enabler->event_param.instrumentation != LTTNG_KERNEL_ABI_SYSCALL) + return; + if (event_enabler->event_param.u.syscall.abi != LTTNG_KERNEL_ABI_SYSCALL_ABI_ALL) + return; + if (event_enabler->event_param.u.syscall.match != LTTNG_KERNEL_ABI_SYSCALL_MATCH_NAME) + return; + if (strcmp(event_enabler->event_param.name, "*")) + return; + + entryexit = event_enabler->event_param.u.syscall.entryexit; + if (entryexit == LTTNG_KERNEL_ABI_SYSCALL_ENTRY || entryexit == LTTNG_KERNEL_ABI_SYSCALL_ENTRYEXIT) + WRITE_ONCE(syscall_table->syscall_all_entry, enabled); + + if (entryexit == LTTNG_KERNEL_ABI_SYSCALL_EXIT || entryexit == LTTNG_KERNEL_ABI_SYSCALL_ENTRYEXIT) + WRITE_ONCE(syscall_table->syscall_all_exit, enabled); +} + static const struct trace_syscall_entry *syscall_list_get_entry(loff_t *pos) {