X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Ftrace-kernel.c;h=29a60cef5f8dbb715fde1a19be4e294d45a5a29e;hp=dc15829ba5c6488424327404922c665f4bc08f4f;hb=ddd915a3dd0eeb1667286051cc1e17017436fe5e;hpb=412d7227e69ec845e44c49082a417f9454d9b55d diff --git a/src/bin/lttng-sessiond/trace-kernel.c b/src/bin/lttng-sessiond/trace-kernel.c index dc15829ba..29a60cef5 100644 --- a/src/bin/lttng-sessiond/trace-kernel.c +++ b/src/bin/lttng-sessiond/trace-kernel.c @@ -18,13 +18,14 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -251,7 +252,7 @@ struct ltt_kernel_channel *trace_kernel_create_channel( strncpy(lkc->channel->name, DEFAULT_CHANNEL_NAME, sizeof(lkc->channel->name)); } - lkc->channel->name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + lkc->channel->name[LTTNG_KERNEL_ABI_SYM_NAME_LEN - 1] = '\0'; lkc->fd = -1; lkc->stream_count = 0; @@ -280,7 +281,7 @@ error: * Return the allocated object or NULL on error. */ struct ltt_kernel_context *trace_kernel_create_context( - struct lttng_kernel_context *ctx) + struct lttng_kernel_abi_context *ctx) { struct ltt_kernel_context *kctx; @@ -334,14 +335,14 @@ enum lttng_error_code trace_kernel_create_event( struct ltt_kernel_event **kernel_event) { enum lttng_error_code ret; - struct lttng_kernel_event *attr; + struct lttng_kernel_abi_event *attr; struct ltt_kernel_event *local_kernel_event; struct lttng_userspace_probe_location *userspace_probe_location = NULL; assert(ev); local_kernel_event = zmalloc(sizeof(struct ltt_kernel_event)); - attr = zmalloc(sizeof(struct lttng_kernel_event)); + attr = zmalloc(sizeof(struct lttng_kernel_abi_event)); if (local_kernel_event == NULL || attr == NULL) { PERROR("kernel event zmalloc"); ret = LTTNG_ERR_NOMEM; @@ -350,12 +351,12 @@ enum lttng_error_code trace_kernel_create_event( switch (ev->type) { case LTTNG_EVENT_PROBE: - attr->instrumentation = LTTNG_KERNEL_KPROBE; + attr->instrumentation = LTTNG_KERNEL_ABI_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_KERNEL_SYM_NAME_LEN); - attr->u.kprobe.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + ev->attr.probe.symbol_name, LTTNG_KERNEL_ABI_SYM_NAME_LEN); + attr->u.kprobe.symbol_name[LTTNG_KERNEL_ABI_SYM_NAME_LEN - 1] = '\0'; break; case LTTNG_EVENT_USERSPACE_PROBE: { @@ -376,7 +377,7 @@ enum lttng_error_code trace_kernel_create_event( * In the interactions with the kernel tracer, we use the * uprobe term. */ - attr->instrumentation = LTTNG_KERNEL_UPROBE; + attr->instrumentation = LTTNG_KERNEL_ABI_UPROBE; lookup = lttng_userspace_probe_location_get_lookup_method( location); @@ -422,30 +423,30 @@ enum lttng_error_code trace_kernel_create_event( break; } case LTTNG_EVENT_FUNCTION: - attr->instrumentation = LTTNG_KERNEL_KRETPROBE; + attr->instrumentation = LTTNG_KERNEL_ABI_KRETPROBE; attr->u.kretprobe.addr = ev->attr.probe.addr; attr->u.kretprobe.offset = ev->attr.probe.offset; strncpy(attr->u.kretprobe.symbol_name, - ev->attr.probe.symbol_name, LTTNG_KERNEL_SYM_NAME_LEN); - attr->u.kretprobe.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + ev->attr.probe.symbol_name, LTTNG_KERNEL_ABI_SYM_NAME_LEN); + attr->u.kretprobe.symbol_name[LTTNG_KERNEL_ABI_SYM_NAME_LEN - 1] = '\0'; break; case LTTNG_EVENT_FUNCTION_ENTRY: - attr->instrumentation = LTTNG_KERNEL_FUNCTION; + attr->instrumentation = LTTNG_KERNEL_ABI_FUNCTION; strncpy(attr->u.ftrace.symbol_name, - ev->attr.ftrace.symbol_name, LTTNG_KERNEL_SYM_NAME_LEN); - attr->u.ftrace.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + ev->attr.ftrace.symbol_name, LTTNG_KERNEL_ABI_SYM_NAME_LEN); + attr->u.ftrace.symbol_name[LTTNG_KERNEL_ABI_SYM_NAME_LEN - 1] = '\0'; break; case LTTNG_EVENT_TRACEPOINT: - attr->instrumentation = LTTNG_KERNEL_TRACEPOINT; + attr->instrumentation = LTTNG_KERNEL_ABI_TRACEPOINT; break; case LTTNG_EVENT_SYSCALL: - attr->instrumentation = LTTNG_KERNEL_SYSCALL; - attr->u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_ALL; - attr->u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_ENTRYEXIT; - attr->u.syscall.match = LTTNG_KERNEL_SYSCALL_MATCH_NAME; + attr->instrumentation = LTTNG_KERNEL_ABI_SYSCALL; + attr->u.syscall.abi = LTTNG_KERNEL_ABI_SYSCALL_ABI_ALL; + attr->u.syscall.entryexit = LTTNG_KERNEL_ABI_SYSCALL_ENTRYEXIT; + attr->u.syscall.match = LTTNG_KERNEL_ABI_SYSCALL_MATCH_NAME; break; case LTTNG_EVENT_ALL: - attr->instrumentation = LTTNG_KERNEL_ALL; + attr->instrumentation = LTTNG_KERNEL_ABI_ALL; break; default: ERR("Unknown kernel instrumentation type (%d)", ev->type); @@ -454,8 +455,8 @@ enum lttng_error_code trace_kernel_create_event( } /* Copy event name */ - strncpy(attr->name, ev->name, LTTNG_KERNEL_SYM_NAME_LEN); - attr->name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + strncpy(attr->name, ev->name, LTTNG_KERNEL_ABI_SYM_NAME_LEN); + attr->name[LTTNG_KERNEL_ABI_SYM_NAME_LEN - 1] = '\0'; /* Setting up a kernel event */ local_kernel_event->fd = -1; @@ -502,9 +503,9 @@ enum lttng_error_code trace_kernel_create_event_notifier_rule( assert(condition); condition_type = lttng_condition_get_type(condition); - assert(condition_type == LTTNG_CONDITION_TYPE_ON_EVENT); + assert(condition_type == LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES); - condition_status = lttng_condition_on_event_get_rule( + condition_status = lttng_condition_event_rule_matches_get_rule( condition, &event_rule); assert(condition_status == LTTNG_CONDITION_STATUS_OK); assert(event_rule); @@ -545,14 +546,14 @@ error: */ enum lttng_error_code trace_kernel_init_event_notifier_from_event_rule( const struct lttng_event_rule *rule, - struct lttng_kernel_event_notifier *kernel_event_notifier) + struct lttng_kernel_abi_event_notifier *kernel_event_notifier) { enum lttng_error_code ret_code; const char *name; int strncpy_ret; switch (lttng_event_rule_get_type(rule)) { - case LTTNG_EVENT_RULE_TYPE_KERNEL_PROBE: + case LTTNG_EVENT_RULE_TYPE_KERNEL_KPROBE: { uint64_t address = 0, offset = 0; const char *symbol_name = NULL; @@ -560,7 +561,7 @@ enum lttng_error_code trace_kernel_init_event_notifier_from_event_rule( enum lttng_kernel_probe_location_status k_status; enum lttng_event_rule_status status; - status = lttng_event_rule_kernel_probe_get_location(rule, &location); + status = lttng_event_rule_kernel_kprobe_get_location(rule, &location); if (status != LTTNG_EVENT_RULE_STATUS_OK) { ret_code = LTTNG_ERR_PROBE_LOCATION_INVAL; goto error; @@ -587,13 +588,13 @@ enum lttng_error_code trace_kernel_init_event_notifier_from_event_rule( abort(); } - kernel_event_notifier->event.instrumentation = LTTNG_KERNEL_KPROBE; + kernel_event_notifier->event.instrumentation = LTTNG_KERNEL_ABI_KPROBE; kernel_event_notifier->event.u.kprobe.addr = address; kernel_event_notifier->event.u.kprobe.offset = offset; if (symbol_name) { strncpy_ret = lttng_strncpy( kernel_event_notifier->event.u.kprobe.symbol_name, - symbol_name, LTTNG_KERNEL_SYM_NAME_LEN); + symbol_name, LTTNG_KERNEL_ABI_SYM_NAME_LEN); if (strncpy_ret) { ret_code = LTTNG_ERR_INVALID; @@ -601,26 +602,26 @@ enum lttng_error_code trace_kernel_init_event_notifier_from_event_rule( } } - kernel_event_notifier->event.u.kprobe.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0'; + kernel_event_notifier->event.u.kprobe.symbol_name[LTTNG_KERNEL_ABI_SYM_NAME_LEN - 1] = '\0'; - status = lttng_event_rule_kernel_probe_get_event_name(rule, &name); + status = lttng_event_rule_kernel_kprobe_get_event_name(rule, &name); assert(status == LTTNG_EVENT_RULE_STATUS_OK); ret_code = LTTNG_OK; break; } - case LTTNG_EVENT_RULE_TYPE_USERSPACE_PROBE: + case LTTNG_EVENT_RULE_TYPE_KERNEL_UPROBE: { const struct lttng_userspace_probe_location* location = NULL; const struct lttng_userspace_probe_location_lookup_method *lookup = NULL; enum lttng_event_rule_status status; - status = lttng_event_rule_userspace_probe_get_location(rule, &location); + status = lttng_event_rule_kernel_uprobe_get_location(rule, &location); if (status != LTTNG_EVENT_RULE_STATUS_OK) { ret_code = LTTNG_ERR_PROBE_LOCATION_INVAL; goto error; } - kernel_event_notifier->event.instrumentation = LTTNG_KERNEL_UPROBE; + kernel_event_notifier->event.instrumentation = LTTNG_KERNEL_ABI_UPROBE; lookup = lttng_userspace_probe_location_get_lookup_method( location); @@ -649,55 +650,71 @@ enum lttng_error_code trace_kernel_init_event_notifier_from_event_rule( abort(); } - status = lttng_event_rule_userspace_probe_get_event_name( + status = lttng_event_rule_kernel_uprobe_get_event_name( rule, &name); assert(status == LTTNG_EVENT_RULE_STATUS_OK); ret_code = LTTNG_OK; break; } - case LTTNG_EVENT_RULE_TYPE_TRACEPOINT: + case LTTNG_EVENT_RULE_TYPE_KERNEL_TRACEPOINT: { - const enum lttng_domain_type domain = - lttng_event_rule_get_domain_type(rule); const enum lttng_event_rule_status status = - lttng_event_rule_tracepoint_get_pattern( + lttng_event_rule_kernel_tracepoint_get_name_pattern( rule, &name); - assert(domain == LTTNG_DOMAIN_KERNEL); assert(status == LTTNG_EVENT_RULE_STATUS_OK); kernel_event_notifier->event.instrumentation = - LTTNG_KERNEL_TRACEPOINT; + LTTNG_KERNEL_ABI_TRACEPOINT; ret_code = LTTNG_OK; break; } - case LTTNG_EVENT_RULE_TYPE_SYSCALL: + case LTTNG_EVENT_RULE_TYPE_KERNEL_SYSCALL: { const enum lttng_event_rule_status status = - lttng_event_rule_syscall_get_pattern( + lttng_event_rule_kernel_syscall_get_name_pattern( rule, &name); + const enum lttng_event_rule_kernel_syscall_emission_site + emission_site = + lttng_event_rule_kernel_syscall_get_emission_site(rule); + enum lttng_kernel_abi_syscall_entryexit entryexit; assert(status == LTTNG_EVENT_RULE_STATUS_OK); + assert(emission_site != LTTNG_EVENT_RULE_KERNEL_SYSCALL_EMISSION_SITE_UNKNOWN); + + switch(emission_site) { + case LTTNG_EVENT_RULE_KERNEL_SYSCALL_EMISSION_SITE_ENTRY: + entryexit = LTTNG_KERNEL_ABI_SYSCALL_ENTRY; + break; + case LTTNG_EVENT_RULE_KERNEL_SYSCALL_EMISSION_SITE_EXIT: + entryexit = LTTNG_KERNEL_ABI_SYSCALL_EXIT; + break; + case LTTNG_EVENT_RULE_KERNEL_SYSCALL_EMISSION_SITE_ENTRY_EXIT: + entryexit = LTTNG_KERNEL_ABI_SYSCALL_ENTRYEXIT; + break; + default: + abort(); + break; + } kernel_event_notifier->event.instrumentation = - LTTNG_KERNEL_SYSCALL; + LTTNG_KERNEL_ABI_SYSCALL; kernel_event_notifier->event.u.syscall.abi = - LTTNG_KERNEL_SYSCALL_ABI_ALL; + LTTNG_KERNEL_ABI_SYSCALL_ABI_ALL; kernel_event_notifier->event.u.syscall.entryexit = - LTTNG_KERNEL_SYSCALL_ENTRY; + entryexit; kernel_event_notifier->event.u.syscall.match = - LTTNG_KERNEL_SYSCALL_MATCH_NAME; + LTTNG_KERNEL_ABI_SYSCALL_MATCH_NAME; ret_code = LTTNG_OK; break; } - case LTTNG_EVENT_RULE_TYPE_KERNEL_FUNCTION: default: abort(); break; } strncpy_ret = lttng_strncpy(kernel_event_notifier->event.name, name, - LTTNG_KERNEL_SYM_NAME_LEN); + LTTNG_KERNEL_ABI_SYM_NAME_LEN); if (strncpy_ret) { ret_code = LTTNG_ERR_INVALID; goto error;