- return ret;
-}
-
-static
-void create_unknown_event_notifier(
- struct lttng_event_notifier_enabler *event_notifier_enabler,
- enum sc_type type)
-{
- struct lttng_kernel_syscall_table *syscall_table = get_syscall_table_from_enabler(&event_notifier_enabler->parent);
- struct lttng_event_ht *events_ht = lttng_get_event_ht_from_enabler(&event_notifier_enabler->parent);
- struct lttng_kernel_event_common_private *event_priv;
- const struct lttng_kernel_event_desc *desc;
- struct hlist_head *unknown_dispatch_list;
- bool found = false;
- struct hlist_head *head;
-
- switch (type) {
- case SC_TYPE_ENTRY:
- desc = &__event_desc___syscall_entry_unknown;
- unknown_dispatch_list = &syscall_table->unknown_syscall_dispatch;
- break;
- case SC_TYPE_EXIT:
- desc = &__event_desc___syscall_exit_unknown;
- unknown_dispatch_list = &syscall_table->unknown_syscall_exit_dispatch;
- break;
- case SC_TYPE_COMPAT_ENTRY:
- desc = &__event_desc___compat_syscall_entry_unknown;
- unknown_dispatch_list = &syscall_table->compat_unknown_syscall_dispatch;
- break;
- case SC_TYPE_COMPAT_EXIT:
- desc = &__event_desc___compat_syscall_exit_unknown;
- unknown_dispatch_list = &syscall_table->compat_unknown_syscall_exit_dispatch;
- break;
- default:
- WARN_ON_ONCE(1);
- }
-
- /*
- * 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 (lttng_event_enabler_desc_match_event(&event_notifier_enabler->parent, desc, event_priv->pub))
- found = true;
- }
- if (!found)
- lttng_syscall_event_enabler_create_event(&event_notifier_enabler->parent, desc, unknown_dispatch_list, type, -1U);
-}
-
-static
-int lttng_syscalls_create_matching_event_notifiers(struct lttng_event_enabler_common *event_enabler)
-{
- int ret;
- enum lttng_kernel_abi_syscall_entryexit entryexit =
- event_enabler->event_param.u.syscall.entryexit;
- struct lttng_event_notifier_enabler *event_notifier_enabler;
-
- if (event_enabler->enabler_type != LTTNG_EVENT_ENABLER_TYPE_NOTIFIER)
- return 0;
- event_notifier_enabler = container_of(event_enabler, struct lttng_event_notifier_enabler, parent);
-
- if (entryexit == LTTNG_KERNEL_ABI_SYSCALL_ENTRY || entryexit == LTTNG_KERNEL_ABI_SYSCALL_ENTRYEXIT) {
- lttng_syscall_event_enabler_create_matching_events(&event_notifier_enabler->parent,
- sc_table.table, sc_table.len, NULL, SC_TYPE_ENTRY);
- lttng_syscall_event_enabler_create_matching_events(&event_notifier_enabler->parent,
- compat_sc_table.table, compat_sc_table.len, NULL, SC_TYPE_COMPAT_ENTRY);
- create_unknown_event_notifier(event_notifier_enabler, SC_TYPE_ENTRY);
- create_unknown_event_notifier(event_notifier_enabler, SC_TYPE_COMPAT_ENTRY);
- }