#ifndef _LTTNG_EVENTS_H
#define _LTTNG_EVENTS_H
-#include <linux/version.h>
+#include <lttng/kernel-version.h>
#include <linux/list.h>
#include <linux/kprobes.h>
#include <linux/kref.h>
* lttng_ctx_field because cpu hotplug needs fixed-location addresses.
*/
struct lttng_perf_counter_field {
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0))
struct lttng_cpuhp_node cpuhp_prepare;
struct lttng_cpuhp_node cpuhp_online;
#else
struct {
enum lttng_syscall_entryexit entryexit;
enum lttng_syscall_abi abi;
+ struct hlist_node node; /* chain registered syscall event */
} syscall;
} u;
struct list_head list; /* Event list in session */
int has_enablers_without_bytecode;
};
+struct lttng_kernel_notifier_ctx {
+ int eval_capture;
+};
+
// FIXME: Really similar to lttng_event above. Could those be merged ?
struct lttng_event_notifier {
enum lttng_event_type evtype; /* First field. */
size_t num_captures;
struct list_head capture_bytecode_runtime_head;
int has_enablers_without_bytecode;
+ int eval_capture; /* Should evaluate capture */
void (*send_notification)(struct lttng_event_notifier *event_notifier,
struct lttng_probe_ctx *lttng_probe_ctx,
- const char *interpreter_stack_data);
+ const char *interpreter_stack_data,
+ struct lttng_kernel_notifier_ctx *notif_ctx);
struct lttng_event_notifier_group *group; /* Weak ref */
};
struct list_head list; /* Channel list */
struct lttng_channel_ops *ops;
struct lttng_transport *transport;
- struct lttng_event **sc_table; /* for syscall tracing */
- struct lttng_event **compat_sc_table;
- struct lttng_event **sc_exit_table; /* for syscall exit tracing */
- struct lttng_event **compat_sc_exit_table;
- struct lttng_event *sc_unknown; /* for unknown syscalls */
- struct lttng_event *sc_compat_unknown;
- struct lttng_event *sc_exit_unknown;
- struct lttng_event *compat_sc_exit_unknown;
+ struct hlist_head *sc_table; /* for syscall tracing */
+ struct hlist_head *compat_sc_table;
+ struct hlist_head *sc_exit_table; /* for syscall exit tracing */
+ struct hlist_head *compat_sc_exit_table;
+ struct hlist_head sc_unknown; /* for unknown syscalls */
+ struct hlist_head sc_compat_unknown;
+ struct hlist_head sc_exit_unknown;
+ struct hlist_head compat_sc_exit_unknown;
struct lttng_syscall_filter *sc_filter;
int header_type; /* 0: unset, 1: compact, 2: large */
enum channel_type channel_type;
- int syscall_all;
+ int syscall_all_entry;
+ int syscall_all_exit;
unsigned int metadata_dumped:1,
sys_enter_registered:1,
sys_exit_registered:1,
struct lttng_enabler *enabler);
#if defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS)
-int lttng_syscalls_register_event(struct lttng_channel *chan, void *filter);
-int lttng_syscalls_unregister_event(struct lttng_channel *chan);
+int lttng_syscalls_register_event(struct lttng_event_enabler *event_enabler, void *filter);
+int lttng_syscalls_unregister_channel(struct lttng_channel *chan);
int lttng_syscalls_destroy_event(struct lttng_channel *chan);
int lttng_syscall_filter_enable_event(
struct lttng_channel *chan,
void *filter);
int lttng_syscals_create_matching_event_notifiers(
struct lttng_event_notifier_enabler *event_notifier_enabler, void *filter);
-int lttng_syscalls_unregister_event_notifier(struct lttng_event_notifier_group *group);
+int lttng_syscalls_unregister_event_notifier_group(struct lttng_event_notifier_group *group);
int lttng_syscall_filter_enable_event_notifier(struct lttng_event_notifier *event_notifier);
int lttng_syscall_filter_disable_event_notifier(struct lttng_event_notifier *event_notifier);
#else
static inline int lttng_syscalls_register_event(
- struct lttng_channel *chan, void *filter)
+ struct lttng_event_enabler *event_enabler, void *filter)
{
return -ENOSYS;
}
-static inline int lttng_syscalls_unregister_event(struct lttng_channel *chan)
+static inline int lttng_syscalls_unregister_channel(struct lttng_channel *chan)
{
return 0;
}
return -ENOSYS;
}
-static inline int lttng_syscalls_unregister_event_notifier(
+static inline int lttng_syscalls_unregister_event_notifier_group(
struct lttng_event_notifier_group *group)
{
return 0;
struct lttng_ctx *ctx,
struct list_head *instance_bytecode_runtime_head,
struct list_head *enabler_bytecode_runtime_head);
+void lttng_free_event_filter_runtime(struct lttng_event *event);
+void lttng_free_event_notifier_filter_runtime(struct lttng_event_notifier *event_notifier);
int lttng_probes_init(void);
int lttng_add_callstack_to_ctx(struct lttng_ctx **ctx, int type);
#if defined(CONFIG_CGROUPS) && \
- ((LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)) || \
+ ((LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,6,0)) || \
LTTNG_UBUNTU_KERNEL_RANGE(4,4,0,0, 4,5,0,0))
int lttng_add_cgroup_ns_to_ctx(struct lttng_ctx **ctx);
#else
#endif
#if defined(CONFIG_IPC_NS) && \
- (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
+ (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,8,0))
int lttng_add_ipc_ns_to_ctx(struct lttng_ctx **ctx);
#else
static inline
#endif
#if !defined(LTTNG_MNT_NS_MISSING_HEADER) && \
- (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
+ (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,8,0))
int lttng_add_mnt_ns_to_ctx(struct lttng_ctx **ctx);
#else
static inline
#endif
#if defined(CONFIG_NET_NS) && \
- (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
+ (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,8,0))
int lttng_add_net_ns_to_ctx(struct lttng_ctx **ctx);
#else
static inline
#endif
#if defined(CONFIG_PID_NS) && \
- (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
+ (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,8,0))
int lttng_add_pid_ns_to_ctx(struct lttng_ctx **ctx);
#else
static inline
#endif
#if defined(CONFIG_USER_NS) && \
- (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
+ (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,8,0))
int lttng_add_user_ns_to_ctx(struct lttng_ctx **ctx);
#else
static inline
#endif
#if defined(CONFIG_UTS_NS) && \
- (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
+ (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,8,0))
int lttng_add_uts_ns_to_ctx(struct lttng_ctx **ctx);
#else
static inline
#endif
#if defined(CONFIG_TIME_NS) && \
- (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0))
+ (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0))
int lttng_add_time_ns_to_ctx(struct lttng_ctx **ctx);
#else
static inline