projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Preliminary work for full UST support
[lttng-tools.git]
/
lttng
/
commands
/
add_context.c
diff --git
a/lttng/commands/add_context.c
b/lttng/commands/add_context.c
index cb0c08741c7113fd21734b7d065fca518e147b7f..e82678bfccd08054fee3a1f82dd330f45d9db0f6 100644
(file)
--- a/
lttng/commands/add_context.c
+++ b/
lttng/commands/add_context.c
@@
-47,6
+47,8
@@
enum {
OPT_TYPE,
};
OPT_TYPE,
};
+static struct lttng_handle *handle;
+
/*
* Taken from the LTTng ABI
*/
/*
* Taken from the LTTng ABI
*/
@@
-164,8
+166,8
@@
static struct poptOption long_options[] = {
.u.perf = { \
PERF_TYPE_HW_CACHE, \
(uint64_t) PERF_COUNT_HW_CACHE_##name \
.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)
, \
}, \
}
}, \
}
@@
-267,14
+269,14
@@
static void print_ctx_type(FILE *ofp)
int indent_len = strlen(indent);
int len, i = 0;
int indent_len = strlen(indent);
int len, i = 0;
- fprintf(ofp, indent);
+ fprintf(ofp,
"%s",
indent);
len = indent_len;
while (ctx_opts[i].symbol != NULL) {
if (len > indent_len) {
if (len + strlen(ctx_opts[i].symbol) + 2
>= PRINT_LINE_LEN) {
fprintf(ofp, ",\n");
len = indent_len;
while (ctx_opts[i].symbol != NULL) {
if (len > indent_len) {
if (len + strlen(ctx_opts[i].symbol) + 2
>= PRINT_LINE_LEN) {
fprintf(ofp, ",\n");
- fprintf(ofp, indent);
+ fprintf(ofp,
"%s",
indent);
len = indent_len;
} else {
len += fprintf(ofp, ", ");
len = indent_len;
} else {
len += fprintf(ofp, ", ");
@@
-313,7
+315,7
@@
static void usage(FILE *ofp)
fprintf(ofp, "\n");
fprintf(ofp, "Example:\n");
fprintf(ofp, "This command will add the context information 'prio' and two perf\n"
fprintf(ofp, "\n");
fprintf(ofp, "Example:\n");
fprintf(ofp, "This command will add the context information 'prio' and two perf\n"
- "counters: hardware branch misses and cache
-
misses, to all events\n"
+ "counters: hardware branch misses and cache
misses, to all events\n"
"in the trace data output:\n");
fprintf(ofp, "# lttng add-context -k -t prio -t perf:branch-misses -t perf:cache-misses\n");
fprintf(ofp, "\n");
"in the trace data output:\n");
fprintf(ofp, "# lttng add-context -k -t prio -t perf:branch-misses -t perf:cache-misses\n");
fprintf(ofp, "\n");
@@
-341,7
+343,7
@@
end:
/*
* Add context to channel or event.
*/
/*
* 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;
{
int ret = CMD_SUCCESS;
struct lttng_event_context context;
@@
-349,19
+351,24
@@
static int add_context(void)
struct ctx_type *type;
char *ptr;
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) {
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;
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 = '_';
/* Replace : and - by _ */
while ((ptr = strchr(context.u.perf_counter.name, '-')) != NULL) {
*ptr = '_';
@@
-371,14
+378,12
@@
static int add_context(void)
}
}
if (opt_kernel) {
}
}
if (opt_kernel) {
- /* Create kernel domain */
- dom.type = LTTNG_DOMAIN_KERNEL;
-
DBG("Adding kernel context");
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) {
opt_channel_name);
if (ret < 0) {
- goto error;
+ fprintf(stderr, "%s: ", type->opt->symbol);
+ continue;
} else {
MSG("Kernel context %s added", type->opt->symbol);
}
} else {
MSG("Kernel context %s added", type->opt->symbol);
}
@@
-392,12
+397,14
@@
static int add_context(void)
ret = CMD_NOT_IMPLEMENTED;
goto error;
} else {
ret = CMD_NOT_IMPLEMENTED;
goto error;
} else {
- ERR("Please specify a tracer (
kernel or user-
space)");
+ ERR("Please specify a tracer (
--kernel or --user
space)");
goto error;
}
}
error:
goto error;
}
}
error:
+ lttng_destroy_handle(handle);
+
return ret;
}
return ret;
}
@@
-410,6
+417,7
@@
int cmd_add_context(int argc, const char **argv)
char *tmp;
static poptContext pc;
struct ctx_type *type, *tmptype;
char *tmp;
static poptContext pc;
struct ctx_type *type, *tmptype;
+ char *session_name = NULL;
if (argc < 2) {
usage(stderr);
if (argc < 2) {
usage(stderr);
@@
-460,7
+468,17
@@
int cmd_add_context(int argc, const char **argv)
}
}
}
}
- 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) {
/* Cleanup allocated memory */
cds_list_for_each_entry_safe(type, tmptype, &ctx_type_list.head, list) {
This page took
0.024838 seconds
and
4
git commands to generate.