}
break;
case LTTNG_KERNEL_UPROBE:
+ /*
+ * Needs to be explicitly enabled after creation, since
+ * we may want to apply filters.
+ */
+ event->enabled = 0;
+ event->registered = 1;
+
+ /*
+ * Populate lttng_event structure before event
+ * registration.
+ */
+ smp_wmb();
ret = lttng_uprobes_register(event_param->name,
- event_param->u.uprobe.path,
- event_param->u.uprobe.offset,
+ event_param->u.uprobe.fd,
event);
if (ret)
goto register_error;
desc->name);
break;
case LTTNG_KERNEL_KPROBE:
+ case LTTNG_KERNEL_UPROBE:
case LTTNG_KERNEL_KRETPROBE:
case LTTNG_KERNEL_FUNCTION:
case LTTNG_KERNEL_NOOP:
return ret;
}
+int lttng_event_add_callsite(struct lttng_event *event,
+ struct lttng_kernel_event_callsite __user *callsite)
+{
+
+ switch (event->instrumentation) {
+ case LTTNG_KERNEL_UPROBE:
+ return lttng_uprobes_add_callsite(event, callsite);
+ default:
+ return -EINVAL;
+ }
+}
+
int lttng_enabler_attach_context(struct lttng_enabler *enabler,
struct lttng_kernel_context *context_param)
{