#include <lttng/userspace-probe.h>
#include <lttng/userspace-probe-internal.h>
-#include <lttng/condition/event-rule.h>
-#include <lttng/condition/event-rule-internal.h>
+#include <lttng/condition/on-event.h>
+#include <lttng/condition/on-event-internal.h>
#include <lttng/event-rule/event-rule.h>
#include <lttng/event-rule/event-rule-internal.h>
-#include <lttng/event-rule/uprobe-internal.h>
+#include <lttng/event-rule/userspace-probe-internal.h>
#include "lttng-sessiond.h"
#include "lttng-syscall.h"
assert(creds);
event_rule_type = lttng_event_rule_get_type(rule);
- assert(event_rule_type == LTTNG_EVENT_RULE_TYPE_UPROBE);
+ assert(event_rule_type == LTTNG_EVENT_RULE_TYPE_USERSPACE_PROBE);
- status = lttng_event_rule_uprobe_get_location(rule, &location);
+ status = lttng_event_rule_userspace_probe_get_location(rule, &location);
if (status != LTTNG_EVENT_RULE_STATUS_OK || !location) {
ret = -1;
goto end;
int kernel_create_event(struct lttng_event *ev,
struct ltt_kernel_channel *channel,
char *filter_expression,
- struct lttng_filter_bytecode *filter)
+ struct lttng_bytecode *filter)
{
int err, fd;
enum lttng_error_code ret;
enum lttng_event_rule_type event_rule_type;
struct ltt_kernel_event_notifier_rule *event_notifier_rule;
struct lttng_kernel_event_notifier kernel_event_notifier = {};
+ unsigned int capture_bytecode_count = 0, i;
const struct lttng_condition *condition = NULL;
const struct lttng_event_rule *event_rule = NULL;
+ enum lttng_condition_status cond_status;
assert(trigger);
assert(condition);
condition_type = lttng_condition_get_type(condition);
- assert(condition_type == LTTNG_CONDITION_TYPE_EVENT_RULE_HIT);
+ assert(condition_type == LTTNG_CONDITION_TYPE_ON_EVENT);
/* Does not acquire a reference. */
- condition_status = lttng_condition_event_rule_get_rule(
+ condition_status = lttng_condition_on_event_get_rule(
condition, &event_rule);
assert(condition_status == LTTNG_CONDITION_STATUS_OK);
assert(event_rule);
}
if (lttng_event_rule_get_type(event_rule) ==
- LTTNG_EVENT_RULE_TYPE_UPROBE) {
+ LTTNG_EVENT_RULE_TYPE_USERSPACE_PROBE) {
ret = userspace_probe_event_rule_add_callsites(
event_rule, creds, event_notifier_rule->fd);
if (ret) {
}
}
+ /* Set the capture bytecode if any. */
+ cond_status = lttng_condition_on_event_get_capture_descriptor_count(
+ condition, &capture_bytecode_count);
+ assert(cond_status == LTTNG_CONDITION_STATUS_OK);
+
+ for (i = 0; i < capture_bytecode_count; i++) {
+ const struct lttng_bytecode *capture_bytecode =
+ lttng_condition_on_event_get_capture_bytecode_at_index(
+ condition, i);
+
+ if (capture_bytecode == NULL) {
+ ERR("Unexpected NULL capture bytecode on condition");
+ error_code_ret = LTTNG_ERR_KERN_ENABLE_FAIL;
+ goto error;
+ }
+
+ ret = kernctl_capture(event_notifier_rule->fd, capture_bytecode);
+ if (ret < 0) {
+ ERR("Failed to set capture bytecode on event notifier rule fd: fd = %d",
+ event_notifier_rule->fd);
+ error_code_ret = LTTNG_ERR_KERN_ENABLE_FAIL;
+ goto error;
+ }
+ }
+
err = kernctl_enable(event_notifier_rule->fd);
if (err < 0) {
switch (-err) {
assert(condition);
/* Does not acquire a reference to the event rule. */
- status = lttng_condition_event_rule_get_rule(
+ status = lttng_condition_on_event_get_rule(
condition, &event_rule);
assert(status == LTTNG_CONDITION_STATUS_OK);