+ /* Check for symbol+offset */
+ ret = sscanf(opt, "%[^'+']+%s", name, s_hex);
+ if (ret == 2) {
+ strncpy(ev->attr.probe.symbol_name, name, LTTNG_SYMBOL_NAME_LEN);
+ ev->attr.probe.symbol_name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
+ DBG("probe symbol %s", ev->attr.probe.symbol_name);
+ if (strlen(s_hex) == 0) {
+ ERR("Invalid probe offset %s", s_hex);
+ ret = -1;
+ goto end;
+ }
+ ev->attr.probe.offset = strtoul(s_hex, NULL, 0);
+ DBG("probe offset %" PRIu64, ev->attr.probe.offset);
+ ev->attr.probe.addr = 0;
+ goto end;
+ }
+
+ /* Check for symbol */
+ if (isalpha(name[0])) {
+ ret = sscanf(opt, "%s", name);
+ if (ret == 1) {
+ strncpy(ev->attr.probe.symbol_name, name, LTTNG_SYMBOL_NAME_LEN);
+ ev->attr.probe.symbol_name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
+ DBG("probe symbol %s", ev->attr.probe.symbol_name);
+ ev->attr.probe.offset = 0;
+ DBG("probe offset %" PRIu64, ev->attr.probe.offset);
+ ev->attr.probe.addr = 0;
+ goto end;
+ }
+ }
+
+ /* Check for address */
+ ret = sscanf(opt, "%s", s_hex);
+ if (ret > 0) {
+ if (strlen(s_hex) == 0) {
+ ERR("Invalid probe address %s", s_hex);
+ ret = -1;
+ goto end;
+ }
+ ev->attr.probe.addr = strtoul(s_hex, NULL, 0);
+ DBG("probe addr %" PRIu64, ev->attr.probe.addr);
+ ev->attr.probe.offset = 0;
+ memset(ev->attr.probe.symbol_name, 0, LTTNG_SYMBOL_NAME_LEN);
+ goto end;
+ }
+
+ /* No match */
+ ret = -1;
+
+end:
+ return ret;
+}
+
+/*
+ * Enabling event using the lttng API.
+ */
+static int enable_events(char *session_name)
+{
+ int err, ret = CMD_SUCCESS;
+ char *event_name, *channel_name = NULL;
+ struct lttng_event ev;
+ struct lttng_domain dom;
+