>From 819b327b481ef55c2aaa0a59e7fbb751010eb0f9 Wed, 1 Feb 2012 11:44:31 -0500 From: Daniel U. Thibault <[email protected]> Date: Wed, 1 Feb 2012 11:44:08 -0500 Subject: [PATCH] bin/lttng/commands: require exactly one of --kernel and --userspace
Applies to add_context, calibrate, enable/disable_channels/events; list can have none, one or both. Signed-off-by: Daniel U. Thibault <[email protected]> diff --git a/src/bin/lttng/commands/add_context.c b/src/bin/lttng/commands/add_context.c index d37ece3..72833b4 100644 --- a/src/bin/lttng/commands/add_context.c +++ b/src/bin/lttng/commands/add_context.c @@ -327,7 +327,7 @@ #endif fprintf(ofp, " -t, --type TYPE Context type. You can repeat that option on\n"); fprintf(ofp, " the command line to specify multiple contexts at once.\n"); - fprintf(ofp, " (--kernel preempts --userspace)\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); fprintf(ofp, " TYPE can be one of the strings below:\n"); print_ctx_type(ofp); fprintf(ofp, "\n"); @@ -371,15 +371,11 @@ struct ctx_type *type; char *ptr; - if (opt_kernel) { - dom.type = LTTNG_DOMAIN_KERNEL; - } else if (opt_userspace) { - dom.type = LTTNG_DOMAIN_UST; - } else { - ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); - ret = CMD_ERROR; - goto error; - } + /* + * cmd_add_context() ensures exactly one + * of opt_kernel and opt_userspace is set + */ + dom.type = (opt_kernel ? LTTNG_DOMAIN_KERNEL : LTTNG_DOMAIN_UST); handle = lttng_create_handle(session_name, &dom); if (handle == NULL) { @@ -469,7 +465,6 @@ switch (opt) { case OPT_HELP: usage(stdout); - ret = CMD_SUCCESS; goto end; case OPT_TYPE: /* @@ -508,7 +503,6 @@ break; case OPT_LIST_OPTIONS: list_cmd_options(stdout, long_options); - ret = CMD_SUCCESS; goto end; default: usage(stderr); @@ -517,6 +511,16 @@ } } + if (opt_kernel && opt_userspace) { + ERR("Can't use -k/--kernel and -u/--userspace together"); + ret = CMD_FATAL; + goto end; + } else if (!opt_kernel && !opt_userspace) { + ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); + ret = CMD_FATAL; + goto end; + } + session_name = (opt_session_name ? opt_session_name : get_session_name() ); if (session_name == NULL) { ret = CMD_ERROR; diff --git a/src/bin/lttng/commands/calibrate.c b/src/bin/lttng/commands/calibrate.c index 591c869..b4c6cb5 100644 --- a/src/bin/lttng/commands/calibrate.c +++ b/src/bin/lttng/commands/calibrate.c @@ -93,25 +93,24 @@ #if 0 fprintf(ofp, " -u, --userspace [CMD] Apply to the user-space tracer (domain: UST\n"); fprintf(ofp, " EXEC_NAME). If no CMD, the domain is UST global.\n"; - fprintf(ofp, " (-k preempts -u)\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); fprintf(ofp, " -p, --pid PID If -u, apply to specific PID (domain: UST PID)\n"); #else fprintf(ofp, " -u, --userspace Apply to the user-space tracer\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); #endif fprintf(ofp, "\n"); fprintf(ofp, "Calibrate options:\n"); #if 0 - fprintf(ofp, " --tracepoint Tracepoint event (default)\n"); - fprintf(ofp, " --probe\n"); - fprintf(ofp, " Dynamic probe.\n"); + fprintf(ofp, " --tracepoint Tracepoint event (default)\n"); + fprintf(ofp, " --probe Dynamic probe.\n"); #if 0 - fprintf(ofp, " --function:entry symbol\n"); - fprintf(ofp, " Function tracer event\n"); + fprintf(ofp, " --function:entry symbol Function tracer event\n"); #endif - fprintf(ofp, " --syscall System call eventl\n"); - fprintf(ofp, " --marker User-space marker (deprecated)\n"); + fprintf(ofp, " --syscall System call eventl\n"); + fprintf(ofp, " --marker User-space marker (deprecated)\n"); #else - fprintf(ofp, " --function Dynamic function entry/return probe (default)\n"); + fprintf(ofp, " --function Dynamic function entry/return probe (default)\n"); #endif fprintf(ofp, "\n"); } @@ -128,15 +127,11 @@ struct lttng_calibrate calibrate; /* Create lttng domain */ - if (opt_kernel) { - dom.type = LTTNG_DOMAIN_KERNEL; - } else if (opt_userspace) { - dom.type = LTTNG_DOMAIN_UST; - } else { - ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); - ret = CMD_ERROR; - goto error; - } + /* + * cmd_calibrate() ensures exactly one + * of opt_kernel and opt_userspace is set + */ + dom.type = (opt_kernel ? LTTNG_DOMAIN_KERNEL : LTTNG_DOMAIN_UST); handle = lttng_create_handle(NULL, &dom); if (handle == NULL) { @@ -159,6 +154,7 @@ ret = CMD_ERROR; goto error; } + ret = CMD_SUCCESS; MSG("%s calibration done", opt_kernel ? "Kernel" : "UST"); break; case LTTNG_EVENT_FUNCTION_ENTRY: @@ -171,8 +167,6 @@ ret = CMD_UNDEFINED; goto error; } - - ret = CMD_SUCCESS; error: lttng_destroy_handle(handle); @@ -187,7 +181,7 @@ */ int cmd_calibrate(int argc, const char **argv) { - int opt, ret; + int opt, ret = CMD_SUCCESS; static poptContext pc; pc = poptGetContext(NULL, argc, argv, long_options, 0); @@ -200,7 +194,6 @@ switch (opt) { case OPT_HELP: usage(stdout); - ret = CMD_SUCCESS; goto end; case OPT_TRACEPOINT: ret = CMD_UNDEFINED; @@ -225,7 +218,6 @@ break; case OPT_LIST_OPTIONS: list_cmd_options(stdout, long_options); - ret = CMD_SUCCESS; goto end; default: usage(stderr); @@ -234,6 +226,16 @@ } } + if (opt_kernel && opt_userspace) { + ERR("Can't use -k/--kernel and -u/--userspace together"); + ret = CMD_FATAL; + goto end; + } else if (!opt_kernel && !opt_userspace) { + ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); + ret = CMD_FATAL; + goto end; + } + ret = calibrate_lttng(); end: diff --git a/src/bin/lttng/commands/disable_channels.c b/src/bin/lttng/commands/disable_channels.c index f6929e6..951fa10 100644 --- a/src/bin/lttng/commands/disable_channels.c +++ b/src/bin/lttng/commands/disable_channels.c @@ -76,11 +76,11 @@ fprintf(ofp, " -u, --userspace [CMD] Apply to the user-space tracer\n"); fprintf(ofp, " If no CMD, the domain used is UST global\n"); fprintf(ofp, " otherwise the domain is UST EXEC_NAME\n"); - fprintf(ofp, " (--kernel preempts --userspace)\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); fprintf(ofp, " -p, --pid PID If -u, apply to specific PID (domain: UST PID)\n"); #else fprintf(ofp, " -u, --userspace Apply to the user-space tracer\n"); - fprintf(ofp, " (--kernel preempts --userspace)\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); #endif fprintf(ofp, "\n"); } @@ -99,15 +99,11 @@ struct lttng_domain dom; /* Create lttng domain */ - if (opt_kernel) { - dom.type = LTTNG_DOMAIN_KERNEL; - } else if (opt_userspace) { - dom.type = LTTNG_DOMAIN_UST; - } else { - ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); - ret = CMD_ERROR; - goto error; - } + /* + * cmd_disable_channels() ensures exactly one + * of opt_kernel and opt_userspace is set + */ + dom.type = (opt_kernel ? LTTNG_DOMAIN_KERNEL : LTTNG_DOMAIN_UST); handle = lttng_create_handle(session_name, &dom); if (handle == NULL) { @@ -188,6 +184,16 @@ } } + if (opt_kernel && opt_userspace) { + ERR("Can't use -k/--kernel and -u/--userspace together"); + ret = CMD_FATAL; + goto end; + } else if (!opt_kernel && !opt_userspace) { + ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); + ret = CMD_FATAL; + goto end; + } + opt_channels = (char*) poptGetArg(pc); if (opt_channels == NULL) { ERR("Missing channel name(s).\n"); diff --git a/src/bin/lttng/commands/disable_events.c b/src/bin/lttng/commands/disable_events.c index 23f4858..7b2223c 100644 --- a/src/bin/lttng/commands/disable_events.c +++ b/src/bin/lttng/commands/disable_events.c @@ -82,11 +82,11 @@ fprintf(ofp, " -u, --userspace [CMD] Apply to the user-space tracer\n"); fprintf(ofp, " If no CMD, the domain used is UST global\n"); fprintf(ofp, " otherwise the domain is UST EXEC_NAME\n"); - fprintf(ofp, " (--kernel preempts --userspace)\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); fprintf(ofp, " -p, --pid PID If -u, apply to specific PID (domain: UST PID)\n"); #else fprintf(ofp, " -u, --userspace Apply to the user-space tracer\n"); - fprintf(ofp, " (--kernel preempts --userspace)\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); #endif fprintf(ofp, "\n"); } @@ -111,23 +111,12 @@ channel_name = opt_channel_name; } - /* TODO: Either do this test everywhere or don't do it anywhere */ - if (opt_kernel && opt_userspace) { - ERR("Can't use -k/--kernel and -u/--userspace together"); - ret = CMD_FATAL; - goto error; - } - /* Create lttng domain */ - if (opt_kernel) { - dom.type = LTTNG_DOMAIN_KERNEL; - } else if (opt_userspace) { - dom.type = LTTNG_DOMAIN_UST; - } else { - ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); - ret = CMD_ERROR; - goto error; - } + /* + * cmd_disable_events() ensures exactly one + * of opt_kernel and opt_userspace is set + */ + dom.type = (opt_kernel ? LTTNG_DOMAIN_KERNEL : LTTNG_DOMAIN_UST); handle = lttng_create_handle(session_name, &dom); if (handle == NULL) { @@ -155,7 +144,7 @@ if (opt_kernel) { DBG("Disabling kernel event %s in channel %s", event_name, channel_name); - } else if (opt_userspace) { /* User-space tracer action */ + } else { /* User-space tracer action */ #if 0 if (opt_cmd_name != NULL || opt_pid) { MSG("Only supporting tracing all UST processes (-u) for now."); @@ -165,10 +154,6 @@ #endif DBG("Disabling UST event %s in channel %s", event_name, channel_name); - } else { - ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); - ret = CMD_ERROR; - goto error; } ret = lttng_disable_event(handle, event_name, channel_name); @@ -231,6 +216,16 @@ } } + if (opt_kernel && opt_userspace) { + ERR("Can't use -k/--kernel and -u/--userspace together"); + ret = CMD_FATAL; + goto end; + } else if (!opt_kernel && !opt_userspace) { + ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); + ret = CMD_FATAL; + goto end; + } + opt_event_list = (char*) poptGetArg(pc); if (opt_event_list == NULL && opt_disable_all == 0) { ERR("Missing event name(s).\n"); diff --git a/src/bin/lttng/commands/enable_channels.c b/src/bin/lttng/commands/enable_channels.c index 7bebf76..566e017 100644 --- a/src/bin/lttng/commands/enable_channels.c +++ b/src/bin/lttng/commands/enable_channels.c @@ -91,11 +91,11 @@ fprintf(ofp, " -u, --userspace [CMD] Apply to the user-space tracer\n"); fprintf(ofp, " If no CMD, the domain used is UST global\n"); fprintf(ofp, " otherwise the domain is UST EXEC_NAME\n"); - fprintf(ofp, " (--kernel preempts --userspace)\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); fprintf(ofp, " -p, --pid PID If -u, apply to specific PID (domain: UST PID)\n"); #else fprintf(ofp, " -u, --userspace Apply to the user-space tracer\n"); - fprintf(ofp, " (--kernel preempts --userspace)\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); #endif fprintf(ofp, "\n"); fprintf(ofp, "Channel options:\n"); @@ -163,15 +163,11 @@ struct lttng_domain dom; /* Create lttng domain */ - if (opt_kernel) { - dom.type = LTTNG_DOMAIN_KERNEL; - } else if (opt_userspace) { - dom.type = LTTNG_DOMAIN_UST; - } else { - ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); - ret = CMD_ERROR; - goto error; - } + /* + * cmd_enable_channels() ensures exactly one + * of opt_kernel and opt_userspace is set + */ + dom.type = (opt_kernel ? LTTNG_DOMAIN_KERNEL : LTTNG_DOMAIN_UST); set_default_attr(&dom); @@ -317,6 +313,16 @@ } } + if (opt_kernel && opt_userspace) { + ERR("Can't use -k/--kernel and -u/--userspace together"); + ret = CMD_FATAL; + goto end; + } else if (!opt_kernel && !opt_userspace) { + ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); + ret = CMD_FATAL; + goto end; + } + opt_channels = (char*) poptGetArg(pc); if (opt_channels == NULL) { ERR("Missing channel name(s).\n"); diff --git a/src/bin/lttng/commands/enable_events.c b/src/bin/lttng/commands/enable_events.c index 695e374..94b9eb7 100644 --- a/src/bin/lttng/commands/enable_events.c +++ b/src/bin/lttng/commands/enable_events.c @@ -110,11 +110,11 @@ fprintf(ofp, " -u, --userspace [CMD] Apply to the user-space tracer\n"); fprintf(ofp, " If no CMD, the domain used is UST global\n"); fprintf(ofp, " otherwise the domain is UST EXEC_NAME\n"); - fprintf(ofp, " (--kernel preempts --userspace)\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); fprintf(ofp, " -p, --pid PID If -u, apply to specific PID (domain: UST PID)\n"); #else fprintf(ofp, " -u, --userspace Apply to the user-space tracer\n"); - fprintf(ofp, " (--kernel preempts --userspace)\n"); + fprintf(ofp, " (--kernel and --userspace are mutually exclusive)\n"); #endif fprintf(ofp, "\n"); fprintf(ofp, "Event options:\n"); @@ -124,10 +124,8 @@ fprintf(ofp, " e.g.:\n"); fprintf(ofp, " \"*\"\n"); fprintf(ofp, " \"app_component:na*\"\n"); - fprintf(ofp, " --loglevel name\n"); - fprintf(ofp, " Tracepoint loglevel (range: 0 to loglevel)\n"); - fprintf(ofp, " --loglevel-only name\n"); - fprintf(ofp, " Tracepoint loglevel (only this loglevel)\n"); + fprintf(ofp, " --loglevel name Tracepoint loglevel (range: 0 to loglevel)\n"); + fprintf(ofp, " --loglevel-only name Tracepoint loglevel (only this loglevel)\n"); fprintf(ofp, " --probe [addr | symbol | symbol+offset]\n"); fprintf(ofp, " Dynamic probe.\n"); fprintf(ofp, " Addr and offset can be octal (0NNN...),\n"); @@ -236,23 +234,12 @@ channel_name = opt_channel_name; } - /* TODO: Either do this test everywhere or don't do it anywhere */ - if (opt_kernel && opt_userspace) { - ERR("Can't use -k/--kernel and -u/--userspace together"); - ret = CMD_FATAL; - goto error; - } - /* Create lttng domain */ - if (opt_kernel) { - dom.type = LTTNG_DOMAIN_KERNEL; - } else if (opt_userspace) { - dom.type = LTTNG_DOMAIN_UST; - } else { - ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); - ret = CMD_ERROR; - goto error; - } + /* + * cmd_enable_events() ensures exactly one + * of opt_kernel and opt_userspace is set + */ + dom.type = (opt_kernel ? LTTNG_DOMAIN_KERNEL : LTTNG_DOMAIN_UST); handle = lttng_create_handle(session_name, &dom); if (handle == NULL) { @@ -363,7 +350,7 @@ /* kernel loglevels not implemented */ ev.loglevel_type = opt_loglevel_type; ev.loglevel[0] = '\0'; - } else if (opt_userspace) { /* User-space tracer action */ + } else { /* User-space tracer action */ #if 0 if (opt_cmd_name != NULL || opt_pid) { MSG("Only supporting tracing all UST processes (-u) for now."); @@ -396,10 +383,6 @@ ev.loglevel_type = opt_loglevel_type; strncpy(ev.loglevel, opt_loglevel, LTTNG_SYMBOL_NAME_LEN); ev.loglevel[LTTNG_SYMBOL_NAME_LEN - 1] = '\0'; - } else { - ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); - ret = CMD_ERROR; - goto error; } ret = lttng_enable_event(handle, &ev, channel_name); @@ -482,6 +465,16 @@ } } + if (opt_kernel && opt_userspace) { + ERR("Can't use -k/--kernel and -u/--userspace together"); + ret = CMD_FATAL; + goto end; + } else if (!opt_kernel && !opt_userspace) { + ERR("Please specify a tracer (-k/--kernel or -u/--userspace)"); + ret = CMD_FATAL; + goto end; + } + opt_event_list = (char*) poptGetArg(pc); if (opt_event_list == NULL && opt_enable_all == 0) { ERR("Missing event name(s).\n"); @@ -490,6 +483,7 @@ goto end; } + /* TODO Simplify this if */ if (!opt_session_name) { session_name = get_session_name(); if (session_name == NULL) { diff --git a/src/bin/lttng/commands/list.c b/src/bin/lttng/commands/list.c index 61e1f23..9a91f5c 100644 --- a/src/bin/lttng/commands/list.c +++ b/src/bin/lttng/commands/list.c @@ -70,22 +70,23 @@ */ static void usage(FILE *ofp) { - fprintf(ofp, "usage: lttng list [SESSION [<OPTIONS>]]\n"); + fprintf(ofp, "usage: lttng list [OPTIONS] [SESSION [SESSION_OPTIONS]]\n"); fprintf(ofp, "\n"); fprintf(ofp, "With no arguments, list available tracing session(s)\n"); fprintf(ofp, "\n"); - fprintf(ofp, "With -k alone, list available kernel events\n"); - fprintf(ofp, "With -u alone, list available userspace events\n"); + fprintf(ofp, "Without a session, -k lists available kernel events\n"); + fprintf(ofp, "Without a session, -u lists available userspace events\n"); fprintf(ofp, "\n"); fprintf(ofp, " -h, --help Show this help\n"); - fprintf(ofp, " --list-options Simple listing of options\n"); + fprintf(ofp, " --list-options Simple listing of options\n"); fprintf(ofp, " -k, --kernel Select kernel domain\n"); fprintf(ofp, " -u, --userspace Select user-space domain.\n"); + fprintf(ofp, " (You may specify none, one or both of -k and -u)\n"); #if 0 fprintf(ofp, " -p, --pid PID List user-space events by PID\n"); #endif fprintf(ofp, "\n"); - fprintf(ofp, "Options:\n"); + fprintf(ofp, "Session Options:\n"); fprintf(ofp, " -c, --channel NAME List details of a channel\n"); fprintf(ofp, " -d, --domain List available domain(s)\n"); fprintf(ofp, "\n"); @@ -529,6 +530,7 @@ /* * The 'list <options>' first level command + * Returns one of the CMD_* result values. */ int cmd_list(int argc, const char **argv) { @@ -550,14 +552,13 @@ while ((opt = poptGetNextOpt(pc)) != -1) { switch (opt) { case OPT_HELP: - usage(stderr); + usage(stdout); goto end; case OPT_USERSPACE: opt_userspace = 1; break; case OPT_LIST_OPTIONS: list_cmd_options(stdout, long_options); - ret = CMD_SUCCESS; goto end; default: usage(stderr); ------------------------------ Daniel U. Thibault R & D pour la défense Canada - Valcartier (RDDC Valcartier) / Defence R&D Canada - Valcartier (DRDC Valcartier) Système de systèmes (SdS) / System of Systems (SoS) Solutions informatiques et expérimentations (SIE) / Computing Solutions and Experimentations (CSE) 2459 Boul. Pie XI Nord Québec, QC G3J 1X5 CANADA Vox : (418) 844-4000 x4245 Fax : (418) 844-4538 NAC: 918V QSDJ Gouvernement du Canada / Government of Canada <http://www.valcartier.drdc-rddc.gc.ca/> _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
