X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Fadd_trigger.c;h=0f94ef1551d69348341e52d219296812a26e4820;hb=46fd07accf36998fca3e43e54513755a98f68f48;hp=eb1f40215aceba1adab815d8a22ade9604440064;hpb=975d26c5fd28fdb1fe3771951df8939132d2f55b;p=lttng-tools.git diff --git a/src/bin/lttng/commands/add_trigger.c b/src/bin/lttng/commands/add_trigger.c index eb1f40215..0f94ef155 100644 --- a/src/bin/lttng/commands/add_trigger.c +++ b/src/bin/lttng/commands/add_trigger.c @@ -130,12 +130,13 @@ bool assign_event_rule_type(enum lttng_event_rule_type *dest, const char *arg) } else if (strcmp(arg, "kprobe") == 0 || strcmp(arg, "kernel-probe") == 0) { *dest = LTTNG_EVENT_RULE_TYPE_KERNEL_PROBE; - } else if (strcmp(arg, "uprobe") == 0 || - strcmp(arg, "userspace-probe") == 0) { - *dest = LTTNG_EVENT_RULE_TYPE_USERSPACE_PROBE; + } else if (strcmp(arg, "kernel:uprobe") == 0) { + *dest = LTTNG_EVENT_RULE_TYPE_KERNEL_UPROBE; } else if (strcmp(arg, "function") == 0) { *dest = LTTNG_EVENT_RULE_TYPE_KERNEL_FUNCTION; - } else if (strncmp(arg, "syscall", strlen("syscall")) == 0) { + } else if (strncmp(arg, "syscall", strlen("syscall")) == 0 || + strncmp(arg, "kernel:syscall", + strlen("kernel:syscall")) == 0) { /* * Matches the following: * - syscall @@ -143,10 +144,15 @@ bool assign_event_rule_type(enum lttng_event_rule_type *dest, const char *arg) * - syscall:exit * - syscall:entry+exit * - syscall:* + * - kernel:syscall + * - kernel:syscall:entry + * - kernel:syscall:exit + * - kernel:syscall:entry+exit + * - kernel:syscall:* * * Validation for the right side is left to further usage sites. */ - *dest = LTTNG_EVENT_RULE_TYPE_SYSCALL; + *dest = LTTNG_EVENT_RULE_TYPE_KERNEL_SYSCALL; } else { ERR("Invalid `--type` value: %s", arg); goto error; @@ -189,16 +195,27 @@ end: } static bool parse_syscall_emission_site_from_type(const char *str, - enum lttng_event_rule_syscall_emission_site_type *type) + enum lttng_event_rule_kernel_syscall_emission_site *type) { bool ret = false; + const char kernel_prefix[] = "kernel:"; + const size_t kernel_prefix_len = sizeof(kernel_prefix) - 1; + + /* + * If the passed string is of the form "kernel:syscall*", move the + * pointer passed "kernel:". + */ + if (strncmp(str, kernel_prefix, kernel_prefix_len) == 0) { + str = &str[kernel_prefix_len]; + } + if (strcmp(str, "syscall") == 0 || strcmp(str, "syscall:entry+exit") == 0) { - *type = LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_ENTRY_EXIT; + *type = LTTNG_EVENT_RULE_KERNEL_SYSCALL_EMISSION_SITE_ENTRY_EXIT; } else if (strcmp(str, "syscall:entry") == 0) { - *type = LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_ENTRY; + *type = LTTNG_EVENT_RULE_KERNEL_SYSCALL_EMISSION_SITE_ENTRY; } else if (strcmp(str, "syscall:exit") == 0) { - *type = LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_EXIT; + *type = LTTNG_EVENT_RULE_KERNEL_SYSCALL_EMISSION_SITE_EXIT; } else { goto error; } @@ -838,7 +855,7 @@ struct parse_event_rule_res parse_event_rule(int *argc, const char ***argv) */ switch (event_rule_type) { case LTTNG_EVENT_RULE_TYPE_TRACEPOINT: - case LTTNG_EVENT_RULE_TYPE_SYSCALL: + case LTTNG_EVENT_RULE_TYPE_KERNEL_SYSCALL: if (!name) { name = strdup("*"); } @@ -869,7 +886,7 @@ struct parse_event_rule_res parse_event_rule(int *argc, const char ***argv) */ switch (event_rule_type) { case LTTNG_EVENT_RULE_TYPE_KERNEL_PROBE: - case LTTNG_EVENT_RULE_TYPE_USERSPACE_PROBE: + case LTTNG_EVENT_RULE_TYPE_KERNEL_UPROBE: case LTTNG_EVENT_RULE_TYPE_KERNEL_FUNCTION: if (!location) { ERR("Event rule of type %s requires a --location.", @@ -916,8 +933,8 @@ struct parse_event_rule_res parse_event_rule(int *argc, const char ***argv) switch (event_rule_type) { case LTTNG_EVENT_RULE_TYPE_KERNEL_PROBE: case LTTNG_EVENT_RULE_TYPE_KERNEL_FUNCTION: - case LTTNG_EVENT_RULE_TYPE_USERSPACE_PROBE: - case LTTNG_EVENT_RULE_TYPE_SYSCALL: + case LTTNG_EVENT_RULE_TYPE_KERNEL_UPROBE: + case LTTNG_EVENT_RULE_TYPE_KERNEL_SYSCALL: if (domain_type != LTTNG_DOMAIN_KERNEL) { ERR("Event type not available for user-space tracing."); goto error; @@ -939,7 +956,7 @@ struct parse_event_rule_res parse_event_rule(int *argc, const char ***argv) if (filter && domain_type == LTTNG_DOMAIN_KERNEL) { switch (event_rule_type) { case LTTNG_EVENT_RULE_TYPE_TRACEPOINT: - case LTTNG_EVENT_RULE_TYPE_SYSCALL: + case LTTNG_EVENT_RULE_TYPE_KERNEL_SYSCALL: break; default: ERR("Filter expressions are not supported for %s event rules.", @@ -1102,7 +1119,7 @@ struct parse_event_rule_res parse_event_rule(int *argc, const char ***argv) break; } - case LTTNG_EVENT_RULE_TYPE_USERSPACE_PROBE: + case LTTNG_EVENT_RULE_TYPE_KERNEL_UPROBE: { int ret; enum lttng_event_rule_status event_rule_status; @@ -1114,14 +1131,14 @@ struct parse_event_rule_res parse_event_rule(int *argc, const char ***argv) goto error; } - res.er = lttng_event_rule_userspace_probe_create(userspace_probe_location); + res.er = lttng_event_rule_kernel_uprobe_create(userspace_probe_location); if (!res.er) { ERR("Failed to create userspace probe event rule."); goto error; } event_rule_status = - lttng_event_rule_userspace_probe_set_event_name( + lttng_event_rule_kernel_uprobe_set_event_name( res.er, event_name); if (event_rule_status != LTTNG_EVENT_RULE_STATUS_OK) { ERR("Failed to set user space probe event rule's name to '%s'.", @@ -1131,24 +1148,24 @@ struct parse_event_rule_res parse_event_rule(int *argc, const char ***argv) break; } - case LTTNG_EVENT_RULE_TYPE_SYSCALL: + case LTTNG_EVENT_RULE_TYPE_KERNEL_SYSCALL: { enum lttng_event_rule_status event_rule_status; - enum lttng_event_rule_syscall_emission_site_type emission_site_type; + enum lttng_event_rule_kernel_syscall_emission_site emission_site; if (!parse_syscall_emission_site_from_type( - event_rule_type_str, &emission_site_type)) { + event_rule_type_str, &emission_site)) { ERR("Failed to parse syscall type '%s'.", event_rule_type_str); goto error; } - res.er = lttng_event_rule_syscall_create(emission_site_type); + res.er = lttng_event_rule_kernel_syscall_create(emission_site); if (!res.er) { ERR("Failed to create syscall event rule."); goto error; } - event_rule_status = lttng_event_rule_syscall_set_pattern( + event_rule_status = lttng_event_rule_kernel_syscall_set_name_pattern( res.er, name); if (event_rule_status != LTTNG_EVENT_RULE_STATUS_OK) { ERR("Failed to set syscall event rule's pattern to '%s'.", @@ -1157,7 +1174,7 @@ struct parse_event_rule_res parse_event_rule(int *argc, const char ***argv) } if (filter) { - event_rule_status = lttng_event_rule_syscall_set_filter( + event_rule_status = lttng_event_rule_kernel_syscall_set_filter( res.er, filter); if (event_rule_status != LTTNG_EVENT_RULE_STATUS_OK) { ERR("Failed to set syscall event rule's filter to '%s'.",