X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fevent-rule%2Fkernel-uprobe.c;h=2af1a028c80d9ae1e7f778105435d528177da403;hp=df5b896cfc9b453a03a3dd530bc30a9c04129770;hb=6a751b953a43c566b74818ec6325db0978e16c66;hpb=1aa9c49c60b7d7370ceafc3ac076de423de22b7f diff --git a/src/common/event-rule/kernel-uprobe.c b/src/common/event-rule/kernel-uprobe.c index df5b896cf..2af1a028c 100644 --- a/src/common/event-rule/kernel-uprobe.c +++ b/src/common/event-rule/kernel-uprobe.c @@ -8,12 +8,13 @@ #include #include #include +#include +#include #include -#include +#include #include +#include #include -#include -#include #include #include #include @@ -214,6 +215,63 @@ end: return ret; } +static enum lttng_error_code lttng_event_rule_kernel_uprobe_mi_serialize( + const struct lttng_event_rule *rule, struct mi_writer *writer) +{ + int ret; + enum lttng_error_code ret_code; + enum lttng_event_rule_status status; + const char *event_name = NULL; + const struct lttng_userspace_probe_location *location = NULL; + + assert(rule); + assert(writer); + assert(IS_UPROBE_EVENT_RULE(rule)); + + status = lttng_event_rule_kernel_uprobe_get_event_name( + rule, &event_name); + assert(status == LTTNG_EVENT_RULE_STATUS_OK); + assert(event_name); + + status = lttng_event_rule_kernel_uprobe_get_location(rule, &location); + assert(status == LTTNG_EVENT_RULE_STATUS_OK); + assert(location); + + /* Open event rule kernel uprobe element. */ + ret = mi_lttng_writer_open_element( + writer, mi_lttng_element_event_rule_kernel_uprobe); + if (ret) { + goto mi_error; + } + + /* Event name. */ + ret = mi_lttng_writer_write_element_string(writer, + mi_lttng_element_event_rule_event_name, event_name); + if (ret) { + goto mi_error; + } + + /* Probe location. */ + ret_code = lttng_userspace_probe_location_mi_serialize(location, writer); + if (ret_code != LTTNG_OK) { + goto end; + } + + /* Close event rule kernel uprobe element. */ + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto mi_error; + } + + ret_code = LTTNG_OK; + goto end; + +mi_error: + ret_code = LTTNG_ERR_MI_IO_FAIL; +end: + return ret_code; +} + struct lttng_event_rule *lttng_event_rule_kernel_uprobe_create( const struct lttng_userspace_probe_location *location) { @@ -239,6 +297,7 @@ struct lttng_event_rule *lttng_event_rule_kernel_uprobe_create( urule->parent.generate_exclusions = lttng_event_rule_kernel_uprobe_generate_exclusions; urule->parent.hash = lttng_event_rule_kernel_uprobe_hash; + urule->parent.mi_serialize = lttng_event_rule_kernel_uprobe_mi_serialize; if (userspace_probe_set_location(urule, location)) { lttng_event_rule_destroy(rule);