OPT_TYPE,
};
+static struct lttng_handle *handle;
+
/*
* Taken from the LTTng ABI
*/
.u.perf = { \
PERF_TYPE_HW_CACHE, \
(uint64_t) PERF_COUNT_HW_CACHE_##name \
- * (uint64_t) PERF_COUNT_HW_CACHE_OP_##op \
- * (uint64_t) PERF_COUNT_HW_CACHE_RESULT_##result, \
+ | ((uint64_t) PERF_COUNT_HW_CACHE_OP_##op << 8) \
+ | ((uint64_t) PERF_COUNT_HW_CACHE_RESULT_##result << 16), \
}, \
}
/*
* Add context to channel or event.
*/
-static int add_context(void)
+static int add_context(char *session_name)
{
int ret = CMD_SUCCESS;
struct lttng_event_context context;
struct ctx_type *type;
char *ptr;
- if (set_session_name(opt_session_name) < 0) {
- ret = CMD_ERROR;
+ if (opt_kernel) {
+ dom.type = LTTNG_DOMAIN_KERNEL;
+ }
+
+ handle = lttng_create_handle(session_name, &dom);
+ if (handle == NULL) {
+ ret = -1;
goto error;
}
/* Iterate over all context type given */
cds_list_for_each_entry(type, &ctx_type_list.head, list) {
+
context.ctx = type->opt->ctx_type;
if (context.ctx == LTTNG_EVENT_CONTEXT_PERF_COUNTER) {
context.u.perf_counter.type = type->opt->u.perf.type;
context.u.perf_counter.config = type->opt->u.perf.config;
- strcpy(context.u.perf_counter.name,
- type->opt->symbol);
+ strcpy(context.u.perf_counter.name, type->opt->symbol);
/* Replace : and - by _ */
while ((ptr = strchr(context.u.perf_counter.name, '-')) != NULL) {
*ptr = '_';
}
}
if (opt_kernel) {
- /* Create kernel domain */
- dom.type = LTTNG_DOMAIN_KERNEL;
-
DBG("Adding kernel context");
- ret = lttng_add_context(&dom, &context, opt_event_name,
+ ret = lttng_add_context(handle, &context, opt_event_name,
opt_channel_name);
if (ret < 0) {
- goto error;
+ fprintf(stderr, "%s: ", type->opt->symbol);
+ continue;
} else {
MSG("Kernel context %s added", type->opt->symbol);
}
ret = CMD_NOT_IMPLEMENTED;
goto error;
} else {
- ERR("Please specify a tracer (kernel or user-space)");
+ ERR("Please specify a tracer (--kernel or --userspace)");
goto error;
}
}
error:
+ lttng_destroy_handle(handle);
+
return ret;
}
char *tmp;
static poptContext pc;
struct ctx_type *type, *tmptype;
+ char *session_name = NULL;
if (argc < 2) {
usage(stderr);
}
}
- ret = add_context();
+ if (!opt_session_name) {
+ session_name = get_session_name();
+ if (session_name == NULL) {
+ ret = -1;
+ goto end;
+ }
+ } else {
+ session_name = opt_session_name;
+ }
+
+ ret = add_context(session_name);
/* Cleanup allocated memory */
cds_list_for_each_entry_safe(type, tmptype, &ctx_type_list.head, list) {