+ switch (ev->type) {
+ case LTTNG_EVENT_PROBE:
+ attr->instrumentation = LTTNG_KERNEL_KPROBE;
+ attr->u.kprobe.addr = ev->attr.probe.addr;
+ attr->u.kprobe.offset = ev->attr.probe.offset;
+ strncpy(attr->u.kprobe.symbol_name,
+ ev->attr.probe.symbol_name, LTTNG_SYM_NAME_LEN);
+ attr->u.kprobe.symbol_name[LTTNG_SYM_NAME_LEN - 1] = '\0';
+ break;
+ case LTTNG_EVENT_FUNCTION:
+ attr->instrumentation = LTTNG_KERNEL_KRETPROBE;
+ attr->u.kretprobe.addr = ev->attr.probe.addr;
+ attr->u.kretprobe.offset = ev->attr.probe.offset;
+ attr->u.kretprobe.offset = ev->attr.probe.offset;
+ strncpy(attr->u.kretprobe.symbol_name,
+ ev->attr.probe.symbol_name, LTTNG_SYM_NAME_LEN);
+ attr->u.kretprobe.symbol_name[LTTNG_SYM_NAME_LEN - 1] = '\0';
+ break;
+ case LTTNG_EVENT_FUNCTION_ENTRY:
+ attr->instrumentation = LTTNG_KERNEL_FUNCTION;
+ strncpy(attr->u.ftrace.symbol_name,
+ ev->attr.ftrace.symbol_name, LTTNG_SYM_NAME_LEN);
+ attr->u.ftrace.symbol_name[LTTNG_SYM_NAME_LEN - 1] = '\0';
+ break;
+ case LTTNG_EVENT_TRACEPOINT:
+ attr->instrumentation = LTTNG_KERNEL_TRACEPOINT;
+ break;
+ default:
+ ERR("Unknown kernel instrumentation type (%d)", ev->type);
+ goto error;
+ }
+
+ /* Copy event name */
+ strncpy(attr->name, ev->name, LTTNG_SYM_NAME_LEN);
+ attr->name[LTTNG_SYM_NAME_LEN - 1] = '\0';
+