#ifndef _LTTNG_EVENTS_H
#define _LTTNG_EVENTS_H
-#include <linux/irq_work.h>
#include <linux/version.h>
#include <linux/list.h>
#include <linux/kprobes.h>
#include <linux/kref.h>
#include <linux/uuid.h>
+#include <linux/irq_work.h>
#include <wrapper/uprobes.h>
#include <lttng/cpuhotplug.h>
#include <lttng/tracer.h>
LTTNG_SYSCALL_ABI_COMPAT,
};
-struct lttng_syscall {
- struct list_head node; /* chain registered syscall event_notifier */
- unsigned int syscall_id;
- bool is_compat;
-};
-
/*
* lttng_event structure is referred to by the tracing fast path. It must be
* kept small.
} kretprobe;
struct lttng_uprobe uprobe;
struct {
- char *syscall_name;
enum lttng_syscall_entryexit entryexit;
enum lttng_syscall_abi abi;
} syscall;
union {
struct lttng_kprobe kprobe;
struct lttng_uprobe uprobe;
- struct lttng_syscall syscall;
+ struct {
+ enum lttng_syscall_entryexit entryexit;
+ enum lttng_syscall_abi abi;
+ struct hlist_node node; /* chain registered syscall event_notifier */
+ unsigned int syscall_id;
+ } syscall;
+
} u;
/* Backward references: list of lttng_enabler_ref (ref to enablers) */
struct lib_ring_buffer *buf; /* Ring buffer for event notifier group. */
wait_queue_head_t read_wait;
struct irq_work wakeup_pending; /* Pending wakeup irq work. */
+ struct lttng_event_notifier *sc_unknown; /* for unknown syscalls */
+ struct lttng_event_notifier *sc_compat_unknown;
+
+ struct lttng_syscall_filter *sc_filter;
+
+ struct hlist_head *event_notifier_syscall_dispatch;
+ struct hlist_head *event_notifier_compat_syscall_dispatch;
+ struct hlist_head *event_notifier_exit_syscall_dispatch;
+ struct hlist_head *event_notifier_exit_compat_syscall_dispatch;
- struct list_head *event_notifier_syscall_dispatch;
- struct list_head *event_notifier_compat_syscall_dispatch;
+ struct hlist_head event_notifier_unknown_syscall_dispatch;
+ struct hlist_head event_notifier_compat_unknown_syscall_dispatch;
+ struct hlist_head event_notifier_exit_unknown_syscall_dispatch;
+ struct hlist_head event_notifier_exit_compat_unknown_syscall_dispatch;
- unsigned int syscall_all:1,
- sys_enter_registered:1;
+ int syscall_all_entry;
+ int syscall_all_exit;
+
+ unsigned int sys_enter_registered:1, sys_exit_registered:1;
+
+ struct lttng_counter *error_counter;
+ size_t error_counter_len;
};
struct lttng_metadata_cache {
int lttng_syscalls_register_event(struct lttng_channel *chan, void *filter);
int lttng_syscalls_unregister_event(struct lttng_channel *chan);
int lttng_syscalls_destroy_event(struct lttng_channel *chan);
-int lttng_syscall_filter_enable_event(struct lttng_channel *chan,
+int lttng_syscall_filter_enable_event(
+ struct lttng_channel *chan,
struct lttng_event *event);
-int lttng_syscall_filter_disable_event(struct lttng_channel *chan,
+int lttng_syscall_filter_disable_event(
+ struct lttng_channel *chan,
struct lttng_event *event);
+
long lttng_channel_syscall_mask(struct lttng_channel *channel,
struct lttng_kernel_syscall_mask __user *usyscall_mask);